Index: third_party/WebKit/LayoutTests/external/wpt/webvtt/webvtt-file-format-parsing/webvtt-cue-text-parsing-rules/common.js |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/webvtt-file-format-parsing/webvtt-cue-text-parsing-rules/common.js b/third_party/WebKit/LayoutTests/external/wpt/webvtt/webvtt-file-format-parsing/webvtt-cue-text-parsing-rules/common.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..543fe46556f8d9f0622b280439f581e44458742f |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/webvtt-file-format-parsing/webvtt-cue-text-parsing-rules/common.js |
@@ -0,0 +1,189 @@ |
+var namespaces = { |
+ "html":"http://www.w3.org/1999/xhtml", |
+ "mathml":"http://www.w3.org/1998/Math/MathML", |
+ "svg":"http://www.w3.org/2000/svg", |
+ "xlink":"http://www.w3.org/1999/xlink", |
+ "xml":"http://www.w3.org/XML/1998/namespace", |
+ "xmlns":"http://www.w3.org/2000/xmlns/" |
+}; |
+ |
+var prefixes = {}; |
+for (var prefix in namespaces) { |
+ if (namespaces.hasOwnProperty(prefix)) { |
+ prefixes[namespaces[prefix]] = prefix; |
+ } |
+} |
+prefixes[namespaces["mathml"]] = "math"; |
+ |
+function format(format_string) { |
+ var insertions = Array.prototype.slice.call(arguments, 1); |
+ var regexp = /%s/g; |
+ var match_count = 0; |
+ var rv = format_string.replace(regexp, function(match) { |
+ var rv = insertions[match_count]; |
+ match_count++; |
+ return rv; |
+ }); |
+ return rv; |
+} |
+ |
+function test_serializer(element) { |
+ //element.normalize(); |
+ var lines = []; |
+ function serialize_element(element, indent) { |
+ var indent_spaces = (new Array(indent)).join(" "); |
+ switch(element.nodeType) { |
+ case Node.DOCUMENT_TYPE_NODE: |
+ if (element.name) { |
+ if (element.publicId || element.systemId) { |
+ var publicId = element.publicId ? element.publicId : ""; |
+ var systemId = element.systemId ? element.systemId : ""; |
+ lines.push(format("|%s<!DOCTYPE %s \"%s\" \"%s\">", indent_spaces, |
+ element.name, publicId, systemId)); |
+ } else { |
+ lines.push(format("|%s<!DOCTYPE %s>", indent_spaces, |
+ element.name)); |
+ } |
+ } else { |
+ lines.push(format("|%s<!DOCTYPE >", indent_spaces)); |
+ } |
+ break; |
+ case Node.DOCUMENT_NODE: |
+ lines.push("#document"); |
+ break; |
+ case Node.DOCUMENT_FRAGMENT_NODE: |
+ lines.push("#document-fragment"); |
+ break; |
+ case Node.PROCESSING_INSTRUCTION_NODE: |
+ lines.push(format("|%s<?%s %s>", indent_spaces, element.target, element.data)); |
+ break; |
+ case Node.COMMENT_NODE: |
+ lines.push(format("|%s<!-- %s -->", indent_spaces, element.nodeValue)); |
+ break; |
+ case Node.TEXT_NODE: |
+ lines.push(format("|%s\"%s\"", indent_spaces, element.nodeValue)); |
+ break; |
+ case Node.ELEMENT_NODE: |
+ if (element.getAttribute("data-skip") !== null) { |
+ return; |
+ } |
+ if (element.namespaceURI !== null && element.namespaceURI !== namespaces.html) { |
+ var name = format("%s %s", prefixes[element.namespaceURI], |
+ element.localName); |
+ } else { |
+ var name = element.localName; |
+ } |
+ lines.push(format("|%s<%s>", indent_spaces, name)); |
+ |
+ var attributes = Array.prototype.map.call( |
+ element.attributes, |
+ function(attr) { |
+ var name = (attr.namespaceURI ? prefixes[attr.namespaceURI] + " " : "") + |
+ attr.localName; |
+ return [name, attr.value]; |
+ }); |
+ attributes.sort(function (a, b) { |
+ var x = a[0]; |
+ var y = b[0]; |
+ if (x === y) { |
+ return 0; |
+ } |
+ return x > y ? 1 : -1; |
+ }); |
+ |
+ attributes.forEach( |
+ function(attr) { |
+ var indent_spaces = (new Array(indent + 2)).join(" "); |
+ lines.push(format("|%s%s=\"%s\"", indent_spaces, attr[0], attr[1])); |
+ } |
+ ); |
+ break; |
+ } |
+ indent += 2; |
+ Array.prototype.forEach.call(element.childNodes, |
+ function(node) { |
+ serialize_element(node, indent); |
+ }); |
+ } |
+ serialize_element(element, 0); |
+ return lines.join("\n"); |
+} |
+ |
+function print_diffs(test_id, uri_encoded_input, expected, actual, container) { |
+ container = container ? container : null; |
+ if (actual) { |
+ var diffs = mark_diffs(expected, actual); |
+ var expected_text = diffs[0]; |
+ var actual_text = diffs[1]; |
+ } else { |
+ var expected_text = expected; |
+ var actual_text = ""; |
+ } |
+ |
+ var tmpl = ["div", {"id":"${test_id}"}, |
+ ["h2", {}, "${test_id}"], |
+ function(vars) { |
+ if (vars.container !== null) { |
+ return ["div", {"class":"container"}, |
+ ["h3", {}, "innerHTML Container"], |
+ ["pre", {}, vars.container]]; |
+ } else { |
+ return null; |
+ } |
+ }, |
+ ["div", {"id":"input_${test_id}"}, ["h3", {}, "Input"], ["pre", {}, |
+ ["code", {}, decodeURIComponent(uri_encoded_input)]]], |
+ ["div", {"id":"expected_${test_id}"}, ["h3", {}, "Expected"], |
+ ["pre", {}, ["code", {}, expected_text]]], |
+ ["div", {"id":"actual_${test_id}"}, ["h3", {}, "Actual"], |
+ ["pre", {}, ["code", {}, actual_text]]] |
+ ]; |
+ |
+ var diff_dom = template.render(tmpl, {test_id:test_id, container:container}); |
+ document.body.appendChild(diff_dom); |
+} |
+ |
+function runTests(tests) { |
+ tests.forEach(function(test){ |
+ var expected = decodeURIComponent(test.expected); |
+ var t = async_test(document.title + ' - ' + test.name); |
+ t.step(function(){ |
+ var video = document.createElement('video'); |
+ var track = document.createElement('track'); |
+ assert_true('src' in track, 'track not supported'); |
+ t.test_id = test.name; |
+ t.url_encoded_input = test.input; |
+ t.expected = expected; |
+ track.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\n00:00.000 --> 00:01.000\n')+test.input; |
+ track['default'] = true; |
+ track.kind = 'subtitles'; |
+ track.onload = t.step_func(trackLoaded); |
+ track.onerror = t.step_func(trackError); |
+ video.appendChild(track); |
+ document.body.appendChild(video); |
+ }); |
+ }); |
+} |
+ |
+function trackLoaded(e) { |
+ var track = e.target; |
+ setTimeout(removeElm, 0, track.parentNode); |
+ var cue = track.track.cues[0]; |
+ var frag = cue.getCueAsHTML(); |
+ var got = test_serializer(frag); |
+ if (got !== this.expected) { |
+ print_diffs(this.test_id, this.url_encoded_input, this.expected, got); |
+ } |
+ assert_equals(got, this.expected); |
+ this.done(); |
+} |
+ |
+function trackError(e) { |
+ setTimeout(removeElm, 0, e.target.parentNode); |
+ assert_unreached('got error event'); |
+ this.done(); |
+} |
+ |
+function removeElm(elm) { |
+ document.body.removeChild(elm); |
+} |