| 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 |