Index: tests/html/js_typed_interop_test.dart |
diff --git a/tests/html/js_typed_interop_test.dart b/tests/html/js_typed_interop_test.dart |
index 14d931f0d69ec46d16ee00151d29406804ad76fe..81c190cd1bd3dfa0bf8c4e070ed4513141b5f59b 100644 |
--- a/tests/html/js_typed_interop_test.dart |
+++ b/tests/html/js_typed_interop_test.dart |
@@ -130,11 +130,12 @@ class Foo { |
@anonymous |
@JS() |
class ExampleLiteral { |
- external factory ExampleLiteral({int x, String y, num z}); |
+ external factory ExampleLiteral({int x, String y, num z, String JS$class}); |
external int get x; |
external String get y; |
external num get z; |
+ external String get JS$class; |
} |
@anonymous |
@@ -167,6 +168,51 @@ addWithDefault(a, [b = 100]) => a + b; |
external Function get returnNumArgs; |
external Function get returnLastArg; |
+/** |
+ * Placeholder object for cases where we need to determine exactly how many |
+ * args were passed to a function. |
+ */ |
+const _UNDEFINED = const Object(); |
+ |
+// TODO(jacobr): this method is a hack to work around the lack of proper dart |
+// support for varargs methods. |
+List _stripUndefinedArgs(List args) => |
+ args.takeWhile((i) => i != _UNDEFINED).toList(); |
+ |
+int returnNumArgsDart([a1 = _UNDEFINED, |
+ a2 = _UNDEFINED, |
+ a3 = _UNDEFINED, |
+ a4 = _UNDEFINED, |
+ a5 = _UNDEFINED, |
+ a6 = _UNDEFINED, |
+ a7 = _UNDEFINED, |
+ a8 = _UNDEFINED, |
+ a9 = _UNDEFINED, |
+ a10 = _UNDEFINED, |
+ a11 = _UNDEFINED, |
+ a12 = _UNDEFINED, |
+ a13 = _UNDEFINED, |
+ a14 = _UNDEFINED, |
+ a15 = _UNDEFINED]) => |
+ _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15]).length; |
+ |
+returnLastArgDart([a1 = _UNDEFINED, |
+ a2 = _UNDEFINED, |
+ a3 = _UNDEFINED, |
+ a4 = _UNDEFINED, |
+ a5 = _UNDEFINED, |
+ a6 = _UNDEFINED, |
+ a7 = _UNDEFINED, |
+ a8 = _UNDEFINED, |
+ a9 = _UNDEFINED, |
+ a10 = _UNDEFINED, |
+ a11 = _UNDEFINED, |
+ a12 = _UNDEFINED, |
+ a13 = _UNDEFINED, |
+ a14 = _UNDEFINED, |
+ a15 = _UNDEFINED]) => |
+ _stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15]).last; |
+ |
const STRINGIFY_LOCATION = "JSON.stringify"; |
@JS(STRINGIFY_LOCATION) |
external String stringify(obj); |
@@ -207,6 +253,11 @@ main() { |
expect(l.y, isNull); |
expect(l.z, equals(100)); |
expect(stringify(l), equals('{"z":100}')); |
+ l = new ExampleLiteral(JS$class: "clazz"); |
+ expect(l.x, isNull); |
+ expect(l.y, isNull); |
+ expect(l.JS$class, equals("clazz")); |
+ expect(stringify(l), equals('{"class":"clazz"}')); |
}); |
test('empty', () { |
@@ -340,15 +391,28 @@ main() { |
}); |
test('call from dart', () { |
- var returnNumArgsFn = returnNumArgs; |
- var returnLastArgFn = returnLastArg; |
- expect(returnNumArgsFn(), equals(0)); |
- expect(returnNumArgsFn("a", "b", "c"), equals(3)); |
- expect(returnNumArgsFn("a", "b", "c", null, null), equals(5)); |
- expect(returnNumArgsFn(1, 2, 3, 4, 5, 6, null), equals(7)); |
- expect(returnNumArgsFn(1, 2, 3, 4, 5, 6, 7, 8), equals(8)); |
- expect(returnLastArgFn(1, 2, "foo"), equals("foo")); |
- expect(returnLastArgFn(1, 2, 3, 4, 5, 6, "foo"), equals("foo")); |
+ testReturnNumArgs(Function fn) { |
+ expect(fn(), equals(0)); |
+ expect(fn("a", "b", "c"), equals(3)); |
+ expect(fn("a", "b", "c", null, null), equals(5)); |
+ expect(fn(1, 2, 3, 4, 5, 6, null), equals(7)); |
+ expect(fn(1, 2, 3, 4, 5, 6, 7, 8), equals(8)); |
+ expect(fn(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), equals(12)); |
+ } |
+ testReturnLastArgFn(Function fn) { |
+ expect(fn(1, 2, "foo"), equals("foo")); |
+ expect(fn(1, 2, 3, 4, 5, 6, "foo"), equals("foo")); |
+ expect(fn(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, "bar"), equals("bar")); |
+ } |
+ testReturnNumArgs(returnNumArgs); |
+ testReturnLastArgFn(returnLastArg); |
+ |
+ testReturnNumArgs(returnNumArgsDart); |
+ testReturnLastArgFn(returnLastArgDart); |
+ |
+ testReturnNumArgs(allowInterop(returnNumArgsDart)); |
+ testReturnLastArgFn(allowInterop(returnLastArgDart)); |
+ testReturnLastArgFn(allowInteropCaptureThis(returnLastArgDart)); |
}); |
}); |