Index: tests/html/js_typed_interop_type3_test.dart |
diff --git a/tests/html/js_typed_interop_type3_test.dart b/tests/html/js_typed_interop_type3_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f20bc2077695787b79d12b5ee25fd0457d66b627 |
--- /dev/null |
+++ b/tests/html/js_typed_interop_type3_test.dart |
@@ -0,0 +1,87 @@ |
+import 'dart:html'; |
+import 'package:js/js.dart'; |
+import 'package:expect/expect.dart'; |
+ |
+@JS() |
+class A { |
+ external get foo; |
+ |
+ external A(var foo); |
+} |
+ |
+@JS() |
+@anonymous |
+class C { |
+ final foo; |
+ |
+ external factory C({foo}); |
+} |
+ |
+@JS() |
+@anonymous |
+class D { |
+ final foo; |
+ |
+ external factory D({foo}); |
+} |
+ |
+class F { |
+ final foo; |
+ |
+ F(this.foo); |
+} |
+ |
+@NoInline() |
+testA(A o) { |
+ return o.foo; |
+} |
+ |
+@NoInline() |
+testC(C o) { |
+ return o.foo; |
+} |
+ |
+ |
+@NoInline() |
+testD(D 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; |
+} |
+"""); |
+} |
+ |
+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 d = new D(foo: 4); |
+ |
+ Expect.equals(testA(a), 1); /// 01: ok |
+ Expect.equals(testA(a), 1); /// 02: ok |
+ Expect.equals(testA(d), 4); |
+ Expect.equals(testD(d), 4); /// 02: continued |
+} |
+ |
+ |