Index: pkg/third_party/html5lib/test/support.dart |
diff --git a/pkg/third_party/html5lib/test/support.dart b/pkg/third_party/html5lib/test/support.dart |
deleted file mode 100644 |
index 0118ecf8d98126b8632d8d88b35fee7132f5e62f..0000000000000000000000000000000000000000 |
--- a/pkg/third_party/html5lib/test/support.dart |
+++ /dev/null |
@@ -1,165 +0,0 @@ |
-/// Support code for the tests in this directory. |
-library support; |
- |
-import 'dart:io'; |
-import 'dart:collection'; |
-import 'package:path/path.dart' as path; |
-import 'package:html5lib/src/treebuilder.dart'; |
-import 'package:html5lib/dom.dart'; |
-import 'package:html5lib/dom_parsing.dart'; |
- |
-typedef TreeBuilder TreeBuilderFactory(bool namespaceHTMLElements); |
- |
-Map _treeTypes; |
-Map<String, TreeBuilderFactory> get treeTypes { |
- if (_treeTypes == null) { |
- // TODO(jmesserly): add DOM here once it's implemented |
- _treeTypes = { "simpletree": (useNs) => new TreeBuilder(useNs) }; |
- } |
- return _treeTypes; |
-} |
- |
-final testDataDir = Platform.script.resolve('data').toFilePath(); |
- |
-Iterable<String> getDataFiles(String subdirectory) { |
- var dir = new Directory(path.join(testDataDir, subdirectory)); |
- return dir.listSync().where((f) => f is File).map((f) => f.path); |
-} |
- |
-// TODO(jmesserly): make this class simpler. We could probably split on |
-// "\n#" instead of newline and remove a lot of code. |
-class TestData extends IterableBase<Map> { |
- final String _text; |
- final String newTestHeading; |
- |
- TestData(String filename, [this.newTestHeading = "data"]) |
- // Note: can't use readAsLinesSync here because it splits on \r |
- : _text = new File(filename).readAsStringSync(); |
- |
- // Note: in Python this was a generator, but since we can't do that in Dart, |
- // it's easier to convert it into an upfront computation. |
- Iterator<Map> get iterator => _getData().iterator; |
- |
- List<Map> _getData() { |
- var data = <String, String>{}; |
- var key = null; |
- var result = <Map>[]; |
- var lines = _text.split('\n'); |
- int numLines = lines.length; |
- // Remove trailing newline to match Python |
- if (lines.last == '') { |
- lines.removeLast(); |
- } |
- for (var line in lines) { |
- var heading = sectionHeading(line); |
- if (heading != null) { |
- if (data.length > 0 && heading == newTestHeading) { |
- // Remove trailing newline |
- data[key] = data[key].substring(0, data[key].length - 1); |
- result.add(normaliseOutput(data)); |
- data = <String, String>{}; |
- } |
- key = heading; |
- data[key] = ""; |
- } else if (key != null) { |
- data[key] = '${data[key]}$line\n'; |
- } |
- } |
- |
- if (data.length > 0) { |
- result.add(normaliseOutput(data)); |
- } |
- return result; |
- } |
- |
- /// If the current heading is a test section heading return the heading, |
- /// otherwise return null. |
- static String sectionHeading(String line) { |
- return line.startsWith("#") ? line.substring(1).trim() : null; |
- } |
- |
- static Map normaliseOutput(Map data) { |
- // Remove trailing newlines |
- data.forEach((key, value) { |
- if (value.endsWith("\n")) { |
- data[key] = value.substring(0, value.length - 1); |
- } |
- }); |
- return data; |
- } |
-} |
- |
-/// Serialize the [document] into the html5 test data format. |
-testSerializer(document) { |
- return (new TestSerializer()..visit(document)).toString(); |
-} |
- |
-/// Serializes the DOM into test format. See [testSerializer]. |
-class TestSerializer extends TreeVisitor { |
- final StringBuffer _str; |
- int _indent = 0; |
- String _spaces = ''; |
- |
- TestSerializer() : _str = new StringBuffer(); |
- |
- String toString() => _str.toString(); |
- |
- int get indent => _indent; |
- |
- set indent(int value) { |
- if (_indent == value) return; |
- |
- var arr = new List<int>(value); |
- for (int i = 0; i < value; i++) { |
- arr[i] = 32; |
- } |
- _spaces = new String.fromCharCodes(arr); |
- _indent = value; |
- } |
- |
- void _newline() { |
- if (_str.length > 0) _str.write('\n'); |
- _str.write('|$_spaces'); |
- } |
- |
- visitNodeFallback(Node node) { |
- _newline(); |
- _str.write(node); |
- visitChildren(node); |
- } |
- |
- visitChildren(Node node) { |
- indent += 2; |
- for (var child in node.nodes) visit(child); |
- indent -= 2; |
- } |
- |
- visitDocument(node) { |
- indent += 1; |
- for (var child in node.nodes) visit(child); |
- indent -= 1; |
- } |
- |
- visitDocumentFragment(DocumentFragment node) => visitDocument(node); |
- |
- visitElement(Element node) { |
- _newline(); |
- _str.write(node); |
- if (node.attributes.length > 0) { |
- indent += 2; |
- var keys = new List.from(node.attributes.keys); |
- keys.sort((x, y) => x.compareTo(y)); |
- for (var key in keys) { |
- var v = node.attributes[key]; |
- if (key is AttributeName) { |
- AttributeName attr = key; |
- key = "${attr.prefix} ${attr.name}"; |
- } |
- _newline(); |
- _str.write('$key="$v"'); |
- } |
- indent -= 2; |
- } |
- visitChildren(node); |
- } |
-} |