From 1fa6eba515f1d7e4a020d35e0fc78b9170fb27ec Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Mon, 19 Aug 2013 16:48:21 +0400 Subject: [PATCH] IDEA-86299 Support for geb - add completion/resolving for members of TestNG tests --- plugins/groovy/src/META-INF/plugin.xml | 1 + .../geb/GebTestNGTestMemberContributor.java | 45 ++++++++++++++++++ .../plugins/groovy/geb/GebTestsTest.groovy | 12 +++++ .../testdata/mockGeb/geb-testng-0.7.2.jar | Bin 0 -> 8010 bytes 4 files changed, 58 insertions(+) create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/geb/GebTestNGTestMemberContributor.java create mode 100644 plugins/groovy/testdata/mockGeb/geb-testng-0.7.2.jar diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 2a1d2767e6e9..a07501b10569 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -97,6 +97,7 @@ + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/geb/GebTestNGTestMemberContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/geb/GebTestNGTestMemberContributor.java new file mode 100644 index 000000000000..627197ea3fdb --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/geb/GebTestNGTestMemberContributor.java @@ -0,0 +1,45 @@ +/* + * Copyright 2000-2013 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 org.jetbrains.plugins.groovy.geb; + +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiType; +import com.intellij.psi.ResolveState; +import com.intellij.psi.scope.PsiScopeProcessor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.resolve.NonCodeMembersContributor; + +/** + * @author zolotov + */ +public class GebTestNGTestMemberContributor extends NonCodeMembersContributor { + + @Override + protected String getParentClassName() { + return "geb.testng.GebTest"; + } + + @Override + public void processDynamicElements(@NotNull PsiType qualifierType, + PsiClass aClass, + PsiScopeProcessor processor, + PsiElement place, + ResolveState state) { + GebUtil.contributeMembersInsideTest(processor, place, state); + } + +} diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/geb/GebTestsTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/geb/GebTestsTest.groovy index c733fcf74295..81008c72449b 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/geb/GebTestsTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/geb/GebTestsTest.groovy @@ -43,6 +43,18 @@ class FooTest extends geb.junit4.GebReportingTest { } } +""") + + TestUtils.checkCompletionContains(myFixture, "\$()", "to()", "go()", "currentWindow", "verifyAt()", "title") + } + + void testTestNGTestMemberCompletion() { + myFixture.configureByText("FooTest.groovy", """ +class FooTest extends geb.testng.GebReportingTest { + def testFoo() { + + } +} """) TestUtils.checkCompletionContains(myFixture, "\$()", "to()", "go()", "currentWindow", "verifyAt()", "title") diff --git a/plugins/groovy/testdata/mockGeb/geb-testng-0.7.2.jar b/plugins/groovy/testdata/mockGeb/geb-testng-0.7.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..c61f665bb38cdbf3dfc1cfb1c225eae6d976c758 GIT binary patch literal 8010 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 literal 0 HcmV?d00001