JS/RTTI: test that reified is-check works when inline turned off

This commit is contained in:
Alexey Tsvetkov
2015-06-10 22:04:20 +03:00
committed by Alexey Andreev
parent dce0971c52
commit 427b95f821
3 changed files with 49 additions and 4 deletions
@@ -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<String> allFiles = withAdditionalKotlinFiles(files);
List<KtFile> 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<String> libraries) {
private Config createConfig(
@NotNull Project project,
@NotNull String moduleId,
@NotNull EcmaVersion ecmaVersion,
@Nullable List<String> libraries,
List<JetFile> jetFiles
) {
for (JetFile file : jetFiles) {
String text = file.getText();
if (isDirectiveDefined(text, NO_INLINE_DIRECTIVE)) {
isInlineEnabled = false;
break;
}
}
List<String> librariesWithStdlib = new ArrayList<String>(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();
@@ -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);
}
}
@@ -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>(a), "isInstance<A>(a)")
assertEquals(false, isInstance<A>(b), "isInstance<A>(b)")
assertEquals(true, isInstance<A?>(a), "isInstance<A?>(a)")
assertEquals(true, isInstance<A?>(null), "isInstance<A?>(null)")
assertEquals(false, isInstance<A?>(b), "isInstance<A?>(b)")
return "OK"
}