Refactor CompileKotlinAgainstKotlinTest

CKAKTest is now abstract, the actual testcases are generated via GenerateTests
into CompileKotlinAgainstKotlinTestGenerated.

Also invokeMain() now invokes namespace.main instead of bbb.namespace.main.
This commit is contained in:
Alexander Udalov
2013-01-09 15:21:24 +04:00
parent 0b53bd25bd
commit a2e453b759
7 changed files with 74 additions and 58 deletions
@@ -1 +1,3 @@
package aaa
class A(val a: Int = 1) class A(val a: Int = 1)
@@ -1,5 +1,3 @@
package bbb
fun main(args: Array<String>) { fun main(args: Array<String>) {
A() aaa.A()
} }
@@ -1,9 +1,6 @@
package bbb
fun main(args: Array<String>) { fun main(args: Array<String>) {
val h = aaa.hello() val h = aaa.hello()
if (h != 17) { if (h != 17) {
throw Exception() throw Exception()
} }
System.out?.println("It is 17!")
} }
@@ -20,10 +20,11 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import junit.framework.Assert;
import junit.framework.Test;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.*; import org.jetbrains.jet.CompileCompilerDependenciesTest;
import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.TestJdkKind;
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.ClassFileFactory;
@@ -33,31 +34,12 @@ import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.test.TestCaseWithTmpdir;
import java.io.File; import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
@SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors", "JUnitTestCaseWithNoTests"}) public abstract class AbstractCompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir {
public final class CompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir {
private final File ktAFile;
private final File ktBFile;
public CompileKotlinAgainstKotlinTest(@NotNull File ktAFile) {
Assert.assertTrue(ktAFile.getName().endsWith("A.kt"));
this.ktAFile = ktAFile;
this.ktBFile = new File(ktAFile.getPath().replaceFirst("A\\.kt$", "B.kt"));
}
@Override
public String getName() {
return ktAFile.getName();
}
private File aDir; private File aDir;
private File bDir; private File bDir;
@@ -70,32 +52,31 @@ public final class CompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir {
JetTestUtils.mkdirs(bDir); JetTestUtils.mkdirs(bDir);
} }
@Override public void doTest(@NotNull String fileName) throws Exception {
protected void runTest() throws Throwable { compileA(new File(fileName));
compileA(); compileB(new File(fileName.replaceFirst("A\\.kt$", "B.kt")));
compileB();
invokeMain(); invokeMain();
} }
private void invokeMain() private void invokeMain() throws Exception {
throws MalformedURLException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
URLClassLoader classLoader = new URLClassLoader( URLClassLoader classLoader = new URLClassLoader(
new URL[]{ aDir.toURI().toURL(), bDir.toURI().toURL() }, new URL[]{ aDir.toURI().toURL(), bDir.toURI().toURL() },
CompileKotlinAgainstKotlinTest.class.getClassLoader() AbstractCompileKotlinAgainstKotlinTest.class.getClassLoader()
); );
Class<?> clazz = classLoader.loadClass("bbb.namespace"); Class<?> clazz = classLoader.loadClass("namespace");
Method main = clazz.getMethod("main", new Class[] { String[].class }); Method main = clazz.getMethod("main", new Class[] {String[].class});
main.invoke(null, new Object[] {ArrayUtil.EMPTY_STRING_ARRAY}); main.invoke(null, new Object[] {ArrayUtil.EMPTY_STRING_ARRAY});
} }
private void compileA() throws IOException { private void compileA(@NotNull File ktAFile) throws IOException {
JetCoreEnvironment jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable()); JetCoreEnvironment jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable(),
ConfigurationKind.JDK_ONLY);
compileKotlin(ktAFile, aDir, jetCoreEnvironment, getTestRootDisposable()); compileKotlin(ktAFile, aDir, jetCoreEnvironment, getTestRootDisposable());
} }
private void compileB() throws IOException { private void compileB(@NotNull File ktBFile) throws IOException {
CompilerConfiguration configurationWithADirInClasspath = CompileCompilerDependenciesTest CompilerConfiguration configurationWithADirInClasspath = CompileCompilerDependenciesTest
.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK, JetTestUtils.getAnnotationsJar(), aDir); .compilerConfigurationForTests(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, JetTestUtils.getAnnotationsJar(), aDir);
compileKotlin(ktBFile, bDir, new JetCoreEnvironment(getTestRootDisposable(), configurationWithADirInClasspath), compileKotlin(ktBFile, bDir, new JetCoreEnvironment(getTestRootDisposable(), configurationWithADirInClasspath),
getTestRootDisposable()); getTestRootDisposable());
} }
@@ -115,20 +96,4 @@ public final class CompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir {
Disposer.dispose(disposable); Disposer.dispose(disposable);
} }
public static Test suite() {
class Filter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("A.kt");
}
}
return JetTestCaseBuilder.suiteForDirectory(JetTestCaseBuilder.getTestDataPathBase(), "/compileKotlinAgainstKotlin", true, new Filter(), new JetTestCaseBuilder.NamedTestFactory() {
@NotNull
@Override
public Test createTest(@NotNull String dataPath, @NotNull String name, @NotNull File file) {
return new CompileKotlinAgainstKotlinTest(file);
}
});
}
} }
@@ -0,0 +1,46 @@
/*
* Copyright 2010-2012 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.jvm.compiler;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import java.io.File;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata;
import org.jetbrains.jet.jvm.compiler.AbstractCompileKotlinAgainstKotlinTest;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
@TestMetadata("compiler/testData/compileKotlinAgainstKotlin")
public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotlinAgainstKotlinTest {
public void testAllFilesPresentInCompileKotlinAgainstKotlin() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/compileKotlinAgainstKotlin"), "A.kt", true);
}
@TestMetadata("DefaultConstructor.A.kt")
public void testDefaultConstructor_A() throws Exception {
doTest("compiler/testData/compileKotlinAgainstKotlin/DefaultConstructor.A.kt");
}
@TestMetadata("Simple.A.kt")
public void testSimple_A() throws Exception {
doTest("compiler/testData/compileKotlinAgainstKotlin/Simple.A.kt");
}
}
@@ -28,6 +28,7 @@ import org.jetbrains.jet.codegen.defaultConstructor.AbstractDefaultConstructorCo
import org.jetbrains.jet.codegen.flags.AbstractWriteFlagsTest; import org.jetbrains.jet.codegen.flags.AbstractWriteFlagsTest;
import org.jetbrains.jet.codegen.generated.AbstractCodegenTest; import org.jetbrains.jet.codegen.generated.AbstractCodegenTest;
import org.jetbrains.jet.jvm.compiler.AbstractCompileJavaAgainstKotlinTest; import org.jetbrains.jet.jvm.compiler.AbstractCompileJavaAgainstKotlinTest;
import org.jetbrains.jet.jvm.compiler.AbstractCompileKotlinAgainstKotlinTest;
import org.jetbrains.jet.jvm.compiler.AbstractLoadCompiledKotlinTest; import org.jetbrains.jet.jvm.compiler.AbstractLoadCompiledKotlinTest;
import org.jetbrains.jet.jvm.compiler.AbstractLoadJavaTest; import org.jetbrains.jet.jvm.compiler.AbstractLoadJavaTest;
import org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveDescriptorRendererTest; import org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveDescriptorRendererTest;
@@ -166,6 +167,13 @@ public class GenerateTests {
testModel("compiler/testData/compileJavaAgainstKotlin", "doTest") testModel("compiler/testData/compileJavaAgainstKotlin", "doTest")
); );
generateTest(
"compiler/tests/",
"CompileKotlinAgainstKotlinTestGenerated",
AbstractCompileKotlinAgainstKotlinTest.class,
testModel("compiler/testData/compileKotlinAgainstKotlin", true, "A.kt", "doTest")
);
generateTest( generateTest(
"compiler/tests/", "compiler/tests/",
"LazyResolveDescriptorRendererTestGenerated", "LazyResolveDescriptorRendererTestGenerated",