Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(603)

Side by Side Diff: tests/html/js_typed_interop_test.dart

Issue 1209093005: Revert "Enhance dart:js interop in a backwards compatible manner." (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library jsArrayTest;
6
7 import 'dart:html';
8 import 'dart:js';
9
10 import 'package:unittest/unittest.dart';
11 import 'package:unittest/html_config.dart';
12
13 _injectJs() {
14 document.body.append(new ScriptElement()
15 ..type = 'text/javascript'
16 ..innerHtml = r"""
17 var foo = {
18 x: 3,
19 z: 40, // Not specified in typed Dart API so should fail in checked mode.
20 multiplyByX: function(arg) { return arg * this.x; },
21 // This function can be torn off without having to bind this.
22 multiplyBy2: function(arg) { return arg * 2; }
23 };
24
25 var foob = {
26 x: 8,
27 y: "why",
28 multiplyByX: function(arg) { return arg * this.x; }
29 };
30
31 var bar = {
32 x: "foo",
33 multiplyByX: true
34 };
35
36 var selection = ["a", "b", "c", foo, bar];
37 selection.doubleLength = function() { return this.length * 2; };
38 """);
39 }
40
41 abstract class Foo {
42 int get x;
43 set x(int v);
44 num multiplyByX(num y);
45 num multiplyBy2(num y);
46 }
47
48 abstract class Foob extends Foo {
49 final String y;
50 }
51
52 abstract class Bar {
53 String get x;
54 bool get multiplyByX;
55 }
56
57 class Baz {}
58
59 // This class shows the pattern used by APIs such as jQuery that add methods
60 // to Arrays.
61 abstract class Selection implements List {
62 num doubleLength();
63 }
64
65 Foo get foo => context['foo'];
66 Foob get foob => context['foob'];
67 Bar get bar => context['bar'];
68 Selection get selection => context['selection'];
69
70 main() {
71 // Call experimental API to register Dart interfaces implemented by
72 // JavaScript classes.
73 registerJsInterfaces([Foo, Foob, Bar, Selection]);
74
75 _injectJs();
76
77 useHtmlConfiguration();
78
79 group('property', () {
80 test('get', () {
81 expect(foo.x, equals(3));
82 expect(foob.x, equals(8));
83 expect(foob.y, equals("why"));
84
85 // Exists in JS but not in API.
86 expect(() => foo.z, throws);
87 expect(bar.multiplyByX, isTrue);
88 });
89 test('set', () {
90 foo.x = 42;
91 expect(foo.x, equals(42));
92 // Property tagged as read only in typed API.
93 expect(() => foob.y = "bla", throws);
94 expect(() => foo.unknownName = 42, throws);
95 });
96 });
97
98 group('method', () {
99 test('call', () {
100 foo.x = 100;
101 expect(foo.multiplyByX(4), equals(400));
102 foob.x = 10;
103 expect(foob.multiplyByX(4), equals(40));
104 });
105
106 test('tearoff', () {
107 foo.x = 10;
108 // TODO(jacobr): should we automatically bind "this" for tearoffs of JS
109 // objects?
110 JsFunction multiplyBy2 = foo.multiplyBy2;
111 expect(multiplyBy2(5), equals(10));
112 });
113 });
114
115 group('type check', () {
116 test('js interfaces', () {
117 expect(foo is JsObject, isTrue);
118 // Cross-casts are allowed.
119 expect(foo is Bar, isTrue);
120 expect(selection is JsArray, isTrue);
121
122 // We do know at runtime whether something is a JsArray or not.
123 expect(foo is JsArray, isFalse);
124 });
125
126 test('dart interfaces', () {
127 expect(foo is Function, isFalse);
128 expect(selection is List, isTrue);
129 });
130 });
131
132 group("registration", () {
133 test('repeated fails', () {
134 // The experimental registerJsInterfaces API has already been called so
135 // it cannot be called a second time.
136 expect(() => registerJsInterfaces([Baz]), throws);
137 });
138 });
139 }
OLDNEW
« no previous file with comments | « tests/html/js_array_test.dart ('k') | tools/dom/templates/html/dartium/html_dartium.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698