summaryrefslogtreecommitdiff
path: root/plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java')
-rw-r--r--plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java166
1 files changed, 166 insertions, 0 deletions
diff --git a/plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java b/plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java
new file mode 100644
index 000000000000..8990fba2716e
--- /dev/null
+++ b/plugins/groovy/structuralsearch-groovy/testSrc/com/intellij/structuralsearch/GroovyStructuralSearchTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.structuralsearch;
+
+import com.intellij.dupLocator.equivalence.EquivalenceDescriptorProvider;
+import com.intellij.idea.Bombed;
+import org.jetbrains.plugins.groovy.GroovyFileType;
+
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * @author Eugene.Kudelevsky
+ */
+@Bombed(day = 14, month = Calendar.JULY)
+public class GroovyStructuralSearchTest extends StructuralSearchTestCase {
+
+ public void test1() throws Exception {
+ String s = "def int x = 0;\n" +
+ "def y = 0;\n" +
+ "int z = 10;\n" +
+ "def int x1";
+
+ doTest(s, "def $x$ = $value$;", 3, 1);
+ doTest(s, "def $x$", 4, 3);
+ doTest(s, "int $x$", 3, 3);
+ doTest(s, "def $x$ = $value$", 3, 1);
+ doTest(s, "def $x$ = 0", 2, 1);
+ doTest(s, "int $x$ = 0", 1, 1);
+ doTest(s, "int $x$ = $value$", 2, 2);
+ }
+
+ public void test2() throws Exception {
+ String s = "def void f(int x) {}\n" +
+ "def f(int x) {\n" +
+ " System.out.println(\"hello\");\n" +
+ "}\n" +
+ "def f(def x) {}\n" +
+ "void g(x) {}\n" +
+ "public def void f(def int y) {\n" +
+ " System.out.println(\"hello\");\n" +
+ "}\n" +
+ "def int f() {}";
+
+ doTest(s, "def $f$($param$)", 5, 2);
+ doTest(s, "def $f$($param$) {}", 3, 1);
+ doTest(s, "void $f$($param$) {}", 2, 2);
+ doTest(s, "void $f$(def x)", 2, 0);
+ doTest(s, "def $f$(def x)", 4, 1);
+ doTest(s, "void $f$(def $x$)", 3, 0);
+ doTest(s, "void $f$(int $x$)", 2, 2);
+ doTest(s, "def $f$(int $x$)", 3, 1);
+ doTest(s, "def g($param$)", 1, 0);
+ doTest(s, "def '_T1('_T2*)", 6, 2);
+
+ // a problem with default eq is that ; is not part of statement
+ doTest(s, "def '_T1('_T2*) {'_T3+}", 2, 0);
+ doTest(s, "def '_T1('_T2*) {'_T3*}", 6, 1);
+ }
+
+ public void test3() throws Exception {
+ String s = "public class C implements I1, I2 {\n" +
+ " void f() {\n" +
+ " def a = 1;\n" +
+ " def int b = 2;\n" +
+ " }\n" +
+ "}";
+
+ doTest(s, "class $name$", 1, 1);
+ doTest(s, "class $name$ implements I1, I2", 1, 1);
+ doTest(s, "class $name$ implements $interface$", 1, 0);
+ doTest(s, "class '_T1 implements '_T2*", 1, 1);
+ doTest(s, "class '_T1 implements '_T2+", 1, 1);
+ doTest(s, "class $name$ implements I2, I1", 1, 0);
+ doTest(s, "class C implements I1, I2 {}", 1, 0);
+ doTest(s, "def a = 1;\n def b = 2;", 1, 0);
+ doTest(s, "def a = 1\n def b = 2", 1, 0);
+ }
+
+ public void test4() throws Exception {
+ String s = "for (a in list) {\n" +
+ " println(\"hello1\");\n" +
+ " println(\"hello2\");\n" +
+ "}";
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " $st1$;\n" +
+ " $st2$\n" +
+ "}", 1, 0);
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " $st1$;\n" +
+ " $st2$;\n" +
+ "}", 1, 1);
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " $st1$\n" +
+ " $st2$\n" +
+ "}", 1, 0);
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " $st$\n" +
+ "}", 0, 0);
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " '_T*\n" +
+ "}", 1, 0);
+ doTest(s, "for ($a$ in $b$) {\n" +
+ " '_T+\n" +
+ "}", 1, 0);
+ }
+
+ public void test5() {
+ String s = "class A {\n" +
+ " def f = {\n" +
+ " println('Hello1')\n" +
+ " println('Hello2')\n" +
+ " }\n" +
+ " def f1 = {\n" +
+ " println('Hello')\n" +
+ " }\n" +
+ "}";
+ doTest(s, "def $name$ = {\n" +
+ " '_T+\n" +
+ "}", 0, 0);
+ final String old = options.getPatternContext();
+ try {
+ options.setPatternContext(GroovyStructuralSearchProfile.CLASS_CONTEXT);
+ doTest(s, "def $name$ = {\n" +
+ " '_T+\n" +
+ "}", 2, 2);
+ }
+ finally {
+ options.setPatternContext(old);
+ }
+ }
+
+ private void doTest(String source,
+ String pattern,
+ int expectedOccurences,
+ int expectedWithDefaultEquivalence) {
+ findAndCheck(source, pattern, expectedOccurences);
+ try {
+ EquivalenceDescriptorProvider.ourUseDefaultEquivalence = true;
+ findAndCheck(source, pattern, expectedWithDefaultEquivalence);
+ }
+ finally {
+ EquivalenceDescriptorProvider.ourUseDefaultEquivalence = false;
+ }
+ }
+
+ private void findAndCheck(String source, String pattern, int expectedOccurences) {
+ testMatcher.clearContext();
+ final List<MatchResult> matches =
+ findMatches(source, pattern, true, GroovyFileType.GROOVY_FILE_TYPE, null, GroovyFileType.GROOVY_FILE_TYPE, null, false);
+ assertEquals(expectedOccurences, matches.size());
+ }
+}