/** Additional feature tests that aren't based on test data. */ library parser_feature_test; import 'package:unittest/unittest.dart'; import 'package:html5lib/dom.dart'; import 'package:html5lib/dom_parsing.dart'; import 'package:html5lib/parser.dart'; import 'package:html5lib/src/constants.dart'; import 'package:html5lib/src/tokenizer.dart'; import 'package:html5lib/src/treebuilder.dart'; main() { test('doctype is cloneable', () { var doc = parse(''); DocumentType doctype = doc.nodes[0]; expect(doctype.clone().outerHtml, ''); }); test('line counter', () { // http://groups.google.com/group/html5lib-discuss/browse_frm/thread/f4f00e4a2f26d5c0 var doc = parse("
\nx\n>\n"); expect(doc.body.innerHtml, "
x\n>\n"); }); test('namespace html elements on', () { var doc = new HtmlParser('', tree: new TreeBuilder(true)).parse(); expect(doc.nodes[0].namespace, Namespaces.html); }); test('namespace html elements off', () { var doc = new HtmlParser('', tree: new TreeBuilder(false)).parse(); expect(doc.nodes[0].namespace, null); }); test('parse error spans - full', () { var parser = new HtmlParser(''' ''', generateSpans: true, sourceUrl: 'ParseError'); var doc = parser.parse(); expect(doc.body.outerHtml, '\n \n \n\n'); expect(parser.errors.length, 1); ParseError error = parser.errors[0]; expect(error.errorCode, 'unexpected-doctype'); // Note: these values are 0-based, but the printed format is 1-based. expect(error.span.start.line, 3); expect(error.span.end.line, 3); expect(error.span.start.column, 2); expect(error.span.end.column, 17); expect(error.span.text, ''); expect(error.toString(), ''' ParseError:4:3: Unexpected DOCTYPE. Ignored. ^^^^^^^^^^^^^^^'''); }); test('parse error spans - minimal', () { var parser = new HtmlParser(''' '''); var doc = parser.parse(); expect(doc.body.outerHtml, '\n \n \n\n'); expect(parser.errors.length, 1); ParseError error = parser.errors[0]; expect(error.errorCode, 'unexpected-doctype'); expect(error.span.start.line, 3); // Note: error position is at the end, not the beginning expect(error.span.start.column, 17); }); test('text spans should have the correct length', () { var textContent = '\n hello {{name}}'; var html = '
', () {
var doc = parseFragment('\n\nsome text');
expect(doc.query('pre').nodes[0].value, '\nsome text');
expect(doc.outerHtml, '\n\nsome text
');
doc = parseFragment('\nsome text');
expect(doc.query('pre').nodes[0].value, 'some text');
expect(doc.outerHtml, 'some text
');
});
test('xml namespaces', () {
// Note: this is a nonsensical example, but it triggers the behavior
// we're looking for with attribute names in foreign content.
var doc = parse('''