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

Side by Side Diff: test/codegen/lib/html/custom_elements_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: ptal Created 4 years, 7 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) 2013, 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 custom_elements_test;
6 import 'dart:async';
7 import 'dart:html';
8 import 'package:unittest/html_individual_config.dart';
9 import 'package:unittest/unittest.dart';
10 import 'utils.dart';
11
12 class CustomMixin {
13 var mixinMethodCalled;
14
15 void mixinMethod() {
16 mixinMethodCalled = true;
17 }
18 }
19
20 class CustomType extends HtmlElement with CustomMixin{
21 bool createdCalled = false;
22
23 factory CustomType() => null;
24 CustomType.created(): super.created() {
25 createdCalled = true;
26 customCreatedCount++;
27 }
28
29 void invokeMixinMethod() {
30 mixinMethod();
31 }
32 }
33
34 int customCreatedCount = 0;
35
36 int nextTagId = 0;
37 String get nextTag => 'x-type${nextTagId++}';
38
39 class NotAnElement {}
40
41 main() {
42 useHtmlIndividualConfiguration();
43
44 setUp(() => customElementsReady);
45
46 group('register', () {
47 test('register', () {
48 var tag = nextTag;
49 document.registerElement(tag, CustomType);
50
51 var element = new Element.tag(tag);
52 expect(element, isNotNull);
53 expect(element is CustomType, isTrue);
54 expect(element.createdCalled, isTrue);
55 });
56
57 test('register twice', () {
58 var tag = nextTag;
59 document.registerElement(tag, CustomType);
60 expect(() {
61 document.registerElement(tag, CustomType);
62 }, throws, reason: 'Cannot register a tag more than once.');
63
64 var newTag = nextTag;
65 document.registerElement(newTag, CustomType);
66
67 var element = new Element.tag(newTag);
68 expect(element, isNotNull);
69 expect(element is CustomType, isTrue);
70 });
71
72 test('register null', () {
73 expect(() {
74 document.registerElement(nextTag, null);
75 }, throws, reason: 'Cannot register a null type.');
76 });
77
78 test('register native', () {
79 expect(() {
80 document.registerElement(nextTag, BodyElement);
81 }, throws, reason: 'Cannot register a native element.');
82 });
83
84 test('register non-element', () {
85 expect(() {
86 document.registerElement(nextTag, NotAnElement);
87 }, throws, reason: 'Cannot register a non-element.');
88 });
89 });
90
91 // TODO(vsm): Modify this test once we agree on the proper semantics.
92 /*
93 group('preregister', () {
94
95 test('pre-registration construction', () {
96 var tag = nextTag;
97 var dom = new Element.html('<div><$tag></$tag></div>');
98
99 var preElement = dom.children[0];
100 expect(preElement, isNotNull);
101 expect(preElement is HtmlElement, isTrue);
102 expect(preElement is CustomType, isFalse);
103 var firedOnPre = false;
104 preElement.onFocus.listen((_) {
105 firedOnPre = true;
106 });
107
108 document.registerElement(tag, CustomType);
109 upgradeCustomElements(dom);
110
111 var postElement = dom.children[0];
112 expect(postElement, isNotNull);
113 expect(postElement is CustomType, isTrue);
114 expect(postElement.createdCalled, isTrue);
115
116 // Element from first query remains an UnknownElement.
117 expect(preElement is HtmlElement, isTrue);
118 expect(preElement.parent, dom);
119 expect(dom.children.length, 1);
120
121 var firedOnPost = false;
122 postElement.onFocus.listen((_) {
123 firedOnPost = true;
124 });
125 // Event handlers persist on old and new element.
126 postElement.dispatchEvent(new Event('focus'));
127 expect(firedOnPre, isTrue);
128 expect(firedOnPost, isTrue);
129 });
130 });*/
131
132 group('innerHtml', () {
133 test('query', () {
134 var tag = nextTag;
135 document.registerElement(tag, CustomType);
136 var element = new DivElement();
137 element.setInnerHtml('<$tag></$tag>',
138 treeSanitizer: new NullTreeSanitizer());
139 upgradeCustomElements(element);
140 document.body.nodes.add(element);
141 var queried = query(tag);
142
143 expect(queried, isNotNull);
144 expect(queried is CustomType, isTrue);
145 expect(queried.createdCalled, isTrue);
146 });
147
148 test('query id', () {
149 var tag = nextTag;
150 document.registerElement(tag, CustomType);
151 var element = new DivElement();
152 element.setInnerHtml('<$tag id="someid"></$tag>',
153 treeSanitizer: new NullTreeSanitizer());
154 upgradeCustomElements(element);
155 document.body.nodes.add(element);
156 var queried = query('#someid');
157
158 expect(queried, isNotNull);
159 expect(queried is CustomType, isTrue);
160 expect(queried.id, "someid");
161 });
162 });
163
164 group('lifecycle', () {
165 test('created', () {
166 int oldCount = customCreatedCount;
167 var tag = nextTag;
168 document.registerElement(tag, CustomType);
169 var element = new DivElement();
170 element.setInnerHtml('<$tag></$tag>',
171 treeSanitizer: new NullTreeSanitizer());
172 upgradeCustomElements(element);
173 document.body.nodes.add(element);
174 expect(customCreatedCount, oldCount + 1);
175 });
176 });
177
178 group('mixins', () {
179 test('can invoke mixin methods', () {
180 var tag = nextTag;
181 document.registerElement(tag, CustomType);
182
183 var element = new Element.tag(tag);
184 element.invokeMixinMethod();
185 expect(element.mixinMethodCalled, isTrue);
186 });
187 });
188 }
OLDNEW
« no previous file with comments | « test/codegen/lib/html/custom_elements_23127_test.html ('k') | test/codegen/lib/html/custom_elements_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698