blob: 35a8a00fc0bed2d559c1b81c7e9cc8a16e2eccdf [file] [log] [blame]
/*
* Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation
//
package org.eclipse.persistence.jpa.tests.jpql.tools;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.persistence.jpa.jpql.tools.ContentAssistExtension;
import org.eclipse.persistence.jpa.jpql.tools.ContentAssistProposals;
import org.eclipse.persistence.jpa.jpql.tools.ContentAssistProposals.ClassType;
import org.eclipse.persistence.jpa.jpql.tools.ResultQuery;
import org.eclipse.persistence.jpa.jpql.utility.CollectionTools;
import org.junit.Test;
import static org.eclipse.persistence.jpa.jpql.parser.Expression.*;
import static org.junit.Assert.*;
/**
* Unit-test for {@link ContentAssistExtension} when the JPQL grammar is extended with EclipseLink.
*
* @version 2.5
* @since 2.5
* @author Pascal Filion
*/
@SuppressWarnings("nls")
public final class EclipseLinkContentAssistExtensionTest extends AbstractContentAssistExtensionTest {
@Override
protected ContentAssistExtension buildContentAssistExtension() {
return new ContentAssistExtension() {
@Override
public Iterable<String> classNames(String prefix, ClassType type) {
if (type == ClassType.INSTANTIABLE) {
return filter(EclipseLinkContentAssistExtensionTest.this.classNames(), prefix);
}
return filter(EclipseLinkContentAssistExtensionTest.this.enumTypes(), prefix);
}
@Override
public Iterable<String> columnNames(String tableName, String prefix) {
return filter(EclipseLinkContentAssistExtensionTest.this.columnNames(tableName), prefix);
}
@Override
public Iterable<String> tableNames(String prefix) {
return filter(EclipseLinkContentAssistExtensionTest.this.tableNames(), prefix);
}
};
}
private void test_buildQuery(String jpqlQuery,
int position,
String proposal,
String expectedJpqlQuery,
int expectedPosition,
boolean insert) throws Exception {
ContentAssistProposals proposals = buildContentAssistProposals(jpqlQuery, position);
ResultQuery result = proposals.buildQuery(jpqlQuery, proposal, position, insert);
assertEquals(expectedJpqlQuery, result.getQuery());
assertEquals(expectedPosition, result.getPosition());
}
@Test
public void test_buildQuery_001_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('') EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE''') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_001_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('') EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_002_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('') EMP";
int position = "SELECT e FROM Employee e, TABLE('".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_002_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('') EMP";
int position = "SELECT e FROM Employee e, TABLE('".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_003_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_003_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_004_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = "SELECT e FROM Employee e, TABLE('".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'E";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_004_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = "SELECT e FROM Employee e, TABLE('".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_005_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE() EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_005_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE() EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_006_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_006_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE".length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_007_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_007_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_008_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(E";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_008_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(E";
int position = jpqlQuery.length();
String proposal = "'EMPLOYEE'";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE'";
int expectedPosition = expectedJpqlQuery.length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_buildQuery_009_Insert() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A = 100";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A".length();
String proposal = "ADDRESS_ID";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.ADDRESS_ID = 100";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.ADDRESS_ID".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, true);
}
@Test
public void test_buildQuery_009_Override() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A = 100";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A".length();
String proposal = "ADDRESS_ID";
String expectedJpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.ADDRESS_ID = 100";
int expectedPosition = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.ADDRESS_ID".length();
test_buildQuery(jpqlQuery, position, proposal, expectedJpqlQuery, expectedPosition, false);
}
@Test
public void test_classNames_001() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, ";
int position = jpqlQuery.length();
testHasTheseProposals(jpqlQuery, position, classNames());
}
@Test
public void test_classNames_002() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, jpql.query.Employee emp";
int position = "SELECT e FROM Employee e, jpql.query.Employee".length();
testHasTheseProposals(jpqlQuery, position, filter(classNames(), "jpql.query.Employee"));
}
@Test
public void test_classNames_003() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, jpql.query.";
int position = jpqlQuery.length();
testHasTheseProposals(jpqlQuery, position, filter(classNames(), "jpql.query."));
}
@Test
public void test_classNames_004() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, jpql.query.Employee emp";
int position = "SELECT e FROM Employee e, jpql.query.".length();
testHasTheseProposals(jpqlQuery, position, filter(classNames(), "jpql.query."));
}
@Test
public void test_classNames_005() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, jpql.query.Employee emp";
int position = "SELECT e FROM Employee e, ".length();
List<String> proposals = new ArrayList<String>();
proposals.add(IN);
CollectionTools.addAll(proposals, entityNames());
CollectionTools.addAll(proposals, classNames());
testHasTheseProposals(jpqlQuery, position, proposals);
}
@Test
public void test_columnNames_01() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, columnNames("EMPLOYEE"));
}
@Test
public void test_columnNames_02() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.F";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(columnNames("EMPLOYEE"), "F"));
}
@Test
public void test_columnNames_03() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.FIRST_NAME";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.".length();
testHasOnlyTheseProposals(jpqlQuery, position, columnNames("EMPLOYEE"));
}
@Test
public void test_columnNames_04() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.FIRST_NAME";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(columnNames("EMPLOYEE"), "FIRST_NAME"));
}
@Test
public void test_columnNames_05() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE EMP.A";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(columnNames("EMPLOYEE"), "A"));
}
@Test
public void test_columnNames_06() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP WHERE e.";
int position = jpqlQuery.length();
testDoesNotHaveTheseProposals(jpqlQuery, position, columnNames("EMPLOYEE"));
}
@Test
public void test_columnNames_07() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A = 100";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.".length();
testDoesNotHaveTheseProposals(jpqlQuery, position, columnNames("EMPLOYEE"));
}
@Test
public void test_columnNames_08() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A = 100";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP, TABLE('ADDRESS') a WHERE e.name = EMP.LAST_NAME and a.A".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(columnNames("ADDRESS"), "A"));
}
@Test
public void test_tableNames_01() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, ";
int position = jpqlQuery.length();
testDoesNotHaveTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_02() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_03() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('";
int position = jpqlQuery.length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_04() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('')";
int position = "SELECT e FROM Employee e, TABLE(".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_05() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('')";
int position = "SELECT e FROM Employee e, TABLE('".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_06() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE')";
int position = "SELECT e FROM Employee e, TABLE(".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_07() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE')";
int position = "SELECT e FROM Employee e, TABLE('".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_08() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E')";
int position = "SELECT e FROM Employee e, TABLE('E".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "E"));
}
@Test
public void test_tableNames_09() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE')";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "EMPLOYEE"));
}
@Test
public void test_tableNames_10() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE')";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "EMPLOYEE"));
}
@Test
public void test_tableNames_11() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = "SELECT e FROM Employee e, TABLE('E".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "E"));
}
@Test
public void test_tableNames_12() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = "SELECT e FROM Employee e, TABLE('".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_13() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('E";
int position = "SELECT e FROM Employee e, TABLE(".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_14() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE('EMPLOYEE') EMP";
int position = "SELECT e FROM Employee e, TABLE('EMPLOYEE'".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "EMPLOYEE"));
}
@Test
public void test_tableNames_15() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE() EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_16() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(EMPLOYEE) EMP";
int position = "SELECT e FROM Employee e, TABLE(".length();
testHasOnlyTheseProposals(jpqlQuery, position, tableNames());
}
@Test
public void test_tableNames_17() throws Exception {
String jpqlQuery = "SELECT e FROM Employee e, TABLE(EMPLOYEE) EMP";
int position = "SELECT e FROM Employee e, TABLE(EMPLOYEE".length();
testHasOnlyTheseProposals(jpqlQuery, position, filter(tableNames(), "EMPLOYEE"));
}
}