OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2014, 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 register_element_proxy_test; | |
6 | |
7 import 'dart:async'; | |
8 import 'dart:html'; | |
9 import 'dart:js' as js; | |
10 import 'package:unittest/html_config.dart'; | |
11 import 'package:unittest/unittest.dart'; | |
12 import '../utils.dart'; | |
13 | |
14 class FooElement extends HtmlElement { | |
15 static final tag = 'x-foo'; | |
16 | |
17 final int initializedField = 666; | |
18 js.JsObject _proxy; | |
19 | |
20 factory FooElement() => new Element.tag(tag); | |
21 FooElement.created() : super.created() { | |
22 _proxy = new js.JsObject.fromBrowserObject(this); | |
Jennifer Messerly
2014/03/07 00:00:49
I wonder if, eventually, we can find a way to remo
| |
23 } | |
24 | |
25 String doSomething() => _proxy.callMethod('doSomething'); | |
26 | |
27 bool get fooCreated => _proxy['fooCreated']; | |
28 } | |
29 | |
30 main() { | |
31 useHtmlConfiguration(); | |
32 | |
33 var registered = false; | |
34 var upgrader; | |
35 setUp(() => customElementsReady.then((_) { | |
36 if (!registered) { | |
37 registered = true; | |
38 upgrader = document.createElementUpgrader(FooElement); | |
39 js.context['upgradeListener'] = (e) { | |
40 upgrader.upgrade(e); | |
41 }; | |
42 } | |
43 })); | |
44 | |
45 test('created gets proxied', () { | |
46 var element = document.createElement(FooElement.tag); | |
47 expect(element is FooElement, isTrue); | |
48 expect(element.initializedField, 666); | |
49 expect(element.text, 'constructed'); | |
50 | |
51 js.context.callMethod('validateIsFoo', [element]); | |
52 | |
53 expect(element.doSomething(), 'didSomething'); | |
54 expect(element.fooCreated, true); | |
55 }); | |
56 | |
57 test('dart constructor works', () { | |
58 var element = new FooElement(); | |
59 expect(element is FooElement, isTrue); | |
60 expect(element.text, 'constructed'); | |
61 | |
62 js.context.callMethod('validateIsFoo', [element]); | |
63 | |
64 expect(element.doSomething(), 'didSomething'); | |
65 }); | |
66 | |
67 test('cannot create upgrader for interfaces', () { | |
68 expect(() { | |
69 document.createElementUpgrader(HtmlElementInterface); | |
70 }, throws); | |
71 }); | |
72 | |
73 test('cannot upgrade interfaces', () { | |
74 expect(() { | |
75 upgrader.upgrade(new HtmlElementInterface()); | |
76 }, throws); | |
77 }); | |
78 | |
79 test('cannot upgrade more than once', () { | |
80 var fooElement = new FooElement(); | |
81 expect(() { | |
82 upgrader.upgrade(fooElement); | |
83 }, throws); | |
84 }); | |
85 | |
86 test('cannot upgrade non-matching elements', () { | |
Jennifer Messerly
2014/03/07 00:00:49
maybe a test that you can't upgrade a Dart custom
blois
2014/04/01 19:52:22
Done.
| |
87 expect(() { | |
88 upgrader.upgrade(new DivElement()); | |
89 }, throws); | |
90 }); | |
91 | |
92 test('cannot upgrade non-matching elements', () { | |
Jennifer Messerly
2014/03/07 00:00:49
this seems identical to above test.
blois
2014/04/01 19:52:22
Done.
| |
93 expect(() { | |
94 upgrader.upgrade(new DivElement()); | |
95 }, throws); | |
96 }); | |
97 | |
98 test('can upgrade with extendsTag', () { | |
99 var upgrader = | |
100 document.createElementUpgrader(CustomDiv, extendsTag: 'div'); | |
101 var div = new DivElement(); | |
102 var customDiv = upgrader.upgrade(div); | |
103 expect(customDiv is CustomDiv, isTrue); | |
104 | |
105 var htmlElement = document.createElement('not-registered'); | |
106 expect(() { | |
107 upgrader.upgrade(htmlElement); | |
108 }, throws); | |
109 }); | |
110 } | |
111 | |
112 class HtmlElementInterface implements HtmlElement { | |
113 HtmlElementInterface.created(); | |
114 } | |
115 | |
116 class CustomDiv extends DivElement { | |
117 CustomDiv.created() : super.created(); | |
118 } | |
OLD | NEW |