Merge "Add more complex Analyser test" into studio-1.3-dev automerge: 8fac81b
automerge: 5cd7f77
* commit '5cd7f77700a1ed1abe1e0d3fad1f6f2bfee6c06a':
Add more complex Analyser test
diff --git a/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java b/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
index 66fc057..cf75e39 100644
--- a/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
+++ b/android/testSrc/com/android/tools/idea/editors/navigation/AnalyserTest.java
@@ -31,6 +31,26 @@
" $builder.append($obj);" +
"}";
+ public static final String TEMPLATE_INNER_CLASS =
+ "void macro(Method $method, Object $obj, Argument $arg) {" +
+ " new Runnable() {" +
+ " @Override public void run() {" +
+ " $obj.$method($arg);" +
+ " }" +
+ " };" +
+ "}";
+
+ public static final String INNER_CLASS_EXAMPLE =
+ "public static void main() {" +
+ " new Thread(" +
+ " new Runnable() {" +
+ " @Override public void run() {" +
+ " System.out.println(\"Hello from separate thread\");" +
+ " }" +
+ " }" +
+ " ).start();" +
+ "}";
+
private PsiElementFactory myElementFactory = null;
@Override
@@ -49,7 +69,8 @@
final PsiMethod template = myElementFactory.createMethodFromText(TEMPLATE, null);
- final List<MultiMatch.Bindings<PsiElement>> bindingsList = Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
+ final List<MultiMatch.Bindings<PsiElement>> bindingsList =
+ Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
assertEquals(bindingsList.size(), 2);
final List expectedMatches = Arrays.asList("a string", 20);
@@ -66,6 +87,27 @@
}
}
+ public void testInnerClass() {
+ final PsiMethod method = myElementFactory.createMethodFromText(INNER_CLASS_EXAMPLE, null);
+
+ final PsiMethod template = myElementFactory.createMethodFromText(TEMPLATE_INNER_CLASS, null);
+
+ final List<MultiMatch.Bindings<PsiElement>> bindingsList =
+ Analyser.search(method, new MultiMatch(CodeTemplate.fromMethod(template)));
+ assertEquals(1, bindingsList.size());
+
+ final MultiMatch.Bindings<PsiElement> bindings = bindingsList.get(0);
+
+ final PsiReferenceExpression object = assertInstanceOf(bindings.get("$obj"), PsiReferenceExpression.class);
+ assertEquals("System.out", object.getText());
+
+ final PsiLiteralExpression argument = assertInstanceOf(bindings.get("$arg"), PsiLiteralExpression.class);
+ assertEquals("Hello from separate thread", argument.getValue());
+
+ final PsiIdentifier methodName = assertInstanceOf(bindings.get("$method"), PsiIdentifier.class);
+ assertEquals("println", methodName.getText());
+ }
+
@Override
public void tearDown() throws Exception {
super.tearDown();
diff --git a/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java b/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
index 8e248ef..bad554b 100644
--- a/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
+++ b/android/testSrc/com/android/tools/idea/editors/navigation/UnifierTest.java
@@ -24,18 +24,20 @@
import java.util.Map;
public class UnifierTest extends AndroidTestCase {
+ private PsiElementFactory myElementFactory;
- public void testUnifier() throws Exception {
- final Project project = this.getProject();
- final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
- final PsiElementFactory elementFactory = facade.getElementFactory();
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ myElementFactory = JavaPsiFacade.getInstance(this.getProject()).getElementFactory();
+ }
- final PsiClass psiClass = elementFactory.createClass("Dummy");
- final PsiExpression expression = elementFactory.createExpressionFromText("20 + 22", psiClass);
- final PsiMethod template = elementFactory.createMethodFromText(
+ public void testUnifierSimple() throws Exception {
+ final PsiExpression expression = myElementFactory.createExpressionFromText("20 + 22", null);
+ final PsiMethod template = myElementFactory.createMethodFromText(
"void macro(int $x, int $y) {" +
" $x + $y;" +
- "}", psiClass);
+ "}", null);
final Map<String, PsiElement> result = Unifier.match(CodeTemplate.fromMethod(template), expression);
assertNotNull(result);
@@ -49,4 +51,10 @@
assertEquals(xValue, Integer.valueOf(20));
assertEquals(yValue, Integer.valueOf(22));
}
+
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+ myElementFactory = null;
+ }
}