diff options
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.java | 166 |
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()); + } +} |