JS frontend: added tests for nativeInvoke, nativeGetter, nativeSetter.

This commit is contained in:
Zalim Bashorov
2014-11-25 21:30:33 +03:00
parent 99745dfa90
commit 31d4a8c226
66 changed files with 2428 additions and 7 deletions
@@ -145,7 +145,7 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
StringBuilder actualText = new StringBuilder();
for (TestFile testFile : testFiles) {
ok &= testFile.getActualText(moduleBindings.get(testFile.getModule()), actualText, groupedByModule.size() > 1);
ok &= testFile.getActualText(moduleBindings.get(testFile.getModule()), actualText, shouldSkipJvmSignatureDiagnostics(groupedByModule));
}
JetTestUtils.assertEqualsToFile(testDataFile, actualText.toString());
@@ -161,6 +161,10 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
}
}
public boolean shouldSkipJvmSignatureDiagnostics(Map<TestModule, List<TestFile>> groupedByModule) {
return groupedByModule.size() > 1;
}
@Nullable
private static Throwable checkLazyResolveLog(LazyOperationsLog lazyOperationsLog, File testDataFile) {
Throwable exceptionFromLazyResolveLogValidation = null;
@@ -261,8 +265,8 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
for (TestModule testModule : groupedByModule.keySet()) {
ModuleDescriptorImpl module =
testModule == null ?
TopDownAnalyzerFacadeForJVM.createSealedJavaModule() :
createModule(testModule);
createSealedModule() :
createModule("<" + testModule.getName() + ">");
modules.put(testModule, module);
}
@@ -283,9 +287,13 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
return modules;
}
protected ModuleDescriptorImpl createModule(TestModule testModule) {
String name = "<" + testModule.getName() + ">";
return TopDownAnalyzerFacadeForJVM.createJavaModule(name);
protected ModuleDescriptorImpl createModule(String moduleName) {
return TopDownAnalyzerFacadeForJVM.createJavaModule(moduleName);
}
@NotNull
protected ModuleDescriptorImpl createSealedModule() {
return TopDownAnalyzerFacadeForJVM.createSealedJavaModule();
}
private static void checkAllResolvedCallsAreCompleted(@NotNull List<JetFile> jetFiles, @NotNull BindingContext bindingContext) {
@@ -0,0 +1,106 @@
/*
* Copyright 2010-2014 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.checkers;
import com.google.common.base.Predicates;
import com.intellij.openapi.Disposable;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS;
import org.jetbrains.k2js.config.EcmaVersion;
import org.jetbrains.k2js.config.LibrarySourcesConfigWithCaching;
import java.util.List;
import java.util.Map;
public abstract class AbstractJetDiagnosticsTestWithJsStdLib extends AbstractJetDiagnosticsTest {
private LibrarySourcesConfigWithCaching config;
@Override
protected void setUp() throws Exception {
super.setUp();
config = new LibrarySourcesConfigWithCaching(getProject(), "module", EcmaVersion.defaultVersion(), false, true, false);
}
@Override
protected void tearDown() throws Exception {
config = null;
super.tearDown();
}
@Override
@NotNull
protected JetCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
return JetCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
}
@Override
protected void analyzeModuleContents(
GlobalContext context,
List<JetFile> jetFiles,
ModuleDescriptorImpl module,
BindingTrace moduleTrace
) {
BindingContext libraryContext = config.getLibraryContext();
DelegatingBindingTrace trace = new DelegatingBindingTrace(libraryContext, "trace with preanalyzed library");
TopDownAnalyzerFacadeForJS.analyzeFilesWithGivenTrace(jetFiles, moduleTrace, module, Predicates.<PsiFile>alwaysTrue(), config);
trace.addAllMyDataTo(moduleTrace);
}
@Override
public boolean shouldSkipJvmSignatureDiagnostics(Map<TestModule, List<TestFile>> groupedByModule) {
return true;
}
@Override
protected ModuleDescriptorImpl createModule(String moduleName) {
return TopDownAnalyzerFacadeForJS.createJsModule(moduleName);
}
@NotNull
@Override
protected ModuleDescriptorImpl createSealedModule() {
//It's JVM specific thing, so for JS we just create and setup module.
ModuleDescriptorImpl module = createModule("<kotlin-js-test-module>");
module.addDependencyOnModule(module);
module.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule());
ModuleDescriptor libraryModule = config.getLibraryModule();
assert libraryModule instanceof ModuleDescriptorImpl;
module.addDependencyOnModule((ModuleDescriptorImpl) libraryModule);
module.seal();
return module;
}
}
@@ -0,0 +1,256 @@
/*
* Copyright 2010-2014 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.checkers;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib")
@TestDataPath("$PROJECT_ROOT")
@InnerTestClasses({JetDiagnosticsTestWithJsStdLibGenerated.Native.class})
@RunWith(JUnit3RunnerWithInners.class)
public class JetDiagnosticsTestWithJsStdLibGenerated extends AbstractJetDiagnosticsTestWithJsStdLib {
public void testAllFilesPresentInTestsWithJsStdLib() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJsStdLib"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native")
@TestDataPath("$PROJECT_ROOT")
@InnerTestClasses({Native.NativeGetter.class, Native.NativeInvoke.class, Native.NativeSetter.class})
@RunWith(JUnit3RunnerWithInners.class)
public static class Native extends AbstractJetDiagnosticsTestWithJsStdLib {
public void testAllFilesPresentInNative() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJsStdLib/native"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class NativeGetter extends AbstractJetDiagnosticsTestWithJsStdLib {
public void testAllFilesPresentInNativeGetter() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("onLocalExtensionFun.kt")
public void testOnLocalExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onLocalExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onLocalNativeClassMembers.kt")
public void testOnLocalNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onLocalNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalNonNativeClassMembers.kt")
public void testOnLocalNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onLocalNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalOtherDeclarations.kt")
public void testOnLocalOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onLocalOtherDeclarations.kt");
doTest(fileName);
}
@TestMetadata("onNativeClassMembers.kt")
public void testOnNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNativeClass.kt")
public void testOnNestedDeclarationsInsideNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onNestedDeclarationsInsideNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNonNativeClass.kt")
public void testOnNestedDeclarationsInsideNonNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onNestedDeclarationsInsideNonNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNonNativeClassMembers.kt")
public void testOnNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onToplevelExtensionFun.kt")
public void testOnToplevelExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onToplevelExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onToplevelOtherDeclarations.kt")
public void testOnToplevelOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeGetter/onToplevelOtherDeclarations.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class NativeInvoke extends AbstractJetDiagnosticsTestWithJsStdLib {
public void testAllFilesPresentInNativeInvoke() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("onLocalExtensionFun.kt")
public void testOnLocalExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onLocalExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onLocalNativeClassMembers.kt")
public void testOnLocalNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onLocalNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalNonNativeClassMembers.kt")
public void testOnLocalNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onLocalNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalOtherDeclarations.kt")
public void testOnLocalOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onLocalOtherDeclarations.kt");
doTest(fileName);
}
@TestMetadata("onNativeClassMembers.kt")
public void testOnNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNativeClass.kt")
public void testOnNestedDeclarationsInsideNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onNestedDeclarationsInsideNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNonNativeClass.kt")
public void testOnNestedDeclarationsInsideNonNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onNestedDeclarationsInsideNonNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNonNativeClassMembers.kt")
public void testOnNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onToplevelExtensionFun.kt")
public void testOnToplevelExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onToplevelExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onToplevelOtherDeclarations.kt")
public void testOnToplevelOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeInvoke/onToplevelOtherDeclarations.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class NativeSetter extends AbstractJetDiagnosticsTestWithJsStdLib {
public void testAllFilesPresentInNativeSetter() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("onLocalExtensionFun.kt")
public void testOnLocalExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onLocalExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onLocalNativeClassMembers.kt")
public void testOnLocalNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onLocalNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalNonNativeClassMembers.kt")
public void testOnLocalNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onLocalNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onLocalOtherDeclarations.kt")
public void testOnLocalOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onLocalOtherDeclarations.kt");
doTest(fileName);
}
@TestMetadata("onNativeClassMembers.kt")
public void testOnNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNativeClass.kt")
public void testOnNestedDeclarationsInsideNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onNestedDeclarationsInsideNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNestedDeclarationsInsideNonNativeClass.kt")
public void testOnNestedDeclarationsInsideNonNativeClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onNestedDeclarationsInsideNonNativeClass.kt");
doTest(fileName);
}
@TestMetadata("onNonNativeClassMembers.kt")
public void testOnNonNativeClassMembers() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onNonNativeClassMembers.kt");
doTest(fileName);
}
@TestMetadata("onToplevelExtensionFun.kt")
public void testOnToplevelExtensionFun() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onToplevelExtensionFun.kt");
doTest(fileName);
}
@TestMetadata("onToplevelOtherDeclarations.kt")
public void testOnToplevelOtherDeclarations() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/native/nativeSetter/onToplevelOtherDeclarations.kt");
doTest(fileName);
}
}
}
}
@@ -17,6 +17,7 @@
package org.jetbrains.jet.checkers;
import com.google.common.io.Files;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -74,7 +75,12 @@ public abstract class KotlinMultiFileTestWithWithJava<M, F> extends JetLiteFixtu
if (kotlinSourceRoot != null) {
configuration.add(CommonConfigurationKeys.SOURCE_ROOTS_KEY, kotlinSourceRoot.getPath());
}
return JetCoreEnvironment.createForTests(getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
return createEnvironment(getTestRootDisposable(), configuration);
}
@NotNull
protected JetCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
return JetCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
}
@Nullable