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

Side by Side Diff: pkg/third_party/html5lib/test/parser_feature_test.dart

Issue 178303009: [html5lib] api updates: localName (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « pkg/third_party/html5lib/lib/src/treebuilder.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /// Additional feature tests that aren't based on test data. 1 /// Additional feature tests that aren't based on test data.
2 library parser_feature_test; 2 library parser_feature_test;
3 3
4 import 'package:unittest/unittest.dart'; 4 import 'package:unittest/unittest.dart';
5 import 'package:html5lib/dom.dart'; 5 import 'package:html5lib/dom.dart';
6 import 'package:html5lib/parser.dart'; 6 import 'package:html5lib/parser.dart';
7 import 'package:html5lib/src/constants.dart'; 7 import 'package:html5lib/src/constants.dart';
8 import 'package:html5lib/src/treebuilder.dart'; 8 import 'package:html5lib/src/treebuilder.dart';
9 9
10 main() { 10 main() {
11 test('doctype is cloneable', () { 11 test('doctype is cloneable', () {
12 var doc = parse('<!DOCTYPE HTML>'); 12 var doc = parse('<!doctype HTML>');
13 DocumentType doctype = doc.nodes[0]; 13 DocumentType doctype = doc.nodes[0];
14 expect(doctype.clone().outerHtml, '<!DOCTYPE html>'); 14 expect(doctype.clone().toString(), '<!DOCTYPE html>');
15 }); 15 });
16 16
17 test('line counter', () { 17 test('line counter', () {
18 // http://groups.google.com/group/html5lib-discuss/browse_frm/thread/f4f00e4 a2f26d5c0 18 // http://groups.google.com/group/html5lib-discuss/browse_frm/thread/f4f00e4 a2f26d5c0
19 var doc = parse("<pre>\nx\n&gt;\n</pre>"); 19 var doc = parse("<pre>\nx\n&gt;\n</pre>");
20 expect(doc.body.innerHtml, "<pre>x\n&gt;\n</pre>"); 20 expect(doc.body.innerHtml, "<pre>x\n&gt;\n</pre>");
21 }); 21 });
22 22
23 test('namespace html elements on', () { 23 test('namespace html elements on', () {
24 var doc = new HtmlParser('', tree: new TreeBuilder(true)).parse(); 24 var doc = new HtmlParser('', tree: new TreeBuilder(true)).parse();
25 expect(doc.nodes[0].namespace, Namespaces.html); 25 expect(doc.nodes[0].namespaceUri, Namespaces.html);
26 }); 26 });
27 27
28 test('namespace html elements off', () { 28 test('namespace html elements off', () {
29 var doc = new HtmlParser('', tree: new TreeBuilder(false)).parse(); 29 var doc = new HtmlParser('', tree: new TreeBuilder(false)).parse();
30 expect(doc.nodes[0].namespace, null); 30 expect(doc.nodes[0].namespaceUri, null);
31 }); 31 });
32 32
33 test('parse error spans - full', () { 33 test('parse error spans - full', () {
34 var parser = new HtmlParser(''' 34 var parser = new HtmlParser('''
35 <!DOCTYPE html> 35 <!DOCTYPE html>
36 <html> 36 <html>
37 <body> 37 <body>
38 <!DOCTYPE html> 38 <!DOCTYPE html>
39 </body> 39 </body>
40 </html> 40 </html>
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 doc = parse('<body><script></script></body>'); 149 doc = parse('<body><script></script></body>');
150 expect(doc.body.innerHtml, '<script></script>'); 150 expect(doc.body.innerHtml, '<script></script>');
151 doc = parse('<br>'); 151 doc = parse('<br>');
152 expect(doc.body.innerHtml, '<br>'); 152 expect(doc.body.innerHtml, '<br>');
153 doc = parse('<br><foo><bar>'); 153 doc = parse('<br><foo><bar>');
154 expect(doc.body.innerHtml, '<br><foo><bar></bar></foo>'); 154 expect(doc.body.innerHtml, '<br><foo><bar></bar></foo>');
155 }); 155 });
156 156
157 test('empty document has html, body, and head', () { 157 test('empty document has html, body, and head', () {
158 var doc = parse(''); 158 var doc = parse('');
159 expect(doc.outerHtml, '<html><head></head><body></body></html>'); 159 var html = '<html><head></head><body></body></html>';
160 expect(doc.outerHtml, html);
161 expect(doc.documentElement.outerHtml, html);
160 expect(doc.head.outerHtml, '<head></head>'); 162 expect(doc.head.outerHtml, '<head></head>');
161 expect(doc.body.outerHtml, '<body></body>'); 163 expect(doc.body.outerHtml, '<body></body>');
162 }); 164 });
163 165
164 test('strange table case', () { 166 test('strange table case', () {
165 var doc = parseFragment('<table><tbody><foo>'); 167 var doc = parse('<table><tbody><foo>').body;
166 expect(doc.outerHtml, '<foo></foo><table><tbody></tbody></table>'); 168 expect(doc.innerHtml, '<foo></foo><table><tbody></tbody></table>');
167 }); 169 });
168 170
169 group('html serialization', () { 171 group('html serialization', () {
170 test('attribute order', () { 172 test('attribute order', () {
171 // Note: the spec only requires a stable order. 173 // Note: the spec only requires a stable order.
172 // However, we preserve the input order via LinkedHashMap 174 // However, we preserve the input order via LinkedHashMap
173 var doc = parseFragment('<foo d=1 a=2 c=3 b=4>'); 175 var body = parse('<foo d=1 a=2 c=3 b=4>').body;
174 expect(doc.outerHtml, '<foo d="1" a="2" c="3" b="4"></foo>'); 176 expect(body.innerHtml, '<foo d="1" a="2" c="3" b="4"></foo>');
175 expect(doc.querySelector('foo').attributes.remove('a'), '2'); 177 expect(body.querySelector('foo').attributes.remove('a'), '2');
176 expect(doc.outerHtml, '<foo d="1" c="3" b="4"></foo>'); 178 expect(body.innerHtml, '<foo d="1" c="3" b="4"></foo>');
177 doc.querySelector('foo').attributes['a'] = '0'; 179 body.querySelector('foo').attributes['a'] = '0';
178 expect(doc.outerHtml, '<foo d="1" c="3" b="4" a="0"></foo>'); 180 expect(body.innerHtml, '<foo d="1" c="3" b="4" a="0"></foo>');
179 }); 181 });
180 182
181 test('escaping Text node in <script>', () { 183 test('escaping Text node in <script>', () {
182 var doc = parseFragment('<script>a && b</script>'); 184 Element e = parseFragment('<script>a && b</script>').firstChild;
183 expect(doc.outerHtml, '<script>a && b</script>'); 185 expect(e.outerHtml, '<script>a && b</script>');
184 }); 186 });
185 187
186 test('escaping Text node in <span>', () { 188 test('escaping Text node in <span>', () {
187 var doc = parseFragment('<span>a && b</span>'); 189 Element e = parseFragment('<span>a && b</span>').firstChild;
188 expect(doc.outerHtml, '<span>a &amp;&amp; b</span>'); 190 expect(e.outerHtml, '<span>a &amp;&amp; b</span>');
189 }); 191 });
190 192
191 test('Escaping attributes', () { 193 test('Escaping attributes', () {
192 var doc = parseFragment('<div class="a<b>">'); 194 Element e = parseFragment('<div class="a<b>">').firstChild;
193 expect(doc.outerHtml, '<div class="a<b>"></div>'); 195 expect(e.outerHtml, '<div class="a<b>"></div>');
194 doc = parseFragment('<div class=\'a"b\'>'); 196 e = parseFragment('<div class=\'a"b\'>').firstChild;
195 expect(doc.outerHtml, '<div class="a&quot;b"></div>'); 197 expect(e.outerHtml, '<div class="a&quot;b"></div>');
196 }); 198 });
197 199
198 test('Escaping non-breaking space', () { 200 test('Escaping non-breaking space', () {
199 var text = '<span>foO\u00A0bar</span>'; 201 var text = '<span>foO\u00A0bar</span>';
200 expect(text.codeUnitAt(text.indexOf('O') + 1), 0xA0); 202 expect(text.codeUnitAt(text.indexOf('O') + 1), 0xA0);
201 var doc = parseFragment(text); 203 Element e = parseFragment(text).firstChild;
202 expect(doc.outerHtml, '<span>foO&nbsp;bar</span>'); 204 expect(e.outerHtml, '<span>foO&nbsp;bar</span>');
203 }); 205 });
204 206
205 test('Newline after <pre>', () { 207 test('Newline after <pre>', () {
206 var doc = parseFragment('<pre>\n\nsome text</span>'); 208 Element e = parseFragment('<pre>\n\nsome text</span>').firstChild;
207 expect(doc.querySelector('pre').nodes[0].data, '\nsome text'); 209 expect((e.firstChild as Text).data, '\nsome text');
208 expect(doc.outerHtml, '<pre>\n\nsome text</pre>'); 210 expect(e.outerHtml, '<pre>\n\nsome text</pre>');
209 211
210 doc = parseFragment('<pre>\nsome text</span>'); 212 e = parseFragment('<pre>\nsome text</span>').firstChild;
211 expect(doc.querySelector('pre').nodes[0].data, 'some text'); 213 expect((e.firstChild as Text).data, 'some text');
212 expect(doc.outerHtml, '<pre>some text</pre>'); 214 expect(e.outerHtml, '<pre>some text</pre>');
213 }); 215 });
214 216
215 test('xml namespaces', () { 217 test('xml namespaces', () {
216 // Note: this is a nonsensical example, but it triggers the behavior 218 // Note: this is a nonsensical example, but it triggers the behavior
217 // we're looking for with attribute names in foreign content. 219 // we're looking for with attribute names in foreign content.
218 var doc = parse(''' 220 var doc = parse('''
219 <body> 221 <body>
220 <svg> 222 <svg>
221 <desc xlink:type="simple" 223 <desc xlink:type="simple"
222 xlink:href="http://example.com/logo.png" 224 xlink:href="http://example.com/logo.png"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 expect((c as Comment).data, 'foo'); 283 expect((c as Comment).data, 'foo');
282 expect(c.text, 'foo'); 284 expect(c.text, 'foo');
283 expect(e.text, 'bar'); 285 expect(e.text, 'bar');
284 286
285 c.text = 'qux'; 287 c.text = 'qux';
286 expect(c.data, 'qux'); 288 expect(c.data, 'qux');
287 expect(c.text, 'qux'); 289 expect(c.text, 'qux');
288 expect(e.text, 'bar'); 290 expect(e.text, 'bar');
289 }); 291 });
290 } 292 }
OLDNEW
« no previous file with comments | « pkg/third_party/html5lib/lib/src/treebuilder.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698