mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
cyclic dependencies tests
This commit is contained in:
5
testData/dependencies/cycle/packageScope1/com/a/A.java
Normal file
5
testData/dependencies/cycle/packageScope1/com/a/A.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.a;
|
||||
import com.b.B;
|
||||
public class A{
|
||||
B b = new B();
|
||||
}
|
||||
5
testData/dependencies/cycle/packageScope1/com/b/B.java
Normal file
5
testData/dependencies/cycle/packageScope1/com/b/B.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
public class B{
|
||||
A a = new A();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.subscope1.a;
|
||||
import com.subscope1.b.B;
|
||||
public class A{
|
||||
B b = new B();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.subscope1.b;
|
||||
import com.subscope1.a.A;
|
||||
public class B{
|
||||
A a = new A();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.subscope2.c;
|
||||
import com.subscope2.d.D;
|
||||
public class C{
|
||||
D d = new D();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.subscope2.d;
|
||||
import com.subscope2.c.C;
|
||||
public class D{
|
||||
C c = new C();
|
||||
}
|
||||
5
testData/dependencies/cycle/t1/com/a/A.java
Normal file
5
testData/dependencies/cycle/t1/com/a/A.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.a;
|
||||
import com.b.B;
|
||||
public class A{
|
||||
B b = new B();
|
||||
}
|
||||
5
testData/dependencies/cycle/t1/com/b/B.java
Normal file
5
testData/dependencies/cycle/t1/com/b/B.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
public class B{
|
||||
A a = new A();
|
||||
}
|
||||
5
testData/dependencies/cycle/t2/com/a/A.java
Normal file
5
testData/dependencies/cycle/t2/com/a/A.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.a;
|
||||
import com.b.B;
|
||||
public class A{
|
||||
B b = new B();
|
||||
}
|
||||
5
testData/dependencies/cycle/t2/com/b/B.java
Normal file
5
testData/dependencies/cycle/t2/com/b/B.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
public class B{
|
||||
A a = new A();
|
||||
}
|
||||
5
testData/dependencies/cycle/t2/com/c/C.java
Normal file
5
testData/dependencies/cycle/t2/com/c/C.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.c;
|
||||
import com.d.D;
|
||||
public class C{
|
||||
D d = new D();
|
||||
}
|
||||
5
testData/dependencies/cycle/t2/com/d/D.java
Normal file
5
testData/dependencies/cycle/t2/com/d/D.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.d;
|
||||
import com.c.C;
|
||||
public class D{
|
||||
C c = new C();
|
||||
}
|
||||
5
testData/dependencies/cycle/t3/com/a/A.java
Normal file
5
testData/dependencies/cycle/t3/com/a/A.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.a;
|
||||
import com.c.C;
|
||||
public class A{
|
||||
C c = new C();
|
||||
}
|
||||
7
testData/dependencies/cycle/t3/com/b/B.java
Normal file
7
testData/dependencies/cycle/t3/com/b/B.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
import com.d.D;
|
||||
public class B{
|
||||
A a = new A();
|
||||
D d = new D();
|
||||
}
|
||||
5
testData/dependencies/cycle/t3/com/c/C.java
Normal file
5
testData/dependencies/cycle/t3/com/c/C.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.c;
|
||||
import com.b.B;
|
||||
public class C{
|
||||
B b = new B();
|
||||
}
|
||||
5
testData/dependencies/cycle/t3/com/d/D.java
Normal file
5
testData/dependencies/cycle/t3/com/d/D.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.d;
|
||||
import com.b.B;
|
||||
public class D{
|
||||
B b = new B();
|
||||
}
|
||||
7
testData/dependencies/cycle/t4/com/a/A.java
Normal file
7
testData/dependencies/cycle/t4/com/a/A.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.a;
|
||||
import com.b.B;
|
||||
import com.c.C;
|
||||
public class A{
|
||||
B b = new B();
|
||||
C c = new C();
|
||||
}
|
||||
5
testData/dependencies/cycle/t4/com/b/B.java
Normal file
5
testData/dependencies/cycle/t4/com/b/B.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
public class B{
|
||||
A a = new A();
|
||||
}
|
||||
5
testData/dependencies/cycle/t4/com/c/C.java
Normal file
5
testData/dependencies/cycle/t4/com/c/C.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.c;
|
||||
import com.d.D;
|
||||
public class C{
|
||||
D d = new D();
|
||||
}
|
||||
5
testData/dependencies/cycle/t4/com/d/D.java
Normal file
5
testData/dependencies/cycle/t4/com/d/D.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.d;
|
||||
import com.a.A;
|
||||
public class D{
|
||||
A a = new A();
|
||||
}
|
||||
5
testData/dependencies/cycle/t5/com/a/A.java
Normal file
5
testData/dependencies/cycle/t5/com/a/A.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.a;
|
||||
import com.c.C;
|
||||
public class A{
|
||||
C c = new C();
|
||||
}
|
||||
7
testData/dependencies/cycle/t5/com/b/B.java
Normal file
7
testData/dependencies/cycle/t5/com/b/B.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.b;
|
||||
import com.a.A;
|
||||
import com.d.D;
|
||||
public class B{
|
||||
A a = new A();
|
||||
D d = new D();
|
||||
}
|
||||
5
testData/dependencies/cycle/t5/com/c/C.java
Normal file
5
testData/dependencies/cycle/t5/com/c/C.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.c;
|
||||
import com.b.B;
|
||||
public class C{
|
||||
B b = new B();
|
||||
}
|
||||
5
testData/dependencies/cycle/t5/com/d/D.java
Normal file
5
testData/dependencies/cycle/t5/com/d/D.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.d;
|
||||
import com.b.B;
|
||||
public class D{
|
||||
B b = new B();
|
||||
}
|
||||
196
testSource/com/intellij/dependencies/CyclicDependenciesTest.java
Normal file
196
testSource/com/intellij/dependencies/CyclicDependenciesTest.java
Normal file
@@ -0,0 +1,196 @@
|
||||
package com.intellij.dependencies;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.testFramework.PsiTestUtil;
|
||||
import com.intellij.testFramework.PsiTestCase;
|
||||
import com.intellij.cyclicDependencies.CyclicDependenciesBuilder;
|
||||
import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
* Date: Feb 2, 2005
|
||||
*/
|
||||
public class CyclicDependenciesTest extends PsiTestCase {
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
String root = PathManagerEx.getTestDataPath() + "/dependencies/cycle/" + getTestName(true);
|
||||
PsiTestUtil.removeAllRoots(myModule, JavaSdkImpl.getMockJdk("java 1.4"));
|
||||
PsiTestUtil.createTestProjectStructure(myProject, myModule, root, myFilesToDelete);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void testT1() {
|
||||
// com.a<->com.b
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myProject, AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.a"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies);
|
||||
}
|
||||
|
||||
public void testPackageScope1(){
|
||||
// com.a<->com.b
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myPsiManager.findPackage("com"), AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.a"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies);
|
||||
}
|
||||
|
||||
public void testT2() {
|
||||
//com.b<->com.a
|
||||
//com.c<->com.d
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myProject, AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.a"}});
|
||||
expected.put("com.d", new String[][]{{"com.d", "com.c"}});
|
||||
expected.put("com.c", new String[][]{{"com.c", "com.d"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies);
|
||||
}
|
||||
|
||||
public void testPackageScope2() {
|
||||
//com.b<->com.a - find
|
||||
//com.c<->com.d - not in scope
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myPsiManager.findPackage("com.subscope1"), AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.subscope1.b", new String[][]{{"com.subscope1.b", "com.subscope1.a"}});
|
||||
expected.put("com.subscope1.a", new String[][]{{"com.subscope1.a", "com.subscope1.b"}});
|
||||
checkResult(expected, cyclicDependencies);
|
||||
}
|
||||
|
||||
public void testT3() {
|
||||
//com.b<->com.d
|
||||
//com.b->com.a->com.c->com.b
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myProject, AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.d"}});
|
||||
expected.put("com.d", new String[][]{{"com.d", "com.b"}});
|
||||
expected.put("com.c", new String[][]{{"com.c", "com.b", "com.a"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.c", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies, true);
|
||||
}
|
||||
|
||||
public void testT4() {
|
||||
//com.a<->com.b
|
||||
//com.a->com.c->com.d->com.a
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myProject, AnalysisScope.SOURCE_JAVA_FILES),
|
||||
1);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.a"}});
|
||||
expected.put("com.d", new String[][]{{"com.d", "com.a", "com.c"}});
|
||||
expected.put("com.c", new String[][]{{"com.c", "com.d", "com.a"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies);
|
||||
}
|
||||
|
||||
public void testT5() {
|
||||
//com.b<->com.d
|
||||
//com.b->com.a->com.c->com.b
|
||||
final CyclicDependenciesBuilder builder = new CyclicDependenciesBuilder(myProject,
|
||||
new AnalysisScope(myProject, AnalysisScope.SOURCE_JAVA_FILES),
|
||||
10);
|
||||
builder.analyze();
|
||||
final HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cyclicDependencies = builder.getCyclicDependencies();
|
||||
HashMap<String, String[][]> expected = new HashMap<String, String[][]>();
|
||||
expected.put("com.b", new String[][]{{"com.b", "com.d"}, {"com.b", "com.a", "com.c"}});
|
||||
expected.put("com.d", new String[][]{{"com.d", "com.b"}, {"com.d", "com.b", "com.a", "com.c", "com.b"}});
|
||||
expected.put("com.c", new String[][]{{"com.c", "com.b", "com.a"}, {"com.c", "com.b", "com.d", "com.b", "com.a"}});
|
||||
expected.put("com.a", new String[][]{{"com.a", "com.c", "com.b"}, {"com.a", "com.c", "com.b", "com.d", "com.b"}});
|
||||
checkResult(expected, cyclicDependencies, true);
|
||||
}
|
||||
|
||||
private void checkResult(HashMap<String, String[][]> expected, HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cycles) {
|
||||
assertEquals(expected.size(), cycles.size());
|
||||
Iterator<PsiPackage> it = cycles.keySet().iterator();
|
||||
for (Iterator<String> iterator = expected.keySet().iterator(); iterator.hasNext();) {
|
||||
final String packs = iterator.next();
|
||||
final PsiPackage psiPackage = it.next();
|
||||
assertEquals(packs, psiPackage.getQualifiedName());
|
||||
assertEquals(expected.get(packs).length, cycles.get(psiPackage).size());
|
||||
Iterator<ArrayList<PsiPackage>> iC = cycles.get(psiPackage).iterator();
|
||||
for (int i = 0; i < expected.get(packs).length; i++) {
|
||||
final String[] expectedCycle = expected.get(packs)[i];
|
||||
final ArrayList<PsiPackage> cycle = iC.next();
|
||||
assertEquals(expectedCycle.length, cycle.size());
|
||||
Iterator<PsiPackage> iCycle = cycle.iterator();
|
||||
for (int j = 0; j < expectedCycle.length; j++) {
|
||||
final String expectedInCycle = expectedCycle[j];
|
||||
final PsiPackage packageInCycle = iCycle.next();
|
||||
assertEquals(expectedInCycle, packageInCycle.getQualifiedName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkResult(HashMap<String, String[][]> expected, HashMap<PsiPackage, Set<ArrayList<PsiPackage>>> cycles, boolean forceContains){
|
||||
assertEquals(expected.size(), cycles.size());
|
||||
for (Iterator<PsiPackage> iterator = cycles.keySet().iterator(); iterator.hasNext();) {
|
||||
final PsiPackage psiPackage = iterator.next();
|
||||
assertTrue(expected.containsKey(psiPackage.getQualifiedName()));
|
||||
final String packs = psiPackage.getQualifiedName();
|
||||
if (forceContains){
|
||||
assertEquals(expected.get(packs).length, cycles.get(psiPackage).size());
|
||||
}
|
||||
for (Iterator<ArrayList<PsiPackage>> iC = cycles.get(psiPackage).iterator(); iC.hasNext();) {
|
||||
final ArrayList<PsiPackage> cycle = iC.next();
|
||||
final String[][] expectedCycles = expected.get(packs);
|
||||
final String [] string = new String[cycle.size()];
|
||||
int i = 0;
|
||||
for (Iterator<PsiPackage> iCycle = cycle.iterator(); iCycle.hasNext();) {
|
||||
final PsiPackage packageInCycle = iCycle.next();
|
||||
string[i++] = packageInCycle.getQualifiedName();
|
||||
}
|
||||
assertTrue(findInMatrix(expectedCycles, string) > -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int findInMatrix(String [][] matrix, String [] string){
|
||||
for (int i = 0; i < matrix.length; i++) {
|
||||
String[] strings = matrix[i];
|
||||
if (Arrays.equals(strings, string)){
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user