From 25bf7533692f13a384a78265847a24bb67c678b8 Mon Sep 17 00:00:00 2001 From: James Strachan Date: Tue, 3 Jul 2012 13:55:49 +0100 Subject: [PATCH] added test case for KT-2354 --- js/js.libraries/src/stdlib/jutil.kt | 20 ++++++++++++ .../k2js/test/SingleFileTranslationTest.java | 8 +++++ .../k2js/test/semantics/EqualsTest.java | 32 +++++++++++++++++++ .../equals/cases/customEqualsMethod.kt | 18 +++++++++++ .../expression/equals/cases/stringsEqual.kt | 12 +++++++ libraries/stdlib/test/ListTest.kt | 9 +++++- 6 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 js/js.tests/test/org/jetbrains/k2js/test/semantics/EqualsTest.java create mode 100644 js/js.translator/testFiles/expression/equals/cases/customEqualsMethod.kt create mode 100644 js/js.translator/testFiles/expression/equals/cases/stringsEqual.kt diff --git a/js/js.libraries/src/stdlib/jutil.kt b/js/js.libraries/src/stdlib/jutil.kt index 7575941199d..0da2d20303d 100644 --- a/js/js.libraries/src/stdlib/jutil.kt +++ b/js/js.libraries/src/stdlib/jutil.kt @@ -2,6 +2,26 @@ package kotlin import java.util.* +public inline fun java.lang.Iterable.toString(): String { + return makeString(", ", "[", "]") +} + +public inline fun java.util.List.equals(that: List): Boolean { + val s1 = this.size() + val s2 = that.size() + if (s1 == s2) { + for (i in 0.upto(s1)) { + val elem1 = this.get(i) + val elem2 = that.get(i) + if (elem1 != elem2) { + return false + } + } + return true + } + return false +} + /** Returns a new ArrayList with a variable number of initial elements */ public inline fun arrayList(vararg values: T) : ArrayList { val list = ArrayList() diff --git a/js/js.tests/test/org/jetbrains/k2js/test/SingleFileTranslationTest.java b/js/js.tests/test/org/jetbrains/k2js/test/SingleFileTranslationTest.java index 3f09631dfaf..1341671e860 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/SingleFileTranslationTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/SingleFileTranslationTest.java @@ -54,10 +54,18 @@ public abstract class SingleFileTranslationTest extends BasicTest { runFunctionOutputTest(ecmaVersions, filename, "foo", "box", true); } + public void checkFooBoxIsValue(@NotNull String filename, @NotNull EnumSet ecmaVersions, Object expected) throws Exception { + runFunctionOutputTest(ecmaVersions, filename, "foo", "box", expected); + } + protected void fooBoxTest() throws Exception { checkFooBoxIsTrue(getTestName(true) + ".kt", EcmaVersion.all()); } + protected void fooBoxIsValue(Object expected) throws Exception { + checkFooBoxIsValue(getTestName(true) + ".kt", EcmaVersion.all(), expected); + } + protected void fooBoxTest(@NotNull EnumSet ecmaVersions) throws Exception { checkFooBoxIsTrue(getTestName(true) + ".kt", ecmaVersions); } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/EqualsTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/EqualsTest.java new file mode 100644 index 00000000000..67c073bfb89 --- /dev/null +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/EqualsTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2012 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.k2js.test.semantics; + +public final class EqualsTest extends AbstractExpressionTest { + + public EqualsTest() { + super("equals/"); + } + + public void TODO_testCustomEqualsMethod() throws Exception { + fooBoxTest(); + } + + public void testStringsEqual() throws Exception { + fooBoxTest(); + } +} \ No newline at end of file diff --git a/js/js.translator/testFiles/expression/equals/cases/customEqualsMethod.kt b/js/js.translator/testFiles/expression/equals/cases/customEqualsMethod.kt new file mode 100644 index 00000000000..70c58bf634f --- /dev/null +++ b/js/js.translator/testFiles/expression/equals/cases/customEqualsMethod.kt @@ -0,0 +1,18 @@ +package foo + +class Foo(val name: String) { + public fun equals(that: Foo): Boolean { + return this.name == that.name + } +} + +fun box() : Boolean { + val a = Foo("abc") + val b = Foo("abc") + val c = Foo("def") + + if (a != b) return false + if (a == c) return false + + return true +} \ No newline at end of file diff --git a/js/js.translator/testFiles/expression/equals/cases/stringsEqual.kt b/js/js.translator/testFiles/expression/equals/cases/stringsEqual.kt new file mode 100644 index 00000000000..af7106b8c4d --- /dev/null +++ b/js/js.translator/testFiles/expression/equals/cases/stringsEqual.kt @@ -0,0 +1,12 @@ +package foo + +fun box() : Boolean { + val a = "abc" + val b = "abc" + val c = "def" + + if (a != b) return false + if (a == c) return false + + return true +} \ No newline at end of file diff --git a/libraries/stdlib/test/ListTest.kt b/libraries/stdlib/test/ListTest.kt index bd7268ef142..3a55a3bccec 100644 --- a/libraries/stdlib/test/ListTest.kt +++ b/libraries/stdlib/test/ListTest.kt @@ -6,6 +6,11 @@ import org.junit.Test as test class ListTest { + test fun toString() { + val data = arrayList("foo", "bar") + assertEquals("[foo, bar]", data.toString()) + } + test fun head() { val data = arrayList("foo", "bar") assertEquals("foo", data.head) @@ -13,7 +18,9 @@ class ListTest { test fun tail() { val data = arrayList("foo", "bar", "whatnot") - assertEquals(arrayList("bar", "whatnot"), data.tail) + val actual = data.tail + val expected = arrayList("bar", "whatnot") + assertEquals(expected, actual) } test fun first() {