blob: c3ac29a1c62ea0f27e370168f20fd9f45569e9c6 [file] [log] [blame]
/*
* Copyright (c) 2011, 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 org.eclipse.persistence.jpa.jpql.tools.BasicRefactoringTool;
import org.eclipse.persistence.jpa.jpql.tools.DefaultBasicRefactoringTool;
import org.eclipse.persistence.jpa.tests.jpql.UniqueSignature;
import org.junit.Test;
import static org.eclipse.persistence.jpa.tests.jpql.JPQLQueries2_0.*;
/**
* The abstract definition of a unit-test that tests {@link BasicRefactoringTool BasicRefactoringTool} when the JPA version is 2.0.
*
* @version 2.5
* @since 2.4
* @author Pascal Filion
*/
@UniqueSignature
@SuppressWarnings("nls")
public final class BasicRefactoringToolTest2_0 extends AbstractBasicRefactoringToolTest {
private BasicRefactoringTool buildRefactoringTool(String jpqlQuery) throws Exception {
return new DefaultBasicRefactoringTool(jpqlQuery, getGrammar(), getPersistenceUnit());
}
@Test
public void test_RenameEntityName_1() throws Exception {
// SELECT TYPE(employee) FROM Employee employee WHERE TYPE(employee) <> Exempt
String jpqlQuery = query_007();
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset = "SELECT TYPE(employee) FROM Employee employee WHERE TYPE(employee) <> ".length();
String oldValue = "Exempt";
String newValue = "Exemption";
refactoringTool.renameEntityName(oldValue, newValue);
String expected = "SELECT TYPE(employee) FROM Employee employee WHERE TYPE(employee) <> Exemption";
testChange(refactoringTool, jpqlQuery, expected, offset, oldValue, newValue);
}
@Test
public void test_RenameEntityName_2() throws Exception {
// SELECT e.name,
// CASE TYPE(e) WHEN Exempt THEN 'Exempt'
// WHEN Contractor THEN 'Contractor'
// WHEN Intern THEN 'Intern'
// ELSE 'NonExempt'
// END
// FROM Employee e, Contractor c
// WHERE e.dept.name = 'Engineering'
String jpqlQuery = query_002();
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset1 = jpqlQuery.indexOf("Contractor THEN");
int offset2 = jpqlQuery.indexOf("Contractor c");
String oldValue1 = "Contractor";
String newValue1 = "Manager";
refactoringTool.renameEntityName(oldValue1, newValue1);
int offset3 = jpqlQuery.indexOf("Exempt THEN");
String oldValue2 = "Exempt";
String newValue2 = "Exemption";
refactoringTool.renameEntityName(oldValue2, newValue2);
int offset4 = jpqlQuery.indexOf("Employee e");
String oldValue3 = "Employee";
String newValue3 = "Address";
refactoringTool.renameEntityName(oldValue3, newValue3);
String expected = "SELECT e.name, " +
" CASE TYPE(e) WHEN Exemption THEN 'Exempt' " +
" WHEN Manager THEN 'Contractor' " +
" WHEN Intern THEN 'Intern' " +
" ELSE 'NonExempt' " +
" END " +
"FROM Address e, Manager c " +
"WHERE e.dept.name = 'Engineering'";
testChanges(
refactoringTool,
jpqlQuery,
expected,
new int[] { offset2, offset4, offset1, offset3 },
new String[] { oldValue1, oldValue3, oldValue1, oldValue2 },
new String[] { newValue1, newValue3, newValue1, newValue2 }
);
}
@Test
public void test_RenameEntityName_3() throws Exception {
// SELECT e FROM Employee e WHERE TYPE(e) IN (Exempt, Contractor)
String jpqlQuery = query_004();
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset = "SELECT e FROM Employee e WHERE TYPE(e) IN (Exempt, ".length();
String oldValue = "Contractor";
String newValue = "GeneralContractor";
refactoringTool.renameEntityName(oldValue, newValue);
String expected = "SELECT e FROM Employee e WHERE TYPE(e) IN (Exempt, GeneralContractor)";
testChange(refactoringTool, jpqlQuery, expected, offset, oldValue, newValue);
}
@Test
public void test_RenameEntityName_4() throws Exception {
// SELECT TYPE(employee) FROM Employee employee WHERE TYPE(employee) <> Exempt
String jpqlQuery = query_007();
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset = "SELECT TYPE(employee) FROM ".length();
String oldValue = "Employee";
String newValue = "Address";
refactoringTool.renameEntityName(oldValue, newValue);
String expected = "SELECT TYPE(employee) FROM Address employee WHERE TYPE(employee) <> Exempt";
testChange(refactoringTool, jpqlQuery, expected, offset, oldValue, newValue);
}
@Test
public void test_RenameEntityName_5() throws Exception {
String jpqlQuery = "SELECT p FROM Project p WHERE TYPE(p) <> LargeProject";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset = "SELECT p FROM Project p WHERE TYPE(p) <> ".length();
String oldValue = "LargeProject";
String newValue = "LProject";
refactoringTool.renameEntityName(oldValue, newValue);
String expected = "SELECT p FROM Project p WHERE TYPE(p) <> LProject";
testChange(refactoringTool, jpqlQuery, expected, offset, oldValue, newValue);
}
@Test
public void test_RenameResultVariable_1() throws Exception {
String jpqlQuery = "SELECT NEW java.util.Vector(a.employees) AS u FROM Address A ORDER BY u";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset1 = "SELECT NEW java.util.Vector(a.employees) AS ".length();
int offset2 = "SELECT NEW java.util.Vector(a.employees) AS u FROM Address A ORDER BY ".length();
String oldValue = "u";
String newValue = "v";
refactoringTool.renameResultVariable(oldValue, newValue);
String expected = "SELECT NEW java.util.Vector(a.employees) AS v FROM Address A ORDER BY v";
testChanges(refactoringTool, jpqlQuery, expected, oldValue, newValue, offset2, offset1);
}
@Test
public void test_RenameResultVariable_2() throws Exception {
String jpqlQuery = "SELECT e.name AS n FROM Employee e";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
String oldValue = "u";
String newValue = "v";
refactoringTool.renameResultVariable(oldValue, newValue);
testHasNoChanges(refactoringTool);
}
@Test
public void test_RenameResultVariable_3() throws Exception {
String jpqlQuery = "SELECT e.name AS n, 2 + 2 o FROM Address A";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset = "SELECT e.name AS n, 2 + 2 ".length();
String oldValue = "o";
String newValue = "value";
refactoringTool.renameResultVariable(oldValue, newValue);
String expected = "SELECT e.name AS n, 2 + 2 value FROM Address A";
testChange(refactoringTool, jpqlQuery, expected, offset, oldValue, newValue);
}
@Test
public void test_RenameResultVariable_4() throws Exception {
String jpqlQuery = "SELECT e.name AS n, e.age a FROM Address A ORDER BY n";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset1 = "SELECT e.name AS ".length();
int offset2 = "SELECT e.name AS n, e.age a FROM Address A ORDER BY ".length();
String oldValue = "n";
String newValue = "name";
refactoringTool.renameResultVariable(oldValue, newValue);
String expected = "SELECT e.name AS name, e.age a FROM Address A ORDER BY name";
testChanges(refactoringTool, jpqlQuery, expected, oldValue, newValue, offset2, offset1);
}
@Test
public void test_RenameResultVariable_5() throws Exception {
String jpqlQuery = "SELECT e.name AS n, e.age a FROM Address A ORDER BY n, a";
BasicRefactoringTool refactoringTool = buildRefactoringTool(jpqlQuery);
int offset1 = "SELECT e.name AS ".length();
int offset2 = "SELECT e.name AS n, e.age a FROM Address A ORDER BY ".length();
String oldValue1 = "n";
String newValue1 = "name";
refactoringTool.renameResultVariable(oldValue1, newValue1);
int offset3 = "SELECT e.name AS n, e.age ".length();
int offset4 = "SELECT e.name AS n, e.age a FROM Address A ORDER BY n, ".length();
String oldValue2 = "a";
String newValue2 = "age";
refactoringTool.renameResultVariable(oldValue2, newValue2);
String expected = "SELECT e.name AS name, e.age age FROM Address A ORDER BY name, age";
testChanges(
refactoringTool,
jpqlQuery,
expected,
new int[] { offset4, offset2, offset3, offset1 },
new String[] { oldValue2, oldValue1, oldValue2, oldValue1 },
new String[] { newValue2, newValue1, newValue2, newValue1 }
);
}
}