JS/RTTI: test that reified is-check works when inline turned off
This commit is contained in:
committed by
Alexey Andreev
parent
dce0971c52
commit
427b95f821
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user