OLD | NEW |
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() { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 expect(error.errorCode, 'unexpected-doctype'); | 74 expect(error.errorCode, 'unexpected-doctype'); |
75 expect(error.span.start.line, 3); | 75 expect(error.span.start.line, 3); |
76 // Note: error position is at the end, not the beginning | 76 // Note: error position is at the end, not the beginning |
77 expect(error.span.start.column, 17); | 77 expect(error.span.start.column, 17); |
78 }); | 78 }); |
79 | 79 |
80 test('text spans should have the correct length', () { | 80 test('text spans should have the correct length', () { |
81 var textContent = '\n hello {{name}}'; | 81 var textContent = '\n hello {{name}}'; |
82 var html = '<body><div>$textContent</div>'; | 82 var html = '<body><div>$textContent</div>'; |
83 var doc = parse(html, generateSpans: true); | 83 var doc = parse(html, generateSpans: true); |
84 var text = doc.body.nodes[0].nodes[0]; | 84 Text text = doc.body.nodes[0].nodes[0]; |
85 expect(text, new isInstanceOf<Text>()); | 85 expect(text, new isInstanceOf<Text>()); |
86 expect(text.value, textContent); | 86 expect(text.data, textContent); |
87 expect(text.sourceSpan.start.offset, html.indexOf(textContent)); | 87 expect(text.sourceSpan.start.offset, html.indexOf(textContent)); |
88 expect(text.sourceSpan.length, textContent.length); | 88 expect(text.sourceSpan.length, textContent.length); |
89 }); | 89 }); |
90 | 90 |
91 test('attribute spans', () { | 91 test('attribute spans', () { |
92 var text = '<element name="x-foo" extends="x-bar" constructor="Foo">'; | 92 var text = '<element name="x-foo" extends="x-bar" constructor="Foo">'; |
93 var doc = parse(text, generateSpans: true); | 93 var doc = parse(text, generateSpans: true); |
94 var elem = doc.querySelector('element'); | 94 var elem = doc.querySelector('element'); |
95 expect(elem.sourceSpan.start.offset, 0); | 95 expect(elem.sourceSpan.start.offset, 0); |
96 expect(elem.sourceSpan.end.offset, text.length); | 96 expect(elem.sourceSpan.end.offset, text.length); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 | 197 |
198 test('Escaping non-breaking space', () { | 198 test('Escaping non-breaking space', () { |
199 var text = '<span>foO\u00A0bar</span>'; | 199 var text = '<span>foO\u00A0bar</span>'; |
200 expect(text.codeUnitAt(text.indexOf('O') + 1), 0xA0); | 200 expect(text.codeUnitAt(text.indexOf('O') + 1), 0xA0); |
201 var doc = parseFragment(text); | 201 var doc = parseFragment(text); |
202 expect(doc.outerHtml, '<span>foO bar</span>'); | 202 expect(doc.outerHtml, '<span>foO bar</span>'); |
203 }); | 203 }); |
204 | 204 |
205 test('Newline after <pre>', () { | 205 test('Newline after <pre>', () { |
206 var doc = parseFragment('<pre>\n\nsome text</span>'); | 206 var doc = parseFragment('<pre>\n\nsome text</span>'); |
207 expect(doc.querySelector('pre').nodes[0].value, '\nsome text'); | 207 expect(doc.querySelector('pre').nodes[0].data, '\nsome text'); |
208 expect(doc.outerHtml, '<pre>\n\nsome text</pre>'); | 208 expect(doc.outerHtml, '<pre>\n\nsome text</pre>'); |
209 | 209 |
210 doc = parseFragment('<pre>\nsome text</span>'); | 210 doc = parseFragment('<pre>\nsome text</span>'); |
211 expect(doc.querySelector('pre').nodes[0].value, 'some text'); | 211 expect(doc.querySelector('pre').nodes[0].data, 'some text'); |
212 expect(doc.outerHtml, '<pre>some text</pre>'); | 212 expect(doc.outerHtml, '<pre>some text</pre>'); |
213 }); | 213 }); |
214 | 214 |
215 test('xml namespaces', () { | 215 test('xml namespaces', () { |
216 // Note: this is a nonsensical example, but it triggers the behavior | 216 // Note: this is a nonsensical example, but it triggers the behavior |
217 // we're looking for with attribute names in foreign content. | 217 // we're looking for with attribute names in foreign content. |
218 var doc = parse(''' | 218 var doc = parse(''' |
219 <body> | 219 <body> |
220 <svg> | 220 <svg> |
221 <desc xlink:type="simple" | 221 <desc xlink:type="simple" |
(...skipping 17 matching lines...) Expand all Loading... |
239 var doc = parser.parse(); | 239 var doc = parser.parse(); |
240 expect(doc.body.innerHtml, 'foo'); | 240 expect(doc.body.innerHtml, 'foo'); |
241 expect(parser.errors.length, 1); | 241 expect(parser.errors.length, 1); |
242 expect(parser.errors[0].errorCode, 'expected-doctype-but-got-chars'); | 242 expect(parser.errors[0].errorCode, 'expected-doctype-but-got-chars'); |
243 expect(parser.errors[0].message, | 243 expect(parser.errors[0].message, |
244 'Unexpected non-space characters. Expected DOCTYPE.'); | 244 'Unexpected non-space characters. Expected DOCTYPE.'); |
245 expect(parser.errors[0].toString(), | 245 expect(parser.errors[0].toString(), |
246 'ParserError:1:4: Unexpected non-space characters. ' | 246 'ParserError:1:4: Unexpected non-space characters. ' |
247 'Expected DOCTYPE.'); | 247 'Expected DOCTYPE.'); |
248 }); | 248 }); |
| 249 |
| 250 test('Element.text', () { |
| 251 var doc = parseFragment('<div>foo<div>bar</div>baz</div>'); |
| 252 var e = doc.firstChild; |
| 253 var text = e.firstChild; |
| 254 expect((text as Text).data, 'foo'); |
| 255 expect(e.text, 'foobarbaz'); |
| 256 |
| 257 e.text = 'FOO'; |
| 258 expect(e.nodes.length, 1); |
| 259 expect(e.firstChild, isNot(text), reason: 'should create a new tree'); |
| 260 expect((e.firstChild as Text).data, 'FOO'); |
| 261 expect(e.text, 'FOO'); |
| 262 }); |
| 263 |
| 264 test('Text.text', () { |
| 265 var doc = parseFragment('<div>foo<div>bar</div>baz</div>'); |
| 266 var e = doc.firstChild; |
| 267 Text text = e.firstChild; |
| 268 expect(text.data, 'foo'); |
| 269 expect(text.text, 'foo'); |
| 270 |
| 271 text.text = 'FOO'; |
| 272 expect(text.data, 'FOO'); |
| 273 expect(e.text, 'FOObarbaz'); |
| 274 expect(text.text, 'FOO'); |
| 275 }); |
| 276 |
| 277 test('Comment.text', () { |
| 278 var doc = parseFragment('<div><!--foo-->bar</div>'); |
| 279 var e = doc.firstChild; |
| 280 var c = e.firstChild; |
| 281 expect((c as Comment).data, 'foo'); |
| 282 expect(c.text, 'foo'); |
| 283 expect(e.text, 'bar'); |
| 284 |
| 285 c.text = 'qux'; |
| 286 expect(c.data, 'qux'); |
| 287 expect(c.text, 'qux'); |
| 288 expect(e.text, 'bar'); |
| 289 }); |
249 } | 290 } |
OLD | NEW |