| Index: tests/html/js_typed_interop_type_test.dart
|
| diff --git a/tests/html/js_typed_interop_type_test.dart b/tests/html/js_typed_interop_type_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b8ba7d220d58d74e4d87962edabca0c7c7ab2d39
|
| --- /dev/null
|
| +++ b/tests/html/js_typed_interop_type_test.dart
|
| @@ -0,0 +1,157 @@
|
| +import 'dart:html';
|
| +import 'package:js/js.dart';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +@JS()
|
| +class A {
|
| + get foo;
|
| +
|
| + external A(var foo);
|
| +}
|
| +
|
| +@JS()
|
| +class B {
|
| + get foo;
|
| +
|
| + external B(var foo);
|
| +}
|
| +
|
| +@JS()
|
| +@anonymous
|
| +class C {
|
| + final foo;
|
| +
|
| + external factory C({foo});
|
| +}
|
| +
|
| +@JS()
|
| +@anonymous
|
| +class D {
|
| + final foo;
|
| +
|
| + external factory D({foo});
|
| +}
|
| +
|
| +class E {
|
| + final foo;
|
| +
|
| + E(this.foo);
|
| +}
|
| +
|
| +class F {
|
| + final foo;
|
| +
|
| + F(this.foo);
|
| +}
|
| +
|
| +@NoInline()
|
| +testA(A o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +
|
| +@NoInline()
|
| +testB(B o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +
|
| +@NoInline()
|
| +testC(C o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +
|
| +@NoInline()
|
| +testD(D o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +@NoInline()
|
| +testE(E o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +@NoInline()
|
| +testF(F o) {
|
| + return o.foo;
|
| +}
|
| +
|
| +
|
| +_injectJs() {
|
| + document.body.append(new ScriptElement()
|
| + ..type = 'text/javascript'
|
| + ..innerHtml = r"""
|
| +function A(foo) {
|
| + this.foo = foo;
|
| +}
|
| +
|
| +function B(foo) {
|
| + this.foo = foo;
|
| +}
|
| +""");
|
| +}
|
| +
|
| +void expectValueOrTypeError(f(), value) {
|
| + try {
|
| + String i = 0; // Test for checked mode.
|
| + Expect.equals(f(), value);
|
| + } on TypeError catch (error) {
|
| + Expect.throws(f, (ex) => ex is TypeError);
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + _injectJs();
|
| +
|
| + var a = new A(1);
|
| + var b = new B(2);
|
| + var c = new C(foo: 3);
|
| + var d = new D(foo: 4);
|
| + var e = new E(5);
|
| + var f = new F(6);
|
| +
|
| + Expect.equals(testA(a), 1);
|
| + Expect.equals(testA(b), 2);
|
| + Expect.equals(testA(c), 3);
|
| + Expect.equals(testA(d), 4);
|
| + expectValueOrTypeError(() => testA(e), 5);
|
| + expectValueOrTypeError(() => testA(f), 6);
|
| +
|
| + Expect.equals(testB(a), 1);
|
| + Expect.equals(testB(b), 2);
|
| + Expect.equals(testB(c), 3);
|
| + Expect.equals(testB(d), 4);
|
| + expectValueOrTypeError(() => testB(e), 5);
|
| + expectValueOrTypeError(() => testB(f), 6);
|
| +
|
| + Expect.equals(testC(a), 1);
|
| + Expect.equals(testC(b), 2);
|
| + Expect.equals(testC(c), 3);
|
| + Expect.equals(testC(d), 4);
|
| + expectValueOrTypeError(() => testC(e), 5);
|
| + expectValueOrTypeError(() => testC(f), 6);
|
| +
|
| + Expect.equals(testD(a), 1);
|
| + Expect.equals(testD(b), 2);
|
| + Expect.equals(testD(c), 3);
|
| + Expect.equals(testD(d), 4);
|
| + expectValueOrTypeError(() => testD(e), 5);
|
| + expectValueOrTypeError(() => testD(f), 6);
|
| +
|
| + expectValueOrTypeError(() => testE(a), 1);
|
| + expectValueOrTypeError(() => testE(b), 2);
|
| + expectValueOrTypeError(() => testE(c), 3);
|
| + expectValueOrTypeError(() => testE(d), 4);
|
| + Expect.equals(testE(e), 5);
|
| + expectValueOrTypeError(() => testE(f), 6);
|
| +
|
| + expectValueOrTypeError(() => testF(a), 1);
|
| + expectValueOrTypeError(() => testF(b), 2);
|
| + expectValueOrTypeError(() => testF(c), 3);
|
| + expectValueOrTypeError(() => testF(d), 4);
|
| + expectValueOrTypeError(() => testF(e), 5);
|
| + Expect.equals(testF(f), 6);
|
| +}
|
| +
|
| +
|
|
|