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.rhino.RhinoUtils.runRhinoTest;
|
||||||
import static org.jetbrains.kotlin.js.test.utils.JsTestUtils.convertFileNameToDotJsFile;
|
import static org.jetbrains.kotlin.js.test.utils.JsTestUtils.convertFileNameToDotJsFile;
|
||||||
|
import static org.jetbrains.kotlin.test.InTextDirectivesUtils.isDirectiveDefined;
|
||||||
|
|
||||||
public abstract class BasicTest extends KotlinTestWithEnvironment {
|
public abstract class BasicTest extends KotlinTestWithEnvironment {
|
||||||
// predictable order of ecma version in tests
|
// 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_MODULE = "JS_TESTS";
|
||||||
public static final String TEST_PACKAGE = "foo";
|
public static final String TEST_PACKAGE = "foo";
|
||||||
public static final String TEST_FUNCTION = "box";
|
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
|
@NotNull
|
||||||
private String relativePathToTestDir = "";
|
private String relativePathToTestDir = "";
|
||||||
@@ -112,6 +114,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
|
|||||||
File outDir = new File(getOutputPath());
|
File outDir = new File(getOutputPath());
|
||||||
|
|
||||||
KotlinTestUtils.mkdirs(outDir);
|
KotlinTestUtils.mkdirs(outDir);
|
||||||
|
isInlineEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -179,7 +182,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
|
|||||||
List<String> allFiles = withAdditionalKotlinFiles(files);
|
List<String> allFiles = withAdditionalKotlinFiles(files);
|
||||||
List<KtFile> jetFiles = createJetFileList(project, allFiles, null);
|
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));
|
File outputFile = new File(getOutputFilePath(testName, version));
|
||||||
|
|
||||||
translateFiles(jetFiles, outputFile, mainCallParameters, config);
|
translateFiles(jetFiles, outputFile, mainCallParameters, config);
|
||||||
@@ -318,7 +321,22 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@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);
|
List<String> librariesWithStdlib = new ArrayList<String>(LibrarySourcesConfig.JS_STDLIB);
|
||||||
if (libraries != null) {
|
if (libraries != null) {
|
||||||
librariesWithStdlib.addAll(libraries);
|
librariesWithStdlib.addAll(libraries);
|
||||||
@@ -327,7 +345,7 @@ public abstract class BasicTest extends KotlinTestWithEnvironment {
|
|||||||
return new LibrarySourcesConfig.Builder(project, moduleId, librariesWithStdlib)
|
return new LibrarySourcesConfig.Builder(project, moduleId, librariesWithStdlib)
|
||||||
.ecmaVersion(ecmaVersion)
|
.ecmaVersion(ecmaVersion)
|
||||||
.sourceMap(shouldGenerateSourceMap())
|
.sourceMap(shouldGenerateSourceMap())
|
||||||
.inlineEnabled(IS_INLINE_ENABLED)
|
.inlineEnabled(isInlineEnabled)
|
||||||
.isUnitTestConfig(shouldBeTranslateAsUnitTestClass())
|
.isUnitTestConfig(shouldBeTranslateAsUnitTestClass())
|
||||||
.metaInfo(shouldGenerateMetaInfo())
|
.metaInfo(shouldGenerateMetaInfo())
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -142,4 +142,10 @@ public class ReifiedTestGenerated extends AbstractReifiedTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/reified/cases/vararg.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/reified/cases/vararg.kt");
|
||||||
doTest(fileName);
|
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