From 427b95f821c388ecd1d4d5754ffefc7089f2d0d1 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 10 Jun 2015 22:04:20 +0300 Subject: [PATCH] JS/RTTI: test that reified is-check works when inline turned off --- .../jetbrains/kotlin/js/test/BasicTest.java | 26 ++++++++++++++++--- .../test/semantics/ReifiedTestGenerated.java | 6 +++++ .../reified/cases/withInlineTurnedOff.kt | 21 +++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 js/js.translator/testData/reified/cases/withInlineTurnedOff.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicTest.java index ea8615169c0..3a5ec13a38d 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicTest.java @@ -64,6 +64,7 @@ import java.util.Map; import static org.jetbrains.kotlin.js.test.rhino.RhinoUtils.runRhinoTest; import static org.jetbrains.kotlin.js.test.utils.JsTestUtils.convertFileNameToDotJsFile; +import static org.jetbrains.kotlin.test.InTextDirectivesUtils.isDirectiveDefined; public abstract class BasicTest extends KotlinTestWithEnvironment { // predictable order of ecma version in tests @@ -82,7 +83,8 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { public static final String TEST_MODULE = "JS_TESTS"; public static final String TEST_PACKAGE = "foo"; public static final String TEST_FUNCTION = "box"; - public static final boolean IS_INLINE_ENABLED = true; + public static final String NO_INLINE_DIRECTIVE = "// NO_INLINE"; + public boolean isInlineEnabled = true; @NotNull private String relativePathToTestDir = ""; @@ -112,6 +114,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { File outDir = new File(getOutputPath()); KotlinTestUtils.mkdirs(outDir); + isInlineEnabled = true; } @Override @@ -179,7 +182,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { List allFiles = withAdditionalKotlinFiles(files); List jetFiles = createJetFileList(project, allFiles, null); - Config config = createConfig(getProject(), moduleName, version, libraries); + Config config = createConfig(getProject(), moduleName, version, libraries, jetFiles); File outputFile = new File(getOutputFilePath(testName, version)); translateFiles(jetFiles, outputFile, mainCallParameters, config); @@ -318,7 +321,22 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { } @NotNull - private Config createConfig(@NotNull Project project, @NotNull String moduleId, @NotNull EcmaVersion ecmaVersion, @Nullable List libraries) { + private Config createConfig( + @NotNull Project project, + @NotNull String moduleId, + @NotNull EcmaVersion ecmaVersion, + @Nullable List libraries, + List jetFiles + ) { + for (JetFile file : jetFiles) { + String text = file.getText(); + + if (isDirectiveDefined(text, NO_INLINE_DIRECTIVE)) { + isInlineEnabled = false; + break; + } + } + List librariesWithStdlib = new ArrayList(LibrarySourcesConfig.JS_STDLIB); if (libraries != null) { librariesWithStdlib.addAll(libraries); @@ -327,7 +345,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { return new LibrarySourcesConfig.Builder(project, moduleId, librariesWithStdlib) .ecmaVersion(ecmaVersion) .sourceMap(shouldGenerateSourceMap()) - .inlineEnabled(IS_INLINE_ENABLED) + .inlineEnabled(isInlineEnabled) .isUnitTestConfig(shouldBeTranslateAsUnitTestClass()) .metaInfo(shouldGenerateMetaInfo()) .build(); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ReifiedTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ReifiedTestGenerated.java index 09a38bde12c..35f2586d5d5 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ReifiedTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/ReifiedTestGenerated.java @@ -142,4 +142,10 @@ public class ReifiedTestGenerated extends AbstractReifiedTest { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/reified/cases/vararg.kt"); doTest(fileName); } + + @TestMetadata("withInlineTurnedOff.kt") + public void testWithInlineTurnedOff() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/reified/cases/withInlineTurnedOff.kt"); + doTest(fileName); + } } diff --git a/js/js.translator/testData/reified/cases/withInlineTurnedOff.kt b/js/js.translator/testData/reified/cases/withInlineTurnedOff.kt new file mode 100644 index 00000000000..b8770601a71 --- /dev/null +++ b/js/js.translator/testData/reified/cases/withInlineTurnedOff.kt @@ -0,0 +1,21 @@ +package foo + +// NO_INLINE +// CHECK_CALLED_IN_SCOPE: scope=box function=isInstance + +class A +class B + +fun box(): String { + val a = A() + val b = B() + + assertEquals(true, isInstance(a), "isInstance(a)") + assertEquals(false, isInstance(b), "isInstance(b)") + + assertEquals(true, isInstance(a), "isInstance(a)") + assertEquals(true, isInstance(null), "isInstance(null)") + assertEquals(false, isInstance(b), "isInstance(b)") + + return "OK" +} \ No newline at end of file