]> git.uio.no Git - ifi-stolz-refaktor.git/commitdiff
Adding tests for PrefixesCollector.
authorErlend Kristiansen <erlenkr@ifi.uio.no>
Wed, 15 Jan 2014 12:59:10 +0000 (13:59 +0100)
committerErlend Kristiansen <erlenkr@ifi.uio.no>
Wed, 15 Jan 2014 12:59:10 +0000 (13:59 +0100)
software/no.uio.ifi.refaktor.examples/examples/src/prefixes/A.java [new file with mode: 0644]
software/no.uio.ifi.refaktor.examples/examples/src/prefixes/B.java [new file with mode: 0644]
software/no.uio.ifi.refaktor.examples/examples/src/prefixes/C.java [new file with mode: 0644]
software/no.uio.ifi.refaktor.examples/examples/src/prefixes/D.java [new file with mode: 0644]
software/no.uio.ifi.refaktor.examples/examples/src/prefixes/Main.java [new file with mode: 0644]
software/no.uio.ifi.refaktor.tests/src/no/uio/ifi/refaktor/tests/PrefixesCollectorTest.java [new file with mode: 0644]
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/prefix/PrefixSet.java

diff --git a/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/A.java b/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/A.java
new file mode 100644 (file)
index 0000000..fdd3d35
--- /dev/null
@@ -0,0 +1,16 @@
+package prefixes;
+
+public class A {
+       public A a;
+       public B b;
+       public C c;
+       public D d;
+       
+       public void foo() {
+               if (true) {
+                       System.out.println("true");
+               } else {
+                       System.out.println("foo");
+               }
+       }
+}
\ No newline at end of file
diff --git a/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/B.java b/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/B.java
new file mode 100644 (file)
index 0000000..2c5f9ee
--- /dev/null
@@ -0,0 +1,24 @@
+package prefixes;
+
+public class B {
+       public A a;
+       public B b;
+       public C c;
+       public D d;
+       
+       public void bar() {
+               if (true) {
+                       System.out.println("true");
+               } else {
+                       System.out.println("bar");
+               }
+       }
+       
+       public void foo() {
+               return;
+       }
+       
+       public boolean bool() {
+               return true;
+       }
+}
\ No newline at end of file
diff --git a/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/C.java b/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/C.java
new file mode 100644 (file)
index 0000000..b8d9c56
--- /dev/null
@@ -0,0 +1,30 @@
+package prefixes;
+
+public class C {
+       public A a;
+       public B b;
+       public C c;
+       public D d;
+       
+       public void crap() {
+               boolean f1 = true;
+               if (f1) {
+                       boolean f2 = false;
+                       if (f2) {
+                               System.out.println("crap");
+                               while (f2) {
+                                       f2 = false;
+                                       return;
+                               }
+                       } else {
+                               return;
+                       }
+               } else {
+                       System.out.println("more crap");
+               }
+       }
+       
+       public void shit(B b) {
+               System.out.println("This is shit: " + b);
+       }
+}
\ No newline at end of file
diff --git a/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/D.java b/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/D.java
new file mode 100644 (file)
index 0000000..d45f9d8
--- /dev/null
@@ -0,0 +1,14 @@
+package prefixes;
+
+public class D {
+       public A a;
+       public B b;
+       public C c;
+       public D d;
+       public void bar() {
+               return;
+       }
+       public void foo() {
+               return;
+       }
+}
\ No newline at end of file
diff --git a/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/Main.java b/software/no.uio.ifi.refaktor.examples/examples/src/prefixes/Main.java
new file mode 100644 (file)
index 0000000..c7e7b2f
--- /dev/null
@@ -0,0 +1,18 @@
+package prefixes;
+
+public class Main {
+       A a = new A();
+
+       private void withoutSimpleExpressions() {
+               a.b.foo();
+               if (a.b.bool())
+                       a.c.crap();
+       }
+       
+       private void withSimpleExpression() {
+               B b = new B();
+               a.b.foo();
+               if (a.b.bool())
+                       a.c.shit(b);
+       }
+}
\ No newline at end of file
diff --git a/software/no.uio.ifi.refaktor.tests/src/no/uio/ifi/refaktor/tests/PrefixesCollectorTest.java b/software/no.uio.ifi.refaktor.tests/src/no/uio/ifi/refaktor/tests/PrefixesCollectorTest.java
new file mode 100644 (file)
index 0000000..59b62bd
--- /dev/null
@@ -0,0 +1,85 @@
+package no.uio.ifi.refaktor.tests;
+
+import static no.uio.ifi.refaktor.RefaktorAssert.assertThat;
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.notNullValue;
+
+import no.uio.ifi.refaktor.analyze.CollectorManager;
+import no.uio.ifi.refaktor.analyze.collectors.PrefixesCollector;
+import no.uio.ifi.refaktor.examples.manager.ExampleCodeManager;
+import no.uio.ifi.refaktor.prefix.Prefix;
+import no.uio.ifi.refaktor.prefix.PrefixSet;
+import no.uio.ifi.refaktor.utils.CompilationUnitTextSelection;
+import no.uio.ifi.refaktor.utils.ParseUtils;
+import no.uio.ifi.refaktor.utils.RefaktorHandleUtils;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil;
+import org.junit.Before;
+import org.junit.Test;
+
+@SuppressWarnings("restriction")
+public class PrefixesCollectorTest {
+
+       @Before
+       public void setUp() throws Exception {
+               ExampleCodeManager.INSTANCE.loadExampleCode();
+       }
+       
+       @Test
+       public void testBuild() throws Exception {
+               ExampleCodeManager.INSTANCE.buildProjectBeforeTest();
+       }
+
+       @Test
+       public void testWithoutSimpleExpressions_a() throws Exception {
+               testThatPrefixIsFound("withoutSimpleExpressions", 44, 1, 3);
+       }
+
+       @Test
+       public void testWithoutSimpleExpressions_a_b() throws Exception {
+               testThatPrefixIsFound("withoutSimpleExpressions", 61, 3, 2);
+       }
+
+       @Test
+       public void testWithoutSimpleExpressions_a_c() throws Exception {
+               testThatPrefixIsFound("withoutSimpleExpressions", 76, 3, 1);
+       }
+       
+       @Test
+       public void testWithoutSimpleExpressionsCount() throws Exception {
+               PrefixSet prefixes = collectPrefixes(getTestDataMethod("withoutSimpleExpressions"));
+               assertThat(prefixes.size(), equalTo(3));
+       }
+
+       private void testThatPrefixIsFound(String methodName, int offset, int length, int count) throws JavaModelException {
+               IMethod method = getTestDataMethod(methodName);
+               PrefixSet prefixes = collectPrefixes(method);
+               CompilationUnit root = (CompilationUnit) ParseUtils.parse(method.getCompilationUnit()).getRoot();
+               
+               ASTNode node = ASTNodeSearchUtil.getAstNode(root, method.getSourceRange().getOffset() + offset, length);
+               assertThat(node, allOf(notNullValue(), instanceOf(Expression.class)));
+               Prefix prefix = new Prefix((Expression) node);
+               assertThat(prefixes, hasItem(prefix));
+               assertThat(prefixes.get(prefix).getCount(), equalTo(count));
+       }
+
+       private PrefixSet collectPrefixes(IMethod method) throws JavaModelException {
+               CompilationUnitTextSelection selection = new CompilationUnitTextSelection(method.getCompilationUnit(), 
+                                               method.getSourceRange().getOffset(), method.getSourceRange().getLength());
+               PrefixesCollector collector = new PrefixesCollector(selection);
+               CollectorManager.collectProperties(selection, collector);
+               return collector.getPrefixes();
+       }
+
+       private IMethod getTestDataMethod(String methodName, String... parameters) {
+               return RefaktorHandleUtils.findMethodHandleChecked(ExampleCodeManager.INSTANCE.getProject(), "prefixes", "Main", methodName, parameters);
+       }
+}
index 0d2c1da110294896dae25faed4e1dc0748f59cda..24749c6298f6fcad50356054f2341ff7669f9683 100644 (file)
@@ -117,4 +117,8 @@ public class PrefixSet implements Iterable<Prefix> {
        public void clear() {
                prefixes.clear();
        }
+
+       public int size() {
+               return prefixes.size();
+       }
 }