diff options
Diffstat (limited to 'examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler')
15 files changed, 0 insertions, 2076 deletions
diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/BooleanTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/BooleanTest.scala deleted file mode 100644 index 8343244..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/BooleanTest.scala +++ /dev/null @@ -1,41 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js - -object BooleanTest extends JasmineTest { - - describe("Boolean primitives") { - - it("&, | and ^ on booleans should return booleans") { - expect(js.typeOf(true & false)).toEqual("boolean") - expect(js.typeOf(true | false)).toEqual("boolean") - expect(js.typeOf(true ^ false)).toEqual("boolean") - } - - it("&, | and ^ on booleans should return correct results") { - expect(false & false).toBeFalsy - expect(false & true).toBeFalsy - expect(true & false).toBeFalsy - expect(true & true).toBeTruthy - - expect(false | false).toBeFalsy - expect(true | false).toBeTruthy - expect(false | true).toBeTruthy - expect(true | true).toBeTruthy - - expect(false ^ false).toBeFalsy - expect(true ^ false).toBeTruthy - expect(false ^ true).toBeTruthy - expect(true ^ true).toBeFalsy - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ByteTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ByteTest.scala deleted file mode 100644 index 9f48993..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ByteTest.scala +++ /dev/null @@ -1,40 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js - -object ByteTest extends JasmineTest { - - describe("Byte primitives") { - - it("should always be in their range") { - def test(x: Int, y: Byte): Unit = - expect(x.toByte).toEqual(y) - - test(0, 0) - test(127, 127) - test(128, -128) - test(-128, -128) - test(-500, 12) - test(-90000, 112) - test(123456789, 21) - test(-40000, -64) - test(65536, 0) - test(32768, 0) - - def testC(x: Char, y: Byte): Unit = - expect(x.toByte).toEqual(y) - - testC(-1.toChar, -1) - testC(200.toChar, -56) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/CharTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/CharTest.scala deleted file mode 100644 index edc2660..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/CharTest.scala +++ /dev/null @@ -1,40 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js.Any.fromInt - -object CharTest extends JasmineTest { - - describe("Char primitives") { - - it("should always be positive (when coerced)") { - expect(-3.toByte.toChar.toInt).toEqual(65533) - expect(-100.toShort.toChar.toInt).toEqual(65436) - expect(-66000.toChar.toInt).toEqual(65072) - expect(-4567L.toChar.toInt).toEqual(60969) - expect(-5.3f.toChar.toInt).toEqual(65531) - expect(-7.9.toChar.toInt).toEqual(65529) - } - - it("should overflow (when coerced)") { - expect(347876543.toChar.toInt).toEqual(11455) - expect(34234567876543L.toChar.toInt).toEqual(57279) - } - - it("should overflow with *") { - def test(a: Char, b: Char, expected: Int): Unit = - expect(a * b).toEqual(expected) - - // note: expected values are constant-folded by the compiler on the JVM - test(Char.MaxValue, Char.MaxValue, Char.MaxValue * Char.MaxValue) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/FloatTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/FloatTest.scala deleted file mode 100644 index 5eda04a..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/FloatTest.scala +++ /dev/null @@ -1,73 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest - -object FloatTest extends JasmineTest { - - def froundNotInlined(x: Double): Float = { - val y = x // so you don't inline me - y.toFloat - } - - when("strict-floats"). - describe("Strict floats") { - - it("fround for special values") { - expect(froundNotInlined(Double.NaN).isNaN).toBeTruthy - expect(1 / froundNotInlined(0.0).toDouble).toBe(Double.PositiveInfinity) - expect(1 / froundNotInlined(-0.0).toDouble).toBe(Double.NegativeInfinity) - expect(froundNotInlined(Double.PositiveInfinity)).toBe(Float.PositiveInfinity) - expect(froundNotInlined(Double.NegativeInfinity)).toBe(Float.NegativeInfinity) - } - - it("fround overflows") { - expect(froundNotInlined(1e200)).toBe(Double.PositiveInfinity) - expect(froundNotInlined(-1e200)).toBe(Double.NegativeInfinity) - } - - it("fround underflows") { - expect(1 / froundNotInlined(1e-300).toDouble).toBe(Double.PositiveInfinity) - expect(1 / froundNotInlined(-1e-300).toDouble).toBe(Double.NegativeInfinity) - } - - it("fround normal cases") { - def test(input: Double, expected: Double): Unit = - expect(input.toFloat.toDouble).toBe(expected) - - // From MDN documentation - test(0.0, 0.0) - test(1.0, 1.0) - test(1.5, 1.5) - test(1.337, 1.3370000123977661) - test(-4.3, -4.300000190734863) - - // Some bounds - test(Float.MinPositiveValue.toDouble, Float.MinPositiveValue.toDouble) - test(Float.MaxValue.toDouble, Float.MaxValue.toDouble) - test(Float.MinValue.toDouble, Float.MinValue.toDouble) - - // Randomly generated Doubles - test(2.705609035558863E20, 2.7056090763400262E20) - test(-1.447710531503027E15, -1.447710532042752E15) - test(-5.1970024617732836E13, -5.1970022834176E13) - test(1.627661085098256E31, 1.6276610930768024E31) - test(-3.7731947682593834E-32, -3.7731946313230934E-32) - test(34.48229849163326, 34.4822998046875) - test(26.62034396181652, 26.620344161987305) - test(8.198435190113375E-24, 8.198434961596576E-24) - test(-6.079928908440255E-23, -6.079928963558556E-23) - test(3.3756949828462674E-13, 3.37569490589662E-13) - test(-1.2599049874324274E33, -1.2599049641449257E33) - test(6.08574575776438E-10, 6.085745796191588E-10) - test(1.973497969450596E-21, 1.973498047135062E-21) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InstanceTestsHijackedBoxedClassesTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InstanceTestsHijackedBoxedClassesTest.scala deleted file mode 100644 index 1379b80..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InstanceTestsHijackedBoxedClassesTest.scala +++ /dev/null @@ -1,98 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js - -object InstanceTestsHijackedBoxedClassesTest extends JasmineTest { - - describe("Instance tests for hijacked boxed classes") { - - it("should support isInstanceOf (positive)") { - expect((() : Any).isInstanceOf[Unit] ).toBeTruthy - expect((false : Any).isInstanceOf[Boolean]).toBeTruthy - expect(('a' : Any).isInstanceOf[Char] ).toBeTruthy - expect((65.toByte : Any).isInstanceOf[Byte] ).toBeTruthy - expect((654.toShort: Any).isInstanceOf[Short] ).toBeTruthy - expect((-4321 : Any).isInstanceOf[Int] ).toBeTruthy - expect((684321L : Any).isInstanceOf[Long] ).toBeTruthy - expect((3.14f : Any).isInstanceOf[Float] ).toBeTruthy - expect((3.14 : Any).isInstanceOf[Double] ).toBeTruthy - } - - it("should support isInstanceOf (negative)") { - expect((12345: Any).isInstanceOf[Unit] ).toBeFalsy - expect((12345: Any).isInstanceOf[Boolean]).toBeFalsy - expect((12345: Any).isInstanceOf[Char] ).toBeFalsy - expect(('a' : Any).isInstanceOf[Byte] ).toBeFalsy - expect(('b' : Any).isInstanceOf[Short] ).toBeFalsy - expect(('c' : Any).isInstanceOf[Int] ).toBeFalsy - expect(('d' : Any).isInstanceOf[Long] ).toBeFalsy - expect(('f' : Any).isInstanceOf[Float] ).toBeFalsy - expect(('g' : Any).isInstanceOf[Double] ).toBeFalsy - } - - it("should support asInstanceOf (positive)") { - def swallow(x: Any): Unit = () - swallow((() : Any).asInstanceOf[Unit] ) - swallow((false : Any).asInstanceOf[Boolean]) - swallow(('a' : Any).asInstanceOf[Char] ) - swallow((65.toByte : Any).asInstanceOf[Byte] ) - swallow((654.toShort: Any).asInstanceOf[Short] ) - swallow((-4321 : Any).asInstanceOf[Int] ) - swallow((684321L : Any).asInstanceOf[Long] ) - swallow((3.14f : Any).asInstanceOf[Float] ) - swallow((3.14 : Any).asInstanceOf[Double] ) - } - - when("compliant-asinstanceof"). - it("should support asInstanceOf (negative)") { - expect(() => (12345: Any).asInstanceOf[Unit] ).toThrow - expect(() => (12345: Any).asInstanceOf[Boolean]).toThrow - expect(() => (12345: Any).asInstanceOf[Char] ).toThrow - expect(() => ('a' : Any).asInstanceOf[Byte] ).toThrow - expect(() => ('b' : Any).asInstanceOf[Short] ).toThrow - expect(() => ('c' : Any).asInstanceOf[Int] ).toThrow - expect(() => ('d' : Any).asInstanceOf[Long] ).toThrow - expect(() => ('f' : Any).asInstanceOf[Float] ).toThrow - expect(() => ('g' : Any).asInstanceOf[Double] ).toThrow - } - - it("should support isInstanceOf via java.lang.Class (positive)") { - def test(x: Any, clazz: Class[_]): Unit = - expect(clazz.isInstance(x)).toBeTruthy - - test(() , classOf[scala.runtime.BoxedUnit]) - test(false , classOf[java.lang.Boolean]) - test('a' , classOf[java.lang.Character]) - test(65.toByte , classOf[java.lang.Byte]) - test(654.toShort, classOf[java.lang.Short]) - test(-4321 , classOf[java.lang.Integer]) - test(684321L , classOf[java.lang.Long]) - test(3.14f , classOf[java.lang.Float]) - test(3.14 , classOf[java.lang.Double]) - } - - it("should support isInstanceOf via java.lang.Class (negative)") { - def test(x: Any, clazz: Class[_]): Unit = - expect(clazz.isInstance(x)).toBeFalsy - - test(12345, classOf[scala.runtime.BoxedUnit]) - test(12345, classOf[java.lang.Boolean]) - test(12345, classOf[java.lang.Character]) - test('a' , classOf[java.lang.Byte]) - test('b' , classOf[java.lang.Short]) - test('c' , classOf[java.lang.Integer]) - test('d' , classOf[java.lang.Long]) - test('e' , classOf[java.lang.Float]) - test('f' , classOf[java.lang.Double]) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/IntTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/IntTest.scala deleted file mode 100644 index 60f8773..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/IntTest.scala +++ /dev/null @@ -1,206 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest - -object IntTest extends JasmineTest { - - /* General note on the way these tests are written: - * We leverage the constant folding applied by the Scala compiler to write - * sound tests. We always perform the same operation, on the same operands, - * once in a way constant folding understands, and once in a way it doesn't. - * Since constant folding is performed on the JVM, we know it has the right - * semantics. - */ - - // final val without type ascription to make sure these are constant-folded - final val MinVal = Int.MinValue - final val MaxVal = Int.MaxValue - final val AlmostMinVal = Int.MinValue + 43 - final val AlmostMaxVal = Int.MaxValue - 36 - - describe("Int primitives") { - - it("should support unary -") { - def test(a: Int, expected: Int): Unit = - expect(-a).toEqual(expected) - - test(56, -56) - test(0, 0) - test(-36, 36) - - test(MaxVal, -MaxVal) - test(MinVal, -MinVal) - test(-MaxVal, MaxVal) - test(AlmostMinVal, -AlmostMinVal) - test(AlmostMaxVal, -AlmostMaxVal) - } - - it("should support +") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a + b).toEqual(expected) - - test(56, 654, 56 + 654) - test(0, 25, 0 + 25) - test(-36, 13, -36 + 13) - - test(MaxVal, 1, MaxVal + 1) - test(MinVal, -1, MinVal - 1) - test(MaxVal, MinVal, MaxVal + MinVal) - test(AlmostMinVal, -100, AlmostMinVal - 100) - test(AlmostMaxVal, 123, AlmostMaxVal + 123) - } - - it("should support -") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a - b).toEqual(expected) - - test(56, 654, 56 - 654) - test(0, 25, 0 - 25) - test(-36, 13, -36 - 13) - - test(MaxVal, -1, MaxVal + 1) - test(MinVal, 1, MinVal - 1) - test(MaxVal, MinVal, MaxVal - MinVal) - test(AlmostMinVal, 100, AlmostMinVal - 100) - test(AlmostMaxVal, -123, AlmostMaxVal + 123) - } - - it("should support *") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a * b).toEqual(expected) - - test(56, 654, 56 * 654) - test(0, 25, 0 * 25) - test(-36, 13, -36 * 13) - test(-5, -6, -5 * -6) - - test(MinVal, 1, MinVal * 1) - test(MinVal, -1, MinVal * -1) - test(MaxVal, 1, MaxVal * 1) - test(MaxVal, -1, MaxVal * -1) - - test(MaxVal, MinVal, MaxVal * MinVal) - test(MaxVal, MaxVal, MaxVal * MaxVal) - test(MinVal, MaxVal, MinVal * MaxVal) - test(MinVal, MinVal, MinVal * MinVal) - - test(AlmostMaxVal, 2, AlmostMaxVal * 2) - test(AlmostMaxVal, 5, AlmostMaxVal * 5) - test(AlmostMaxVal, -7, AlmostMaxVal * -7) - test(AlmostMaxVal, -14, AlmostMaxVal * -14) - test(AlmostMinVal, 100, AlmostMinVal * 100) - test(AlmostMaxVal, -123, AlmostMaxVal * -123) - } - - it("should support /") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a / b).toEqual(expected) - - test(654, 56, 654 / 56) - test(0, 25, 0 / 25) - test(-36, 13, -36 / 13) - test(-55, -6, -55 / -6) - - test(MinVal, 1, MinVal / 1) - test(MinVal, -1, MinVal / -1) - test(MaxVal, 1, MaxVal / 1) - test(MaxVal, -1, MaxVal / -1) - - test(MaxVal, MinVal, MaxVal / MinVal) - test(MaxVal, MaxVal, MaxVal / MaxVal) - test(MinVal, MaxVal, MinVal / MaxVal) - test(MinVal, MinVal, MinVal / MinVal) - - test(AlmostMaxVal, 2, AlmostMaxVal / 2) - test(AlmostMaxVal, 5, AlmostMaxVal / 5) - test(AlmostMaxVal, -7, AlmostMaxVal / -7) - test(AlmostMaxVal, -14, AlmostMaxVal / -14) - test(AlmostMinVal, 100, AlmostMinVal / 100) - test(AlmostMaxVal, -123, AlmostMaxVal / -123) - } - - unless("phantomjs"). // see #593 - it("should support %") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a % b).toEqual(expected) - - test(654, 56, 654 % 56) - test(0, 25, 0 % 25) - test(-36, 13, -36 % 13) - test(-55, -6, -55 % -6) - - test(MinVal, 1, MinVal % 1) - test(MinVal, -1, MinVal % -1) - test(MaxVal, 1, MaxVal % 1) - test(MaxVal, -1, MaxVal % -1) - - test(MaxVal, MinVal, MaxVal % MinVal) - test(MaxVal, MaxVal, MaxVal % MaxVal) - test(MinVal, MaxVal, MinVal % MaxVal) - test(MinVal, MinVal, MinVal % MinVal) - - test(AlmostMaxVal, 2, AlmostMaxVal % 2) - test(AlmostMaxVal, 5, AlmostMaxVal % 5) - test(AlmostMaxVal, -7, AlmostMaxVal % -7) - test(AlmostMaxVal, -14, AlmostMaxVal % -14) - test(AlmostMinVal, 100, AlmostMinVal % 100) - test(AlmostMaxVal, -123, AlmostMaxVal % -123) - } - - it("should support <<") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a << b).toEqual(expected) - - test(0, 5, 0 << 5) - test(1, 5, 1 << 5) - test(13, 4, 13 << 4) - test(-35, 5, -35 << 5) - test(345, 0, 345 << 0) - - test(MinVal, 0, MinVal << 0) - test(MaxVal, 0, MaxVal << 0) - test(MinVal, 1, MinVal << 1) - test(MaxVal, 1, MaxVal << 1) - } - - it("should support >>") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a >> b).toEqual(expected) - - test(0, 5, 0 >> 5) - test(32, 5, 32 >> 5) - test(31, 4, 31 >> 4) - test(-355, 5, -355 >> 5) - test(345, 0, 345 >> 0) - - test(MinVal, 0, MinVal >> 0) - test(MaxVal, 0, MaxVal >> 0) - test(MinVal, 1, MinVal >> 1) - test(MaxVal, 1, MaxVal >> 1) - } - - it("should support >>>") { - def test(a: Int, b: Int, expected: Int): Unit = - expect(a >>> b).toEqual(expected) - - test(0, 5, 0 >>> 5) - test(32, 5, 32 >>> 5) - test(31, 4, 31 >>> 4) - test(-355, 5, -355 >>> 5) - test(345, 0, 345 >>> 0) - - test(MinVal, 0, MinVal >>> 0) - test(MaxVal, 0, MaxVal >>> 0) - test(MinVal, 1, MinVal >>> 1) - test(MaxVal, 1, MaxVal >>> 1) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InteroperabilityTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InteroperabilityTest.scala deleted file mode 100644 index 594345a..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/InteroperabilityTest.scala +++ /dev/null @@ -1,528 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.scalajs.js -import org.scalajs.jasminetest.{JasmineTest, JasmineTestFramework} -import scala.scalajs.js.annotation._ - -/* - * Based on examples in: - * http://lampwww.epfl.ch/~doeraene/scala-js/doc/js-interoperability.html - */ -object InteroperabilityTest extends JasmineTest { - - describe("JavaScript interoperability") { - - it("should support backquotes to escape Scala fields") { - val obj = js.eval(""" - var interoperabilityTestFieldEscape = { - def: 0, - val: function(x) { if (x) this.def = x; return this.def; } - }; - interoperabilityTestFieldEscape; - """).asInstanceOf[InteroperabilityTestFieldEscape] - - obj.`def` = 7357 - expect(obj.`def`).toEqual(7357) - expect(obj.`val`()).toEqual(7357) - expect(obj.`val`(42)).toEqual(42) - } - - it("should support @JSName to specify the JavaScript name for fields") { - val obj = js.eval(""" - var interoperabilityTestJSName = { - def: 42, - val: function(x) { if (x) this.def = x; return this.def; } - }; - interoperabilityTestJSName; - """).asInstanceOf[InteroperabilityTestJSName] - - expect(obj.value()).toEqual(42) - expect(obj.value(7357)).toEqual(7357) - } - - it("should translate explicit getter and setter names to field access") { - val obj = js.eval(""" - var interoperabilityTestProperty = { a: 1 }; - interoperabilityTestProperty; - """).asInstanceOf[InteroperabilityTestProperty] - - expect(obj.a).toEqual(1) - obj.a = 100 - expect(obj.a).toEqual(100) - } - - it("should support @JSName together with field access") { - val obj = js.eval(""" - var interoperabilityTestProperty = { b: 1 }; - interoperabilityTestProperty; - """).asInstanceOf[InteroperabilityTestPropertyNamed] - - expect(obj.a).toEqual(1) - obj.a = 100 - expect(obj.a).toEqual(100) - expect(obj.b).toEqual(100) - } - - it("should support @JSBracketAccess to specify access using []-subscription") { - val obj = js.eval(""" - var interoperabilityTestJSBracketAccess = [ 0, 1, 7357 ]; - interoperabilityTestJSBracketAccess; - """).asInstanceOf[InteroperabilityTestJSBracketAccess] - - expect(obj(2)).toEqual(7357) - obj(2) = 42 - expect(obj(2)).toEqual(42) - } - - it("should allow instanciation of JS classes inheriting from js.Object") { - js.eval(""" - var InteroperabilityTestInherit = { - Pattern: function(x) { - this.field = 42; - this.method = function() { - return '42'; - }; - this.getConstructorParam = function() { - return x; - }; - } - } - """) - - val obj = new InteroperabilityTestPattern("Scala.js") - expect(obj.field).toEqual(42) - expect(obj.method).toEqual("42") - expect(obj.getConstructorParam).toEqual("Scala.js") - } - - it("should acces top-level JS objects via Scala objects inheriting from js.Object") { - js.eval(""" - var InteroperabilityTestTopLevelObject = function(value) { - return { - value: value, - valueAsInt: function() { - return parseInt(value); - } - }; - } - """) - - // Use alias for convenience: see end of file for definition - val TopLevel = InteroperabilityTestTopLevel - - val obj = TopLevel("7357") - expect(obj.value).toEqual("7357") - expect(obj.valueAsInt).toEqual(7357) - } - - it("should allow to call JS methods with variadic parameters") { - val obj = js.eval(""" - var obj = { - foo: function() { - var args = new Array(arguments.length); - for (var i = 0; i < arguments.length; i++) - args[i] = arguments[i]; - return args; - } - }; - obj; - """) - - val elems = Seq[js.Any]("plop", 42, 51) - - val dyn = obj.asInstanceOf[js.Dynamic] - expect(dyn.foo()).toEqual(js.Array()) - expect(dyn.foo(3, 6)).toEqual(js.Array(3, 6)) - expect(dyn.foo("hello", false)).toEqual(js.Array("hello", false)) - expect(dyn.applyDynamic("foo")(elems: _*)).toEqual(js.Array("plop", 42, 51)) - - val stat = obj.asInstanceOf[InteroperabilityTestVariadicMethod] - expect(stat.foo()).toEqual(js.Array()) - expect(stat.foo(3, 6)).toEqual(js.Array(3, 6)) - expect(stat.foo("hello", false)).toEqual(js.Array("hello", false)) - expect(stat.foo(elems: _*)).toEqual(js.Array("plop", 42, 51)) - } - - it("should allow to call JS constructors with variadic parameters") { - import js.Dynamic.{newInstance => jsnew} - - js.eval(""" - var InteroperabilityTestVariadicCtor = function() { - var args = new Array(arguments.length); - for (var i = 0; i < arguments.length; i++) - args[i] = arguments[i]; - this.args = args; - }; - """) - - val elems = Seq[js.Any]("plop", 42, 51) - - val ctor = js.Dynamic.global.InteroperabilityTestVariadicCtor - expect(jsnew(ctor)().args).toEqual(js.Array()) - expect(jsnew(ctor)(3, 6).args).toEqual(js.Array(3, 6)) - expect(jsnew(ctor)("hello", false).args).toEqual(js.Array("hello", false)) - expect(jsnew(ctor)(elems: _*).args).toEqual(js.Array("plop", 42, 51)) - - import scala.scalajs.testsuite.compiler.{InteroperabilityTestVariadicCtor => C} - expect(new C().args).toEqual(js.Array()) - expect(new C(3, 6).args).toEqual(js.Array(3, 6)) - expect(new C("hello", false).args).toEqual(js.Array("hello", false)) - expect(new C(elems: _*).args).toEqual(js.Array("plop", 42, 51)) - } - - it("should acces top-level JS objects via Scala object inheriting from js.GlobalScope") { - js.eval(""" - var interoperabilityTestGlobalScopeValue = "7357"; - var interoperabilityTestGlobalScopeValueAsInt = function() { - return parseInt(interoperabilityTestGlobalScopeValue); - }; - """) - - // Use alias for convenience: see end of file for definition - val Global = InteroperabilityTestGlobalScope - - expect(Global.interoperabilityTestGlobalScopeValue).toEqual("7357") - expect(Global.interoperabilityTestGlobalScopeValueAsInt).toEqual(7357) - - Global.interoperabilityTestGlobalScopeValue = "42" - expect(Global.interoperabilityTestGlobalScopeValueAsInt).toEqual(42) - } - - it("should protect receiver of raw JS apply if it's a select - #804") { - val rawReceiver = js.eval(""" - var interoperabilityTestRawReceiver = { - member: 0xbad, - check: function(raw) { return this.member ? this.member : raw; } - }; - interoperabilityTestRawReceiver; - """).asInstanceOf[InteroperabilityTestRawReceiver] - - expect(rawReceiver.check(7357)).toEqual(7357) - - val check = rawReceiver.check - expect(check(0x600d)).toEqual(0x600d) - - class InScalaSelect(check: js.Function1[Int, Int]) { - @JSExport - val member: Int = 0xbad2 - def test(): Unit = expect(check(5894)).toEqual(5894) - } - new InScalaSelect(check).test() - } - - it("should properly handle default parameters") { - val obj = js.eval(""" - var interoperabilityTestDefaultParam = { - fun: function() { return arguments; } - }; - interoperabilityTestDefaultParam; - """).asInstanceOf[InteroperabilityTestDefaultParam] - - // Helpers - import js.Dynamic.{literal => args} - val undef = js.undefined - - expect(obj.simple(1)).toEqual(args(`0` = 1)) - expect(obj.simple(1,5)).toEqual(args(`0` = 1, `1` = 5)) - expect(obj.named(y = 5)).toEqual(args(`0` = undef, `1` = 5)) - expect(obj.named(x = 5)).toEqual(args(`0` = 5)) - expect(obj.multi()(1,2,3,4)()).toEqual(args( - `0` = undef, - `1` = 1, - `2` = 2, - `3` = 3, - `4` = 4)) - expect(obj.multi(2)()(5)).toEqual(args( - `0` = 2, - `1` = 5)) - } - - it("should properly handle default parameters for constructors - #791") { - js.eval(""" - var InteroperabilityTestCtor = function(x,y) { - this.values = Array(x || 6, y || 8) - } - """); - - expect(new InteroperabilityTestCtor().values).toEqual(js.Array(6,8)) - expect(new InteroperabilityTestCtor(y = 7).values).toEqual(js.Array(6,7)) - expect(new InteroperabilityTestCtor(3).values).toEqual(js.Array(3,8)) - expect(new InteroperabilityTestCtor(10, 2).values).toEqual(js.Array(10,2)) - } - - it("should generate exports for methods inherited from traits - #178") { - import js.annotation.JSExport - - trait Foo { - @JSExport - def theValue = 1 - } - class Bar extends Foo - - val x = (new Bar).asInstanceOf[js.Dynamic] - - // Call the export by using js.Dynamic - expect(x.theValue).toEqual(1) - } - - it("should allow constructor params that are vals/vars in facades - #1277") { - js.eval(""" - var InteroparabilityCtorInlineValue = function(x,y) { - this.x = x; - this.y = y; - } - """) - - val obj = new InteroparabilityCtorInlineValue(10, -1) - - expect(obj.x).toEqual(10) - expect(obj.y).toEqual(-1) - - obj.y = 100 - - expect(obj.x).toEqual(10) - expect(obj.y).toEqual(100) - } - - it("should unbox Chars received from calling a JS interop method") { - val obj = js.eval(""" - var obj = { - get: function() { return JSUtils().stringToChar('e'); } - }; - obj; - """).asInstanceOf[InteroperabilityTestCharResult] - - expect(obj.get().toInt).toEqual('e'.toInt) - } - - it("should box Chars given to a JS interop method") { - val obj = js.eval(""" - var obj = { - twice: function(c) { c = JSUtils().charToString(c); return c+c; } - }; - obj; - """).asInstanceOf[InteroperabilityTestCharParam] - - expect(obj.twice('x')).toEqual("xx") - } - - it("should unbox value classes received from calling a JS interop method") { - val obj = js.eval(""" - var obj = { - test: function(vc) { return vc; } - }; - obj; - """).asInstanceOf[InteroperabilityTestValueClassResult] - - val r = obj.test(new SomeValueClass(5)) - expect(r.i).toEqual(5) - } - - it("should box value classes given to a JS interop method") { - val obj = js.eval(""" - var obj = { - stringOf: function(vc) { return vc.toString(); } - }; - obj; - """).asInstanceOf[InteroperabilityTestValueClassParam] - - val vc = new SomeValueClass(7) - expect(obj.stringOf(vc)).toEqual("SomeValueClass(7)") - } - - it("should not unbox values received from JS method in statement position") { - /* To test this, we verify that a purposefully ill-typed facade does not - * throw a ClassCastException when called in statement position. - */ - val obj = js.eval(""" - var obj = { - test: function() { return 4; } // typed as String in the trait - }; - obj; - """).asInstanceOf[InteroperabilityTestNoUnboxResultInStatement] - obj.test() // in statement position, should not throw - if (JasmineTestFramework.hasTag("compliant-asinstanceof")) - expect(() => obj.test()).toThrow // in expression position, should throw - } - - when("compliant-asinstanceof"). - it("should protect conversions from JS types to Scala types") { - class Foo - val foo: Any = new Foo - - val invalidNumber: js.prim.Number = foo.asInstanceOf[js.prim.Number] - val nullNumber: js.prim.Number = null - expect(() => invalidNumber: Double).toThrow - expect(nullNumber: Double).toEqual(0) - - val invalidBoolean: js.prim.Boolean = foo.asInstanceOf[js.prim.Boolean] - val nullBoolean: js.prim.Boolean = null - expect(() => invalidBoolean: Boolean).toThrow - expect(nullBoolean: Boolean).toEqual(false) - - val invalidString: js.prim.String = foo.asInstanceOf[js.prim.String] - val nullString: js.prim.String = null - expect(() => invalidString: String).toThrow - expect(nullString: String).toBeNull - } - - when("compliant-asinstanceof"). - it("should asInstanceOf values received from calling a JS interop method") { - val obj = js.eval(""" - var obj = { - testChar: function() { return 5; }, - testInt: function() { return 6.4; }, - testShort: function() { return 60000; }, - testDouble: function() { return JSUtils().stringToChar('e'); }, - testString: function() { return {}; }, - testValueClass: function() { return "hello"; }, - testNormalClass: function() { return 45; }, - testAny: function() { return {}; } - }; - obj; - """).asInstanceOf[InteroperabilityTestAsInstanceOfResult] - - expect(() => obj.testChar()).toThrow - expect(() => obj.testInt()).toThrow - expect(() => obj.testShort()).toThrow - expect(() => obj.testDouble()).toThrow - expect(() => obj.testString()).toThrow - expect(() => obj.testValueClass()).toThrow - expect(() => obj.testNormalClass()).toThrow - expect(() => obj.testAny()).not.toThrow - } - - } - - trait InteroperabilityTestFieldEscape extends js.Object { - var `def`: Int = js.native - def `val`(): Int = js.native - def `val`(n: Int): Int = js.native - } - - trait InteroperabilityTestJSName extends js.Object { - @JSName("val") - def value(): Int = js.native - @JSName("val") - def value(n: Int): Int = js.native - } - - trait InteroperabilityTestProperty extends js.Object { - def a_=(x: Int): Unit = js.native - def a: Int = js.native - } - - trait InteroperabilityTestPropertyNamed extends js.Object { - @JSName("b") - def a_=(x: Int): Unit = js.native - @JSName("b") - def a: Int = js.native - def b: Int = js.native - } - - trait InteroperabilityTestJSBracketAccess extends js.Object { - @JSBracketAccess - def apply(index: Int): Int = js.native - @JSBracketAccess - def update(index: Int, v: Int): Unit = js.native - } - - trait InteroperabilityTestRawReceiver extends js.Object { - val check: js.Function1[Int, Int] = js.native - } - - /** Trait with different method signatures, all forwarded to the same - * JS raw function that returns the argument list for inspection - */ - trait InteroperabilityTestDefaultParam extends js.Object { - @JSName("fun") - def simple(x: Int, y: Int = 5): js.Any = js.native - @JSName("fun") - def named(x: Int = 1, y: Int = 1, z: Int = 1): js.Any = js.native - @JSName("fun") - def multi(x: Int = 1)(ys: Int*)(z: Int = 1): js.Any = js.native - } - - trait InteroperabilityTestCharResult extends js.Object { - def get(): Char = js.native - } - - trait InteroperabilityTestCharParam extends js.Object { - def twice(c: Char): String = js.native - } - - trait InteroperabilityTestValueClassResult extends js.Object { - def test(vc: Any): SomeValueClass = js.native - } - - trait InteroperabilityTestValueClassParam extends js.Object { - def stringOf(vc: SomeValueClass): String = js.native - } - - trait InteroperabilityTestNoUnboxResultInStatement extends js.Object { - def test(): String = js.native - } - - trait InteroperabilityTestAsInstanceOfResult extends js.Object { - def testChar(): Char = js.native - def testInt(): Int = js.native - def testShort(): Short = js.native - def testDouble(): Double = js.native - def testString(): String = js.native - def testValueClass(): SomeValueClass = js.native - def testNormalClass(): List[Int] = js.native - def testAny(): Any = js.native - } -} - -/* - * Helper classes, traits and objects defined here since they cannot be nested. - */ - -@JSName("InteroperabilityTestInherit.Pattern") -class InteroperabilityTestPattern protected () extends js.Object { - def this(pattern: String) = this() - val field: Int = js.native - def method(): String = js.native - def getConstructorParam(): String = js.native -} - -trait InteroperabilityTestTopLevel extends js.Object { - val value: String = js.native - def valueAsInt(): Int = js.native -} - -@JSName("InteroperabilityTestTopLevelObject") -object InteroperabilityTestTopLevel extends js.Object { - def apply(value: String): InteroperabilityTestTopLevel = js.native -} - -trait InteroperabilityTestVariadicMethod extends js.Object { - def foo(args: Any*): js.Array[Any] = js.native -} - -class InteroperabilityTestVariadicCtor(inargs: Any*) extends js.Object { - val args: js.Array[Any] = js.native -} - -object InteroperabilityTestGlobalScope extends js.GlobalScope { - var interoperabilityTestGlobalScopeValue: String = js.native - def interoperabilityTestGlobalScopeValueAsInt(): Int = js.native -} - -class SomeValueClass(val i: Int) extends AnyVal { - override def toString(): String = s"SomeValueClass($i)" -} - -class InteroperabilityTestCtor(x: Int = 5, y: Int = ???) extends js.Object { - def values: js.Array[Int] = js.native -} - -class InteroparabilityCtorInlineValue(val x: Int, var y: Int) extends js.Object diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/LongTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/LongTest.scala deleted file mode 100644 index 01d6f6e..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/LongTest.scala +++ /dev/null @@ -1,159 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.scalajs.js - -import org.scalajs.jasminetest.JasmineTest - -/** - * tests the compiler re-patching of native longs to - * scala.scalajs.runtime.Long - * see scala.scalajs.testsuite.jsinterop.RuntimeLongTest - * for a test of the implementation itself - */ -object LongTest extends JasmineTest { - - describe("JavaScript 64-bit long compatibility") { - it("should correctly handle literals") { - expect(5L + 100L == 105L).toBeTruthy - expect(2147483649L + 2L == 2147483651L).toBeTruthy - expect(-2147483648L * 4 == -8589934592L).toBeTruthy - expect(4503599627370510L * (-4) == -18014398509482040L).toBeTruthy - } - - it("should correctly dispatch unary ops on Longs") { - val x = 10L - expect(-x == -10L).toBeTruthy - val y = 5L - expect(-y == -5L).toBeTruthy - expect(+y == 5L).toBeTruthy - expect(~y == -6L).toBeTruthy - } - - it("should correctly dispatch binary ops on Longs") { - expect(5L * 5F == 25F).toBeTruthy - expect(5L % 4F == 1F).toBeTruthy - expect(5F * 4L == 20F).toBeTruthy - } - - it("should support shifts with Longs - #622") { - def l(x: Long): Long = x - def i(x: Int): Int = x - - expect(l(-7L) >>> 100L == 268435455L).toBeTruthy - expect(l(-7L) >> 100L == -1L).toBeTruthy - expect(l(-7L) >> 100 == -1L).toBeTruthy - expect(l(-7L) >>> 100 == 268435455).toBeTruthy - expect(l(-7L) << 100L == -481036337152L).toBeTruthy - expect(l(-7L) << 100 == -481036337152L).toBeTruthy - expect(l(7L) << 100L == 481036337152L).toBeTruthy - expect(l(8L) << 100L == 549755813888L).toBeTruthy - expect(l(-7L) >>> 4 == 1152921504606846975L).toBeTruthy - - expect(i(7) << 100).toEqual(112) - expect(i(-7) >> 100).toEqual(-1) - expect(i(-7) >>> 100).toEqual(268435455) - expect(i(-65) >> 100).toEqual(-5) - expect(i(-65) >> 4).toEqual(-5) - } - - it("primitives should convert to Long") { - // Byte - expect(112.toByte.toLong == 112L).toBeTruthy - // Short - expect((-10).toShort.toLong == -10L).toBeTruthy - // Char - expect('A'.toLong == 65L).toBeTruthy - // Int - expect(5.toLong == 5L).toBeTruthy - // Long - expect(10L.toLong == 10L).toBeTruthy - // Float - expect(100000.6f.toLong == 100000L).toBeTruthy - // Double - expect(100000.6.toLong == 100000L).toBeTruthy - } - - it("should support hashCode()") { - expect(0L .hashCode()).toEqual(0) - expect(55L .hashCode()).toEqual(55) - expect((-12L) .hashCode()).toEqual(11) - expect(10006548L .hashCode()).toEqual(10006548) - expect((-1098748L).hashCode()).toEqual(1098747) - - expect(613354684553L .hashCode()).toEqual(-825638905) - expect(9863155567412L .hashCode()).toEqual(1910653900) - expect(3632147899696541255L.hashCode()).toEqual(1735398658) - expect(7632147899696541255L.hashCode()).toEqual(-1689438124) - } - - it("should support ##") { - expect(0L .##).toEqual(0) - expect(55L .##).toEqual(55) - expect((-12L) .##).toEqual(-12) - expect(10006548L .##).toEqual(10006548) - expect((-1098748L).##).toEqual(-1098748) - - expect(9863155567412L .##).toEqual(1910653900) - expect(3632147899696541255L.##).toEqual(1735398658) - - // These two (correctly) give different results on 2.10 and 2.11 - //expect(613354684553L .##).toEqual(-825638905) // xx06 on 2.10 - //expect(7632147899696541255L.##).toEqual(-1689438124) // xx25 on 2.10 - } - - it("should correctly concat to string") { - val x = 20L - expect("asdf" + 5L + x + "hello").toEqual("asdf520hello") - expect(x + "hello").toEqual("20hello") - } - - it("string should convert to Long") { - expect("45678901234567890".toLong == 45678901234567890L).toBeTruthy - } - - it("should convert from and to js.prim.Number") { - val x = 5: js.prim.Number - expect((5L: js.prim.Number) == x).toBeTruthy - expect(x.toLong == 5L).toBeTruthy - } - - it("should correctly implement is/asInstanceOf Longs") { - val dyn: Any = 5L - val stat: Long = 5L - - expect(stat.asInstanceOf[Long]).toEqual(5L) - // models current scala behavior. See SI-1448 - expect(stat.asInstanceOf[Int]).toEqual(5) - - expect(stat.isInstanceOf[Long]).toBeTruthy - expect(stat.isInstanceOf[Int]).toBeFalsy - - expect(dyn.asInstanceOf[Long]).toEqual(5L) - - expect(dyn.isInstanceOf[Long]).toBeTruthy - expect(dyn.isInstanceOf[Int]).toBeFalsy - } - - when("compliant-asinstanceof"). - it("should correctly implement asInstanceOf Longs (negative)") { - val dyn: Any = 5L - - expect(() => dyn.asInstanceOf[Int]).toThrow - } - - it("should correctly compare to other numeric types") { - expect(5L == 5).toBeTruthy - expect(5 == 5L).toBeTruthy - expect(4 == 5l).toBeFalsy - expect('A' == 65L).toBeTruthy - } - } - -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/OptimizerTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/OptimizerTest.scala deleted file mode 100644 index 986c25a..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/OptimizerTest.scala +++ /dev/null @@ -1,43 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest - -object OptimizerTest extends JasmineTest { - - describe("Inlineable classes") { - - it("must update fields of `this` in the computation of other fields - #1153") { - val foo = new InlineClassDependentFields(5) - expect(foo.x).toEqual(5) - expect(foo.b).toBeTruthy - expect(foo.y).toEqual(11) - } - - it("must not break code that assigns `this` to a field") { - val foo = new InlineClassThisAlias(5) - expect(foo.z).toEqual(5) - } - - } - - @inline - class InlineClassDependentFields(val x: Int) { - val b = x > 3 - val y = if (b) x + 6 else x-2 - } - - @inline - class InlineClassThisAlias(val x: Int) { - val t = this - val y = x - val z = t.y - } - -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectionTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectionTest.scala deleted file mode 100644 index 3e1d7a2..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectionTest.scala +++ /dev/null @@ -1,69 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.language.implicitConversions - -import scala.scalajs.js - -import org.scalajs.jasminetest.JasmineTest - -/** Tests the little reflection we support */ -object ReflectionTest extends JasmineTest { - - describe("Scala.js Reflection (through java.lang.Class)") { - it("should append $ to class name of objects") { - expect(TestObject.getClass.getName).toEqual( - "scala.scalajs.testsuite.compiler.ReflectionTest$TestObject$") - } - - it("should support isInstance") { - class A - class B extends A - val b = new B - expect(classOf[A].isInstance(b)).toBeTruthy - expect(classOf[A].isInstance("hello")).toBeFalsy - } - - it("getClass() for normal types") { - class Foo { - def bar() = super.getClass() - } - val foo = new Foo - expect(foo.getClass() eq classOf[Foo]).toBeTruthy - expect(foo.bar() eq classOf[Foo]).toBeTruthy - } - - it("getClass() for anti-boxed primitive types") { - implicit def classAsAny(c: java.lang.Class[_]): js.Any = - c.asInstanceOf[js.Any] - expect((false: Any).getClass).toBe(classOf[java.lang.Boolean]) - expect(('a': Any).getClass).toBe(classOf[java.lang.Character]) - expect((1.toByte: Any).getClass).toBe(classOf[java.lang.Byte]) - expect((1.toShort: Any).getClass).toBe(classOf[java.lang.Byte]) - expect((1: Any).getClass).toBe(classOf[java.lang.Byte]) - expect((1L: Any).getClass).toBe(classOf[java.lang.Long]) - expect((1.5f: Any).getClass).toBe(classOf[java.lang.Float]) - expect((1.5: Any).getClass).toBe(classOf[java.lang.Float]) - expect(((): Any).getClass).toBe(classOf[scala.runtime.BoxedUnit]) - } - - it("Class.isAssignableFrom should mimic runtime type tests behavior - #879") { - expect(classOf[Short].isAssignableFrom(classOf[Byte])).toBeTruthy - expect(classOf[Byte].isAssignableFrom(classOf[Byte])).toBeTruthy - expect(classOf[Byte].isAssignableFrom(classOf[Short])).toBeFalsy - expect(classOf[Int].isAssignableFrom(classOf[Byte])).toBeTruthy - expect(classOf[Double].isAssignableFrom(classOf[Int])).toBeTruthy - expect(classOf[Int].isAssignableFrom(classOf[Double])).toBeFalsy - expect(classOf[Long].isAssignableFrom(classOf[Int])).toBeFalsy - } - } - - object TestObject - -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectiveCallTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectiveCallTest.scala deleted file mode 100644 index 6020a5f..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ReflectiveCallTest.scala +++ /dev/null @@ -1,330 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.scalajs.js -import org.scalajs.jasminetest.JasmineTest - -import language.reflectiveCalls - -import java.lang.{Float => JFloat, Double => JDouble} - -object ReflectiveCallTest extends JasmineTest { - - describe("Reflective Calls") { - it("should allow subtyping in return types") { - class A { def x = 1 } - class B extends A { override def x = 2 } - - object Generator { - def generate(): B = new B - } - - def f(x: { def generate(): A }) = x.generate - - expect(f(Generator).x).toEqual(2) - } - - it("should allow this.type in return types") { - type valueType = { def value: this.type } - def f(x: valueType) = x.value - - class StringValue(x: String) { - def value: this.type = this - override def toString = s"StringValue($x)" - } - - expect(f(new StringValue("foo")).toString).toEqual("StringValue(foo)") - } - - it("should allow generic return types") { - case class Tata(name: String) - - object Rec { - def e(x: Tata) = new Tata("iei") - } - - def m[T](r: Object { def e(x: Tata): T}) = - r.e(new Tata("foo")) - - expect(m[Tata](Rec).toString).toEqual("Tata(iei)") - } - - it("should work with unary methods on primitive types") { - def fInt(x: Any { def unary_- :Int }) = -x - expect(fInt(1.toByte)).toEqual(-1) - expect(fInt(1.toShort)).toEqual(-1) - expect(fInt(1.toChar)).toEqual(-1) - expect(fInt(1)).toEqual(-1) - - def fLong(x: Any { def unary_- :Long }) = -x - expect(fLong(1L)).toEqual(-1L) - - def fFloat(x: Any { def unary_- :Float}) = -x - expect(fFloat(1.5f)).toEqual(-1.5f) - - def fDouble(x: Any { def unary_- :Double }) = -x - expect(fDouble(1.5)).toEqual(-1.5) - - def fBoolean(x: Any { def unary_! :Boolean }) = !x - expect(fBoolean(false)).toBeTruthy - expect(fBoolean(true)).toBeFalsy - } - - it("should work with binary operators on primitive types") { - def fLong(x: Any { def +(x: Long): Long }) = x + 5L - expect(fLong(5.toByte)).toEqual(10L) - expect(fLong(10.toShort)).toEqual(15L) - expect(fLong(10.toChar)).toEqual(15L) - expect(fLong(-1)).toEqual(4L) - expect(fLong(17L)).toEqual(22L) - - def fInt(x: Any { def /(x: Int): Int }) = x / 7 - expect(fInt(65.toByte)).toEqual(9) - expect(fInt(15.toShort)).toEqual(2) - expect(fInt(25.toChar)).toEqual(3) - expect(fInt(-40)).toEqual(-5) - - def fShort(x: Any { def +(x: Short): Int }) = x + 6.toShort - expect(fShort(65.toByte)).toEqual(71) - expect(fShort(15.toShort)).toEqual(21) - expect(fShort(25.toChar)).toEqual(31) - expect(fShort(-40)).toEqual(-34) - - def fFloat(x: Any { def %(x: Float): Float}) = x % 3.4f - expect(fFloat(5.5f)).toEqual(2.1f) - - def fDouble(x: Any { def /(x: Double): Double }) = x / 1.4 - expect(fDouble(-1.5)).toEqual(-1.0714285714285714) - - def fBoolean(x: Any { def &&(x: Boolean): Boolean }) = x && true - expect(fBoolean(false)).toBeFalsy - expect(fBoolean(true)).toBeTruthy - } - - it("should work with equality operators on primitive types") { - def fNum(obj: Any { def ==(x: Int): Boolean }) = obj == 5 - expect(fNum(5.toByte)).toBeTruthy - expect(fNum(6.toByte)).toBeFalsy - expect(fNum(5.toShort)).toBeTruthy - expect(fNum(7.toShort)).toBeFalsy - expect(fNum(5.toChar)).toBeTruthy - expect(fNum('r')).toBeFalsy - expect(fNum(5)).toBeTruthy - expect(fNum(-4)).toBeFalsy - expect(fNum(5L)).toBeTruthy - expect(fNum(400L)).toBeFalsy - expect(fNum(5.0f)).toBeTruthy - expect(fNum(5.6f)).toBeFalsy - expect(fNum(5.0)).toBeTruthy - expect(fNum(7.9)).toBeFalsy - def fBool(obj: Any { def ==(x: Boolean): Boolean }) = obj == false - expect(fBool(true)).toBeFalsy - expect(fBool(false)).toBeTruthy - - def fNumN(obj: Any { def !=(x: Int): Boolean }) = obj != 5 - expect(fNumN(5.toByte)).toBeFalsy - expect(fNumN(6.toByte)).toBeTruthy - expect(fNumN(5.toShort)).toBeFalsy - expect(fNumN(7.toShort)).toBeTruthy - expect(fNumN(5.toChar)).toBeFalsy - expect(fNumN('r')).toBeTruthy - expect(fNumN(5)).toBeFalsy - expect(fNumN(-4)).toBeTruthy - expect(fNumN(5L)).toBeFalsy - expect(fNumN(400L)).toBeTruthy - expect(fNumN(5.0f)).toBeFalsy - expect(fNumN(5.6f)).toBeTruthy - expect(fNumN(5.0)).toBeFalsy - expect(fNumN(7.9)).toBeTruthy - def fBoolN(obj: Any { def !=(x: Boolean): Boolean }) = obj != false - expect(fBoolN(true)).toBeTruthy - expect(fBoolN(false)).toBeFalsy - - } - - it("should work with Arrays") { - type UPD = { def update(i: Int, x: String): Unit } - type APL = { def apply(i: Int): String } - type LEN = { def length: Int } - type CLONE = Any { def clone(): Object } - def upd(obj: UPD, i: Int, x: String) = obj.update(i,x) - def apl(obj: APL, i: Int) = obj.apply(i) - def len(obj: LEN) = obj.length - def clone(obj: CLONE) = obj.clone - - val x = Array("asdf","foo","bar") - val y = clone(x).asInstanceOf[Array[String]] - - expect(len(x)).toEqual(3) - expect(apl(x,0)).toEqual("asdf") - upd(x,1,"2foo") - expect(x(1)).toEqual("2foo") - expect(y(1)).toEqual("foo") - } - - it("should work with Arrays of primitive values") { - type UPD = { def update(i: Int, x: Int): Unit } - type APL = { def apply(i: Int): Int} - type LEN = { def length: Int } - type CLONE = Any { def clone(): Object } - def upd(obj: UPD, i: Int, x: Int) = obj.update(i,x) - def apl(obj: APL, i: Int) = obj.apply(i) - def len(obj: LEN) = obj.length - def clone(obj: CLONE) = obj.clone - - val x = Array(5,2,8) - val y = clone(x).asInstanceOf[Array[Int]] - - expect(len(x)).toEqual(3) - expect(apl(x,0)).toEqual(5) - upd(x,1,1000) - expect(x(1)).toEqual(1000) - expect(y(1)).toEqual(2) - } - - it("should work with Strings") { - def get(obj: { def codePointAt(str: Int): Int }) = - obj.codePointAt(1) - expect(get("Hi")).toEqual('i'.toInt) - - def sub(x: { def substring(x: Int): AnyRef }) = x.substring(5) - expect(sub("asdfasdfasdf") == "sdfasdf").toBeTruthy - - type LEN_A = { def length: Any } - def lenA(x: LEN_A) = x.length - expect(lenA("asdf") == 4).toBeTruthy - } - - it("should properly generate forwarders for inherited methods") { - trait A { - def foo: Int - } - - abstract class B extends A - - class C extends B { - def foo = 1 - } - - def call(x: { def foo: Int }) = x.foo - - expect(call(new C)).toEqual(1) - } - - it("should work on java.lang.Object.{ notify, notifyAll } - #303") { - type ObjNotifyLike = Any { - def notify(): Unit - def notifyAll(): Unit - } - def objNotifyTest(obj: ObjNotifyLike) = { - obj.notify() - obj.notifyAll() - 1 - } - - class A - - expect(objNotifyTest(new A())).toEqual(1) - } - - it("should work on java.lang.Object.clone - #303") { - type ObjCloneLike = Any { def clone(): AnyRef } - def objCloneTest(obj: ObjCloneLike) = obj.clone() - - class B(val x: Int) extends Cloneable { - override def clone() = super.clone - } - - val b = new B(1) - val bClone = objCloneTest(b).asInstanceOf[B] - - expect(b eq bClone).toBeFalsy - expect(bClone.x).toEqual(1) - } - - it("should work on scala.AnyRef.{ eq, ne } - #303") { - type ObjEqLike = Any { - def eq(that: AnyRef): Boolean - def ne(that: AnyRef): Boolean - } - def objEqTest(obj: ObjEqLike, that: AnyRef) = obj eq that - def objNeTest(obj: ObjEqLike, that: AnyRef) = obj ne that - - class A - - val a1 = new A - val a2 = new A - - expect(objEqTest(a1,a2)).toBeFalsy - expect(objEqTest(a1,a1)).toBeTruthy - - expect(objNeTest(a1,a2)).toBeTruthy - expect(objNeTest(a1,a1)).toBeFalsy - } - - it("should work on java.lang.{Float,Double}.{isNaN,isInfinite}") { - type FloatingNumberLike = Any { - def isNaN(): Boolean - def isInfinite(): Boolean - } - def test(x: FloatingNumberLike, isNaN: Boolean, - isInfinite: Boolean) = { - expect(x.isNaN()).toEqual(isNaN) - expect(x.isInfinite()).toEqual(isInfinite) - } - - test(new JFloat(Float.NaN), true, false) - test(new JFloat(Float.PositiveInfinity), false, true) - test(new JFloat(Float.NegativeInfinity), false, true) - test(new JFloat(54.67), false, false) - - test(new JDouble(Double.NaN), true, false) - test(new JDouble(Double.PositiveInfinity), false, true) - test(new JDouble(Double.NegativeInfinity), false, true) - test(new JDouble(54.67), false, false) - } - - it("should work with default arguments - #390") { - def pimpIt(a: Int) = new { - def foo(b: Int, c: Int = 1): Int = a + b + c - } - - expect(pimpIt(1).foo(2)).toEqual(4) - expect(pimpIt(2).foo(2,4)).toEqual(8) - } - - it("should unbox all types of arguments - #899") { - class Foo { - def makeInt: Int = 5 - def testInt(x: Int): Unit = expect(x).toEqual(5) - - def makeRef: Option[String] = Some("hi") - def testRef(x: Option[String]): Unit = expect(x == Some("hi")).toBeTruthy - } - - /* Note: we should also test with value classes, except that Scala itself - * does not support value classes as parameters or result type of - * methods in structural types. - */ - - def test(foo: { - def makeInt: Int - def testInt(x: Int): Unit - def makeRef: Option[String] - def testRef(x: Option[String]): Unit - }): Unit = { - foo.testInt(foo.makeInt) - foo.testRef(foo.makeRef) - } - - test(new Foo) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RegressionTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RegressionTest.scala deleted file mode 100644 index 19cceb2..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RegressionTest.scala +++ /dev/null @@ -1,287 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.annotation.tailrec - -import scala.scalajs.js -import org.scalajs.jasminetest.JasmineTest - -object RegressionTest extends JasmineTest { - - class Bug218Foo[T](val x: T) extends AnyVal - - describe("Scala.js compiler regression tests") { - - it("Wrong division conversion (7 / 2.0) - #18") { - val div = 7 / 2.0 - expect(div).toEqual(3.5) - expect(div.getClass.getName).toEqual("double") - - val mod = 7 % 2.0 - expect(mod).toEqual(1.0) - expect(mod.getClass.getName).toEqual("double") - } - - it("js.prim.String + js.prim.String is ambiguous - #20") { - val a: js.prim.String = "a" - val b: js.prim.String = "b" - val c: js.prim.String = a + b - expect(c).toEqual("ab") - } - - it("Abort with some pattern match guards - #22") { - object PatternMatchGuards { - def go(f: Int => Int) = f(1) - def main(): Unit = { - go { - case x if false => x - } - } - } - // Nothing to check - } - - it("Bad encoding for characters spanning 2 UTF-16 chars - #23") { - val str = "A∀\uD835\uDCAB" - var s: String = "" - for (c <- str) { - val code: Int = c - s = s + code + " " - } - expect(s).toEqual("65 8704 55349 56491 ") - } - - it("String concatenation with null - #26") { - val x: Object = null - expect(x + "check").toEqual("nullcheck") - } - - class Bug66A(s: String, e: Object) { - def this(e: Object) = this("", e) - def this(s: String) = this(s, "") - } - class Bug66B(s: String, e: Object) extends Bug66A(s) - - it("should emit static calls when forwarding to another constructor - #66") { - new Bug66B("", "") - } - - it("should not swallow Unit expressions when converting to js.prim.Undefined - #83") { - var effectHappened = false - def doEffect(): Unit = effectHappened = true - def f(): js.prim.Undefined = doEffect() - f() - expect(effectHappened).toBeTruthy - } - - it("should correctly call subSequence on non-string CharSequences - #55") { - val arr: CharSequence = Array('a','b','c','d') - val ss = arr.subSequence(2,3) - expect(ss.length()).toEqual(1) - expect(ss.charAt(0)).toEqual('c') - } - - it("should correctly concat primitive values to strings - #113") { - expect(4 + "foo").toEqual("4foo") - expect('a' + "foo").toEqual("afoo") - } - - it("should resolve overloads on scala.Function.apply when converting to js.Function - #125") { - class Fct extends Function1[Int,Any] { - def apply(n: Int) = n - } - - val scalaFunction = new Fct - val jsFunction: js.Any = scalaFunction - val thisFunction: js.ThisFunction = scalaFunction - } - - it("should correctly dispatch calls on private functions - #165") { - class A { - private def x = 1 - def value = x - } - class B extends A { - private def x = 2 - } - expect(new B().value).toEqual(1) - } - - it("should correctly mangle JavaScript reserved identifiers - #153") { - // Class name - class break { - // class variable - var continue = 1 - // method name - def switch = { - // local name - val default = 2 - default - } - } - trait Foo { - // static member (through mixin) - def function = 3 - } - - val x = new break with Foo - expect(x.continue).toEqual(1) - expect(x.switch).toEqual(2) - expect(x.function).toEqual(3) - } - - it("should correctly mangle identifiers starting with a digit - #153") { - // Class name - class `0` { - // class variable - var `1` = 1 - // method name - def `2` = { - // local name - val `22` = 2 - `22` - } - } - trait Foo { - // static member (through mixin) - def `3` = 3 - } - - val x = new `0` with Foo - expect(x.`1`).toEqual(1) - expect(x.`2`).toEqual(2) - expect(x.`3`).toEqual(3) - } - - it("should reserve `eval` and `arguments` - #743") { - val eval = 5 - expect(eval).toEqual(5) - val arguments = "hello" - expect(arguments).toEqual("hello") - } - - it("should support class literals for existential value types - #218") { - expect(scala.reflect.classTag[Bug218Foo[_]].toString).toEqual( - "scala.scalajs.testsuite.compiler.RegressionTest$Bug218Foo") - } - - it("should support Buffer - #268") { - val a = scala.collection.mutable.Buffer.empty[Int] - a.insert(0, 0) - a.remove(0) - for (i <- 0 to 10) { - a.insert(a.length / 2, i) - } - expect(a.mkString(", ")).toEqual("1, 3, 5, 7, 9, 10, 8, 6, 4, 2, 0") - } - - it("should not call equals when comparing with a literal null - #362") { - class A { override def equals(x: Any) = !(this == null) } - - val x = new A - val y = new A - - // If the null comparisons actually call equals, the following two will - // cause infinite recursion - expect(x == y).toBeTruthy - expect(y == x).toBeTruthy - } - - it("should unbox null to the zero of types - #674") { - class Box[A] { - var value: A = _ - } - def zero[A]: A = new Box[A].value - - /* Note: the same shape of test for Unit does not work, but it seems to - * be a problem in scalac because it does not work on the JVM either. - */ - - val bool = zero[Boolean] - expect((bool: Any).isInstanceOf[Boolean]).toBeTruthy - expect(bool == false).toBeTruthy - - val char = zero[Char] - expect((char: Any).isInstanceOf[Char]).toBeTruthy - expect(char == '\u0000').toBeTruthy - - val byte = zero[Byte] - expect((byte: Any).isInstanceOf[Byte]).toBeTruthy - expect(byte == 0.toByte).toBeTruthy - - val short = zero[Short] - expect((short: Any).isInstanceOf[Short]).toBeTruthy - expect(short == 0.toShort).toBeTruthy - - val int = zero[Int] - expect((int: Any).isInstanceOf[Int]).toBeTruthy - expect(int == 0).toBeTruthy - - val long = zero[Long] - expect((long: Any).isInstanceOf[Long]).toBeTruthy - expect(long == 0L).toBeTruthy - - val float = zero[Float] - expect((float: Any).isInstanceOf[Float]).toBeTruthy - expect(float == 0.0f).toBeTruthy - - val double = zero[Double] - expect((double: Any).isInstanceOf[Double]).toBeTruthy - expect(double == 0.0).toBeTruthy - - val ref = zero[AnyRef] - expect(ref == null).toBeTruthy - } - - it("Param defs in tailrec methods should be considered mutable - #825") { - @tailrec - def foo(x: Int, y: Int): Unit = { - if (x < y) foo(y, x) - else { - expect(x).toEqual(4) - expect(y).toEqual(2) - } - } - foo(2, 4) - } - - it("null.synchronized should throw - #874") { - expect(() => null.synchronized(5)).toThrow - } - - it("x.synchronized should preserve side-effects of x") { - var c = 0 - def x = { c += 1; this } - expect(x.synchronized(5)).toEqual(5) - expect(c).toEqual(1) - } - - it("IR checker should allow Apply/Select on NullType and NothingType - #1123") { - def giveMeANull(): Null = null - expect(() => (giveMeANull(): StringBuilder).append(5)).toThrow - expect(() => (giveMeANull(): scala.runtime.IntRef).elem).toThrow - - def giveMeANothing(): Nothing = sys.error("boom") - expect(() => (giveMeANothing(): StringBuilder).append(5)).toThrow - expect(() => (giveMeANothing(): scala.runtime.IntRef).elem).toThrow - } - - it("should not put bad flags on caseaccessor export forwarders - #1191") { - // This test used to choke patmat - - @scala.scalajs.js.annotation.JSExportAll - case class T(one: Int, two: Int) - - val T(a, b) = T(1, 2) - - expect(a).toEqual(1) - expect(b).toEqual(2) - } - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RuntimeTypesTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RuntimeTypesTest.scala deleted file mode 100644 index b1a32c4..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/RuntimeTypesTest.scala +++ /dev/null @@ -1,77 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import scala.scalajs.js -import org.scalajs.jasminetest.JasmineTest - -import scala.util.{ Try, Failure } - -object RuntimeTypesTest extends JasmineTest { - - describe("scala.Nothing") { - - when("compliant-asinstanceof"). - it("casts to scala.Nothing should fail") { - val msg = Try("a".asInstanceOf[Nothing]) match { - case Failure(thr: ClassCastException) => thr.getMessage - case _ => "not failed" - } - expect(msg).toEqual("a is not an instance of scala.runtime.Nothing$") - } - - it("Array[Nothing] should be allowed to exists and be castable") { - val arr = Array[Nothing]() - arr.asInstanceOf[Array[Nothing]] - } - - it("Array[Array[Nothing]], too") { - val arr = Array[Array[Nothing]]() - arr.asInstanceOf[Array[Array[Nothing]]] - // This apparently works too... Dunno why - arr.asInstanceOf[Array[Nothing]] - } - - } - - describe("scala.Null") { - - when("compliant-asinstanceof"). - it("casts to scala.Null should fail for everything else but null") { - val msg = Try("a".asInstanceOf[Null]) match { - case Failure(thr: ClassCastException) => thr.getMessage - case _ => "not failed" - } - expect(msg).toEqual("a is not an instance of scala.runtime.Null$") - } - - it("classTag of scala.Null should contain proper Class[_] - #297") { - val tag = scala.reflect.classTag[Null] - expect(tag.runtimeClass != null).toBeTruthy - expect(tag.runtimeClass.getName).toEqual("scala.runtime.Null$") - } - - it("casts to scala.Null should succeed on null") { - null.asInstanceOf[Null] - } - - it("Array[Null] should be allowed to exist and be castable") { - val arr = Array.fill[Null](5)(null) - arr.asInstanceOf[Array[Null]] - } - - it("Array[Array[Null]] too") { - val arr = Array.fill[Null](5,5)(null) - arr.asInstanceOf[Array[Array[Null]]] - // This apparently works too... Dunno why - arr.asInstanceOf[Array[Null]] - } - - } - -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ShortTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ShortTest.scala deleted file mode 100644 index 10746ba..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/ShortTest.scala +++ /dev/null @@ -1,38 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js - -object ShortTest extends JasmineTest { - - describe("Short primitives") { - - it("should always be in their range") { - def test(x: Int, y: Short): Unit = - expect(x.toShort).toEqual(y) - - test(0, 0) - test(-500, -500) - test(-90000, -24464) - test(123456789, -13035) - test(-40000, 25536) - test(65536, 0) - test(32768, -32768) - - def testC(x: Char, y: Short): Unit = - expect(x.toShort).toEqual(y) - - testC(-1.toChar, -1) - testC(200.toChar, 200) - testC(60000.toChar, -5536) - } - - } -} diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/UnitTest.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/UnitTest.scala deleted file mode 100644 index 8e2be64..0000000 --- a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/compiler/UnitTest.scala +++ /dev/null @@ -1,47 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ __ ____ Scala.js Test Suite ** -** / __/ __// _ | / / / _ | __ / // __/ (c) 2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** -** /____/\___/_/ |_/____/_/ | |__/ /____/ ** -** |/____/ ** -\* */ -package scala.scalajs.testsuite.compiler - -import org.scalajs.jasminetest.JasmineTest -import scala.scalajs.js - -object UnitTest extends JasmineTest { - - describe("Unit primitive") { - - it("should have toString()") { - expect(().toString()).toEqual("undefined") - expect(((): Any).toString()).toEqual("undefined") - } - - it("should have hashCode()") { - expect(().hashCode()).toEqual(0) - expect(((): Any).hashCode()).toEqual(0) - expect(().##).toEqual(0) - } - - it("should equal itself") { - expect(().equals(())).toBeTruthy - expect(((): Any).equals((): Any)).toBeTruthy - } - - it("should not equal other values") { - def testAgainst(v: Any): Unit = { - expect(().equals(v)).toBeFalsy - expect(((): Any).equals(v)).toBeFalsy - } - - testAgainst(0) - testAgainst(1) - testAgainst(null) - testAgainst(false) - testAgainst("") - } - - } -} |