From 19486d693afcfcb47d290061489d815358da0e67 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 21 Jan 2010 15:39:23 +0300 Subject: [PATCH] don't hardcode methods that reference testdata, use annotation instead --- .../intellij/testFramework/TestDataFile.java | 31 +++++++++++++++++++ .../TestDataReferenceCollector.java | 23 ++++++++------ .../referenceCollector/DoFileTest.java | 4 +++ .../referenceCollector/DoTestParameters.java | 3 ++ .../FixtureConfigureByFile.java | 6 ---- .../ReferencesInAnyMethod.java | 3 ++ .../TestNameAsParameter.java | 3 ++ .../TestDataReferenceCollectorTest.java | 6 ---- 8 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 platform/testFramework/src/com/intellij/testFramework/TestDataFile.java delete mode 100644 plugins/IdeaTestAssistant/testData/referenceCollector/FixtureConfigureByFile.java diff --git a/platform/testFramework/src/com/intellij/testFramework/TestDataFile.java b/platform/testFramework/src/com/intellij/testFramework/TestDataFile.java new file mode 100644 index 000000000000..759cb34f02fc --- /dev/null +++ b/platform/testFramework/src/com/intellij/testFramework/TestDataFile.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2010 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.testFramework; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks the annotated parameter as referencing a file in the testdata directory. + * + * @author yole + */ +@Retention(RetentionPolicy.SOURCE) +@Target({ElementType.PARAMETER}) +public @interface TestDataFile { +} diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataReferenceCollector.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataReferenceCollector.java index 2e4dd096aa6b..90c3c8dbcec4 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataReferenceCollector.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataReferenceCollector.java @@ -44,16 +44,19 @@ public class TestDataReferenceCollector { public void visitMethodCallExpression(PsiMethodCallExpression expression) { String callText = expression.getMethodExpression().getReferenceName(); if (callText == null) return; - if (callText.equals("configureByFile") || callText.equals("checkResultByFile")) { - processCallArgument(expression, argumentMap, result, 0); - } - else if (callText.equals("doFileTest")) { - processCallArgument(expression, argumentMap, result, 0); - processCallArgument(expression, argumentMap, result, 1); - } - else if (expression.getMethodExpression().getQualifierExpression() == null) { - final PsiMethod callee = expression.resolveMethod(); - if (callee != null) { + final PsiMethod callee = expression.resolveMethod(); + if (callee != null) { + boolean haveAnnotatedParameters = false; + final PsiParameter[] psiParameters = callee.getParameterList().getParameters(); + for (int i = 0, psiParametersLength = psiParameters.length; i < psiParametersLength; i++) { + PsiParameter psiParameter = psiParameters[i]; + final PsiModifierList modifierList = psiParameter.getModifierList(); + if (modifierList != null && modifierList.findAnnotation("com.intellij.testFramework.TestDataFile") != null) { + processCallArgument(expression, argumentMap, result, i); + haveAnnotatedParameters = true; + } + } + if (expression.getMethodExpression().getQualifierExpression() == null && !haveAnnotatedParameters) { result.addAll(collectTestDataReferences(callee, buildArgumentMap(expression, callee))); } } diff --git a/plugins/IdeaTestAssistant/testData/referenceCollector/DoFileTest.java b/plugins/IdeaTestAssistant/testData/referenceCollector/DoFileTest.java index 14e7c29e9b50..d44ed722d382 100644 --- a/plugins/IdeaTestAssistant/testData/referenceCollector/DoFileTest.java +++ b/plugins/IdeaTestAssistant/testData/referenceCollector/DoFileTest.java @@ -3,4 +3,8 @@ public class ATest extends LightCodeInsightFixtureTestCase { public void testFixtureConfigureByFile() throws Exception { doFileTest("before", "after"); } + + private void doFileTest(@com.intellij.testFramework.TestDataFile String before, + @com.intellij.testFramework.TestDataFile String after) { + } } diff --git a/plugins/IdeaTestAssistant/testData/referenceCollector/DoTestParameters.java b/plugins/IdeaTestAssistant/testData/referenceCollector/DoTestParameters.java index 2c1c42b28560..c591ea3e31bc 100644 --- a/plugins/IdeaTestAssistant/testData/referenceCollector/DoTestParameters.java +++ b/plugins/IdeaTestAssistant/testData/referenceCollector/DoTestParameters.java @@ -11,4 +11,7 @@ public class ATest extends LightCodeInsightFixtureTestCase { private void doTest(String extension) throws Exception { configureByFile(getTestName(true) + "." + extension); } + + private void configureByFile(@com.intellij.testFramework.TestDataFile String file) { + } } diff --git a/plugins/IdeaTestAssistant/testData/referenceCollector/FixtureConfigureByFile.java b/plugins/IdeaTestAssistant/testData/referenceCollector/FixtureConfigureByFile.java deleted file mode 100644 index e50924593bb4..000000000000 --- a/plugins/IdeaTestAssistant/testData/referenceCollector/FixtureConfigureByFile.java +++ /dev/null @@ -1,6 +0,0 @@ -public class ATest extends LightCodeInsightFixtureTestCase { - - public void testFixtureConfigureByFile() throws Exception { - myFixture.configureByFile(getTestName(true)); - } -} diff --git a/plugins/IdeaTestAssistant/testData/referenceCollector/ReferencesInAnyMethod.java b/plugins/IdeaTestAssistant/testData/referenceCollector/ReferencesInAnyMethod.java index e9aa3e50b5e5..17a5fd872b7c 100644 --- a/plugins/IdeaTestAssistant/testData/referenceCollector/ReferencesInAnyMethod.java +++ b/plugins/IdeaTestAssistant/testData/referenceCollector/ReferencesInAnyMethod.java @@ -7,4 +7,7 @@ public class ATest extends LightCodeInsightFixtureTestCase { private void resolve() throws Exception { configureByFile("before"); } + + private void configureByFile(@com.intellij.testFramework.TestDataFile String file) { + } } diff --git a/plugins/IdeaTestAssistant/testData/referenceCollector/TestNameAsParameter.java b/plugins/IdeaTestAssistant/testData/referenceCollector/TestNameAsParameter.java index 056d969f0415..0096df84e175 100644 --- a/plugins/IdeaTestAssistant/testData/referenceCollector/TestNameAsParameter.java +++ b/plugins/IdeaTestAssistant/testData/referenceCollector/TestNameAsParameter.java @@ -7,4 +7,7 @@ public class ATest extends LightCodeInsightFixtureTestCase { private void doTest(String testName) throws Exception { configureByFile("before" + testName); } + + private void configureByFile(@com.intellij.testFramework.TestDataFile String file) { + } } diff --git a/plugins/IdeaTestAssistant/testSrc/com/intellij/testAssistant/TestDataReferenceCollectorTest.java b/plugins/IdeaTestAssistant/testSrc/com/intellij/testAssistant/TestDataReferenceCollectorTest.java index 999b4985bc2b..937657678326 100644 --- a/plugins/IdeaTestAssistant/testSrc/com/intellij/testAssistant/TestDataReferenceCollectorTest.java +++ b/plugins/IdeaTestAssistant/testSrc/com/intellij/testAssistant/TestDataReferenceCollectorTest.java @@ -28,12 +28,6 @@ import java.util.List; */ @TestDataPath("$CONTENT_ROOT/testData/") public class TestDataReferenceCollectorTest extends LightCodeInsightFixtureTestCase { - public void testFixtureConfigureByFile() throws Exception { - final List references = doTest(); - assertEquals(1, references.size()); - assertEquals("fixtureConfigureByFile", references.get(0)); - } - public void testDoTestParameters() throws Exception { final List references = doTest(); assertEquals(1, references.size());