diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index ec6f4078a3e..df97eb18a3c 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -35,6 +35,7 @@ import com.intellij.psi.PsiFileFactory; import com.intellij.psi.impl.PsiFileFactoryImpl; import com.intellij.rt.execution.junit.FileComparisonFailure; import com.intellij.testFramework.LightVirtualFile; +import com.intellij.testFramework.TestDataFile; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.Processor; @@ -670,6 +671,10 @@ public class JetTestUtils { return builder.toString(); } + public static String navigationMetadata(@TestDataFile String testFile) { + return testFile; + } + public static void assertAllTestsPresentByMetadata( @NotNull Class testCaseClass, @NotNull File testDataDir, diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/DelegatingTestClassModel.java b/generators/src/org/jetbrains/jet/generators/tests/generator/DelegatingTestClassModel.java index 02f2331ca43..4d820c410f9 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/DelegatingTestClassModel.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/DelegatingTestClassModel.java @@ -1,22 +1,23 @@ /* - * Copyright 2010-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. - */ +* Copyright 2010-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.jet.generators.tests.generator; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -49,6 +50,12 @@ public class DelegatingTestClassModel implements TestClassModel { return delegate.isEmpty(); } + @Nullable + @Override + public String getDataPathRoot() { + return delegate.getDataPathRoot(); + } + @Override public String getDataString() { return delegate.getDataString(); diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestClassModel.java b/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestClassModel.java index ec52037e8d6..0d0cf9bbe81 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestClassModel.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestClassModel.java @@ -21,6 +21,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.utils.Printer; @@ -155,6 +156,12 @@ public class SimpleTestClassModel implements TestClassModel { return JetTestUtils.getFilePath(rootFile); } + @Nullable + @Override + public String getDataPathRoot() { + return "$PROJECT_ROOT"; + } + @Override public String getName() { return testClassName; diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestMethodModel.java b/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestMethodModel.java index 2c0feea9cda..b07b6ed08e1 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestMethodModel.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/SimpleTestMethodModel.java @@ -42,7 +42,8 @@ public class SimpleTestMethodModel implements TestMethodModel { @Override public void generateBody(@NotNull Printer p) { String filePath = JetTestUtils.getFilePath(file) + (file.isDirectory() ? "/" : ""); - p.println(doTestMethodName, "(\"", filePath, "\");"); + p.println("String fileName = JetTestUtils.navigationMetadata(\"", filePath, "\");"); + p.println(doTestMethodName, "(fileName);"); } @Override diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/SingleClassTestModel.java b/generators/src/org/jetbrains/jet/generators/tests/generator/SingleClassTestModel.java index e9081e69593..be2319b6946 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/SingleClassTestModel.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/SingleClassTestModel.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.utils.Printer; @@ -105,6 +106,12 @@ public class SingleClassTestModel implements TestClassModel { return JetTestUtils.getFilePath(rootFile); } + @Nullable + @Override + public String getDataPathRoot() { + return "$PROJECT_ROOT"; + } + @Override public String getName() { return testClassName; diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/TestClassModel.java b/generators/src/org/jetbrains/jet/generators/tests/generator/TestClassModel.java index 327c8d6e820..ea66ff8eabf 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/TestClassModel.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/TestClassModel.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.generators.tests.generator; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -29,4 +30,7 @@ public interface TestClassModel extends TestEntityModel { Collection getTestMethods(); boolean isEmpty(); + + @Nullable + String getDataPathRoot(); } diff --git a/generators/src/org/jetbrains/jet/generators/tests/generator/TestGenerator.java b/generators/src/org/jetbrains/jet/generators/tests/generator/TestGenerator.java index edfd6cd267e..4d659046310 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/generator/TestGenerator.java +++ b/generators/src/org/jetbrains/jet/generators/tests/generator/TestGenerator.java @@ -21,6 +21,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.containers.ContainerUtil; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.di.GeneratorsFileUtil; import org.jetbrains.jet.utils.Printer; @@ -32,6 +33,8 @@ import java.util.Collections; import java.util.Set; public class TestGenerator { + public static final String NAVIGATION_METADATA = "navigationMetadata"; + private static final Set GENERATED_FILES = ContainerUtil.newHashSet(); private final String suiteClassPackage; @@ -66,6 +69,7 @@ public class TestGenerator { p.println(FileUtil.loadFile(new File("injector-generator/copyright.txt"))); p.println("package ", suiteClassPackage, ";"); p.println(); + p.println("import com.intellij.testFramework.TestDataPath;"); p.println("import junit.framework.Test;"); p.println("import junit.framework.TestSuite;"); p.println("import org.jetbrains.jet.JetTestUtils;"); @@ -115,6 +119,12 @@ public class TestGenerator { public String getDataString() { return null; } + + @Nullable + @Override + public String getDataPathRoot() { + return null; + } }, false); } @@ -126,6 +136,8 @@ public class TestGenerator { String staticModifier = isStatic ? "static " : ""; generateMetadata(p, testClassModel); + generateTestDataPath(p, testClassModel); + generateInnerClassesAnnotation(p, testClassModel); p.println("public " + staticModifier + "class ", testClassModel.getName(), " extends ", baseTestClassName, " {"); @@ -199,6 +211,13 @@ public class TestGenerator { } } + private static void generateTestDataPath(Printer p, TestClassModel testClassModel) { + String dataPathRoot = testClassModel.getDataPathRoot(); + if (dataPathRoot != null) { + p.println("@TestDataPath(\"", dataPathRoot, "\")"); + } + } + private static void generateInnerClassesAnnotation(Printer p, TestClassModel testClassModel) { Collection innerTestClasses = testClassModel.getInnerTestClasses(); if (innerTestClasses.isEmpty()) return;