From fc1a1f742befba9cf6d5aae5d5249c71bb19e480 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 19 May 2015 21:03:31 +0300 Subject: [PATCH] JS test: added multi-module inline tests --- .../kotlin/generators/tests/GenerateTests.kt | 4 + .../InlineMultiModuleTestGenerated.java | 97 +++++++++++++++++++ .../abstarctClassesForGeneratedTests.kt | 2 + .../anotherModuleValInClosure/lib/lib.kt | 9 ++ .../anotherModuleValInClosure/main/main.kt | 12 +++ .../cases/callableReference/lib/lib.kt | 5 + .../cases/callableReference/main/main.kt | 13 +++ .../cases/calledByFqName/lib/lib.kt | 5 + .../cases/calledByFqName/main/main.kt | 10 ++ .../cases/extensionLambda/lib/lib.kt | 5 + .../cases/extensionLambda/main/main.kt | 13 +++ .../inlineMultiModule/cases/lambda/lib/lib.kt | 5 + .../cases/lambda/main/main.kt | 11 +++ .../lambdaCalledInObjectLiteral/lib/lib.kt | 10 ++ .../lambdaCalledInObjectLiteral/main/main.kt | 9 ++ .../cases/lambdaWithClosure/lib/lib.kt | 5 + .../cases/lambdaWithClosure/main/main.kt | 11 +++ .../cases/localNameClash/lib/lib.kt | 7 ++ .../cases/localNameClash/main/main.kt | 11 +++ .../inlineMultiModule/cases/method/lib/lib.kt | 6 ++ .../cases/method/main/main.kt | 11 +++ .../inlineMultiModule/cases/simple/lib/lib.kt | 5 + .../cases/simple/main/main.kt | 12 +++ .../inlineMultiModule/dependencies.txt | 2 + 24 files changed, 280 insertions(+) create mode 100644 js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineMultiModuleTestGenerated.java create mode 100644 js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/callableReference/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/calledByFqName/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/extensionLambda/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambda/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/localNameClash/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/method/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/simple/lib/lib.kt create mode 100644 js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt create mode 100644 js/js.translator/testData/inlineMultiModule/dependencies.txt diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 33715325294..606472b836b 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -854,6 +854,10 @@ fun main(args: Array) { model("inlineEvaluationOrder/cases") } + testClass(javaClass()) { + model("inlineMultiModule/cases", extension = null, recursive=false) + } + testClass(javaClass()) { model("labels/cases") } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineMultiModuleTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineMultiModuleTestGenerated.java new file mode 100644 index 00000000000..066c7ccaa8a --- /dev/null +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/InlineMultiModuleTestGenerated.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010-2015 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.kotlin.js.test.semantics; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.JetTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("js/js.translator/testData/inlineMultiModule/cases") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class InlineMultiModuleTestGenerated extends AbstractInlineMultiModuleTest { + public void testAllFilesPresentInCases() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/inlineMultiModule/cases"), Pattern.compile("^([^\\.]+)$"), false); + } + + @TestMetadata("anotherModuleValInClosure") + public void testAnotherModuleValInClosure() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/"); + doTest(fileName); + } + + @TestMetadata("callableReference") + public void testCallableReference() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/callableReference/"); + doTest(fileName); + } + + @TestMetadata("calledByFqName") + public void testCalledByFqName() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/calledByFqName/"); + doTest(fileName); + } + + @TestMetadata("extensionLambda") + public void testExtensionLambda() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/extensionLambda/"); + doTest(fileName); + } + + @TestMetadata("lambda") + public void testLambda() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/lambda/"); + doTest(fileName); + } + + @TestMetadata("lambdaCalledInObjectLiteral") + public void testLambdaCalledInObjectLiteral() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/"); + doTest(fileName); + } + + @TestMetadata("lambdaWithClosure") + public void testLambdaWithClosure() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/"); + doTest(fileName); + } + + @TestMetadata("localNameClash") + public void testLocalNameClash() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/localNameClash/"); + doTest(fileName); + } + + @TestMetadata("method") + public void testMethod() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/method/"); + doTest(fileName); + } + + @TestMetadata("simple") + public void testSimple() throws Exception { + String fileName = JetTestUtils.navigationMetadata("js/js.translator/testData/inlineMultiModule/cases/simple/"); + doTest(fileName); + } +} diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstarctClassesForGeneratedTests.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstarctClassesForGeneratedTests.kt index f21b739ef29..0a527e2c870 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstarctClassesForGeneratedTests.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstarctClassesForGeneratedTests.kt @@ -46,4 +46,6 @@ public abstract class AbstractLabelTest : AbstractSingleFileTranslationWithDirec public abstract class AbstractMultiModuleTest : MultipleModulesTranslationTest("multiModule/") +public abstract class AbstractInlineMultiModuleTest : MultipleModulesTranslationTest("inlineMultiModule/") + public abstract class AbstractReservedWordTest : SingleFileTranslationTest("reservedWords/") diff --git a/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/lib/lib.kt new file mode 100644 index 00000000000..23a0964f5e8 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/lib/lib.kt @@ -0,0 +1,9 @@ +package utils + +public var LOG: String = "" + +inline +public fun log(s: String): String { + LOG += s + return LOG +} diff --git a/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt new file mode 100644 index 00000000000..59da69ddf82 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt @@ -0,0 +1,12 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(s: String): String = log(s + ";") + +fun box(): String { + assertEquals("a;", test("a")) + assertEquals("a;b;", test("b")) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/callableReference/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/callableReference/lib/lib.kt new file mode 100644 index 00000000000..d06bad389f8 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/callableReference/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun apply(x: T, fn: (T)->R): R = + fn(x) \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt new file mode 100644 index 00000000000..bac7d6bf36e --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt @@ -0,0 +1,13 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun multiplyBy2(x: Int): Int = x * 2 + +fun test(x: Int): Int = apply(x, ::multiplyBy2) + +fun box(): String { + assertEquals(6, test(3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/lib/lib.kt new file mode 100644 index 00000000000..3ff981e7d48 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun sum(x: Int, y: Int): Int = + x + y \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt new file mode 100644 index 00000000000..186f148677c --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt @@ -0,0 +1,10 @@ +// CHECK_CONTAINS_NO_CALLS: test + +fun test(x: Int, y: Int): Int = utils.sum(x, y) + +fun box(): String { + assertEquals(3, test(1, 2)) + assertEquals(5, test(2, 3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/lib/lib.kt new file mode 100644 index 00000000000..fc56406dbf4 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun apply(x: T, fn: T.()->R): R = + x.fn() diff --git a/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt new file mode 100644 index 00000000000..70b75e1fbe0 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt @@ -0,0 +1,13 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +class A(val n: Int) + +fun test(a: A, m: Int): Int = apply(a) { n * m } + +fun box(): String { + assertEquals(6, test(A(2), 3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambda/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/lambda/lib/lib.kt new file mode 100644 index 00000000000..d06bad389f8 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambda/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun apply(x: T, fn: (T)->R): R = + fn(x) \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt new file mode 100644 index 00000000000..4a2e1cb2aa9 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt @@ -0,0 +1,11 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(x: Int): Int = apply(x) { it * 2 } + +fun box(): String { + assertEquals(6, test(3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/lib/lib.kt new file mode 100644 index 00000000000..84178c23fc6 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/lib/lib.kt @@ -0,0 +1,10 @@ +package utils + +inline +public fun apply(x: T, inlineOptions(InlineOption.ONLY_LOCAL_RETURN) fn: (T)->R): R { + val result = object { + val x = fn(x) + } + + return result.x +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/main/main.kt new file mode 100644 index 00000000000..ac707b0d9a5 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambdaCalledInObjectLiteral/main/main.kt @@ -0,0 +1,9 @@ +import utils.* + +fun test(x: Int): Int = apply(x) { it * 2 } + +fun box(): String { + assertEquals(6, test(3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/lib/lib.kt new file mode 100644 index 00000000000..d06bad389f8 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun apply(x: T, fn: (T)->R): R = + fn(x) \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt new file mode 100644 index 00000000000..1a364b14783 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt @@ -0,0 +1,11 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(x: Int, y: Int): Int = apply(x) { it + y } + +fun box(): String { + assertEquals(3, test(1, 2)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/localNameClash/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/localNameClash/lib/lib.kt new file mode 100644 index 00000000000..943d0d1bac0 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/localNameClash/lib/lib.kt @@ -0,0 +1,7 @@ +package utils + +inline +public fun apply(x: T, fn: (T)->R): R { + val y = fn(x) + return y +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt new file mode 100644 index 00000000000..b850d240d33 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt @@ -0,0 +1,11 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(x: Int, y: Int): Int = apply(x) { it + 1 } * y + +fun box(): String { + assertEquals(6, test(1, 3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/method/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/method/lib/lib.kt new file mode 100644 index 00000000000..71c1ee4b30a --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/method/lib/lib.kt @@ -0,0 +1,6 @@ +package utils + +public class A(public val x: Int) { + inline + public fun plus(y: Int): Int = x + y +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt new file mode 100644 index 00000000000..8e55aa6c768 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt @@ -0,0 +1,11 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(a: A, y: Int): Int = a.plus(y) + +fun box(): String { + assertEquals(5, test(A(2), 3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/simple/lib/lib.kt b/js/js.translator/testData/inlineMultiModule/cases/simple/lib/lib.kt new file mode 100644 index 00000000000..3ff981e7d48 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/simple/lib/lib.kt @@ -0,0 +1,5 @@ +package utils + +inline +public fun sum(x: Int, y: Int): Int = + x + y \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt new file mode 100644 index 00000000000..bd63c8d38b0 --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt @@ -0,0 +1,12 @@ +import utils.* + +// CHECK_CONTAINS_NO_CALLS: test + +fun test(x: Int, y: Int): Int = sum(x, y) + +fun box(): String { + assertEquals(3, test(1, 2)) + assertEquals(5, test(2, 3)) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/dependencies.txt b/js/js.translator/testData/inlineMultiModule/dependencies.txt new file mode 100644 index 00000000000..e74a34660da --- /dev/null +++ b/js/js.translator/testData/inlineMultiModule/dependencies.txt @@ -0,0 +1,2 @@ +lib-> +main->lib \ No newline at end of file