239 lines
7.6 KiB
HTML
239 lines
7.6 KiB
HTML
<title>html5lib test runner</title>
|
|
<script>
|
|
// Copyright (c) 2008 Geoffrey Sneddon
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
</script>
|
|
<script src=../resources/dump-as-markup.js></script>
|
|
<style>
|
|
.overview:hover {
|
|
background: #ccc;
|
|
}
|
|
iframe {
|
|
display: none;
|
|
}
|
|
</style>
|
|
<p>Script did not run</p>
|
|
<iframe></iframe>
|
|
<script>
|
|
if (window.testRunner)
|
|
testRunner.waitUntilDone();
|
|
Markup.noAutoDump();
|
|
Markup.useHTML5libOutputFormat();
|
|
|
|
var test_files = [
|
|
// 'resources/tests1.dat',
|
|
// 'resources/tests2.dat',
|
|
// 'resources/tests3.dat',
|
|
// 'resources/tests4.dat',
|
|
// 'resources/tests5.dat',
|
|
// 'resources/tests6.dat',
|
|
// 'resources/tests7.dat',
|
|
// 'resources/tests8.dat',
|
|
// 'resources/tests9.dat',
|
|
// 'resources/tests10.dat',
|
|
// 'resources/tests11.dat',
|
|
// 'resources/tests12.dat',
|
|
// 'resources/tests14.dat',
|
|
// 'resources/tests15.dat',
|
|
// 'resources/tests16.dat',
|
|
'resources/webkit01.dat',
|
|
// 'resources/doctype01.dat',
|
|
// 'resources/scriptdata01.dat',
|
|
// 'resources/entities01.dat',
|
|
// 'resources/comments01.dat'
|
|
],
|
|
tests = [],
|
|
iframe = document.getElementsByTagName("iframe")[0],
|
|
stat = document.getElementsByTagName("p")[0].firstChild,
|
|
file = "",
|
|
test_number = 1,
|
|
subtest_number = 0,
|
|
fail_list = [],
|
|
log = "";
|
|
|
|
iframe.contentWindow.document.open()
|
|
iframe.contentWindow.document.write("Test");
|
|
iframe.contentWindow.document.close();
|
|
var write = iframe.contentWindow.document.lastChild.lastChild.lastChild !== null;
|
|
var ignoreTitle = iframe.contentWindow.document.getElementsByTagName("title")[0] !== undefined;
|
|
|
|
window.onload = function()
|
|
{
|
|
stat.data = "Running";
|
|
run();
|
|
}
|
|
|
|
function run()
|
|
{
|
|
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
|
|
if (file = test_files.shift())
|
|
{
|
|
stat.data = "Retriving " + file;
|
|
test_number = 1;
|
|
fail_list = [];
|
|
log = "";
|
|
xhr.open("GET", file);
|
|
xhr.onreadystatechange = function()
|
|
{
|
|
if (xhr.readyState === 4)
|
|
{
|
|
tests = xhr.responseText.split(/(?:^|\n\n)#data\n/);
|
|
tests.shift();
|
|
test();
|
|
}
|
|
}
|
|
xhr.send(null);
|
|
} else {
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
}
|
|
|
|
function test()
|
|
{
|
|
var input, errorsStart, fragmentStart, contextElement, domStart, dom;
|
|
if (data = tests.shift())
|
|
{
|
|
subtest_number = 0;
|
|
stat.data = "Running test " + test_number + " of " + (test_number + tests.length) + " in " + file;
|
|
errorsStart = data.indexOf("\n#errors\n");
|
|
if (errorsStart !== -1)
|
|
{
|
|
input = data.substring(0, errorsStart);
|
|
fragmentStart = data.indexOf("\n#document-fragment\n")
|
|
domStart = data.indexOf("\n#document\n")
|
|
if (fragmentStart !== -1)
|
|
{
|
|
contextElement = data.substring(fragmentStart + 20, domStart);
|
|
}
|
|
if (domStart !== -1)
|
|
{
|
|
dom = data.substring(domStart + 11);
|
|
if (dom.substring(dom.length - 1) === "\n")
|
|
{
|
|
dom = dom.substring(0, dom.length - 1);
|
|
}
|
|
run_test(input, contextElement, dom);
|
|
return;
|
|
}
|
|
}
|
|
alert("Invalid test: " + data);
|
|
test();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
stat.data = "Finished running " + file;
|
|
var overview = document.createElement("p");
|
|
if (fail_list.length)
|
|
{
|
|
overview.innerHTML = file + ":<br>" + fail_list.join("<br>");
|
|
overview.className = "overview";
|
|
overview.title = "Click for more details";
|
|
overview.onclick = function()
|
|
{
|
|
this.nextSibling.style.display = this.nextSibling.style.display == "none" ? "block" : "none";
|
|
}
|
|
var detail = document.createElement("pre");
|
|
detail.appendChild(document.createTextNode(log.substring(2)));
|
|
detail.style.display = "none";
|
|
document.body.appendChild(overview);
|
|
document.body.appendChild(detail);
|
|
}
|
|
else
|
|
{
|
|
overview.innerHTML = file + ": PASS";
|
|
document.body.appendChild(overview);
|
|
}
|
|
stat.data = "";
|
|
run();
|
|
}
|
|
}
|
|
|
|
function run_test(input, contextElement, expected)
|
|
{
|
|
while (++subtest_number < input.length) {
|
|
lower_input = input.substring(0, subtest_number);
|
|
upper_input = input.substring(subtest_number, input.length);
|
|
if (contextElement)
|
|
{
|
|
var element = document.createElement(contextElement);
|
|
try
|
|
{
|
|
element.innerHTML = input;
|
|
}
|
|
catch(e) {}
|
|
process_result(input, element, expected);
|
|
}
|
|
else if (write)
|
|
{
|
|
iframe.contentWindow.document.open();
|
|
try
|
|
{
|
|
iframe.contentWindow.document.write(lower_input);
|
|
iframe.contentWindow.document.write(upper_input);
|
|
}
|
|
catch(e) {}
|
|
iframe.contentWindow.document.close();
|
|
if (ignoreTitle)
|
|
{
|
|
var title = iframe.contentWindow.document.getElementsByTagName("title")[0];
|
|
if (!title.innerHTML)
|
|
{
|
|
title.parentElement.removeChild(title);
|
|
}
|
|
}
|
|
process_result(input, iframe.contentWindow.document, expected);
|
|
}
|
|
else
|
|
{
|
|
iframe.onload = function()
|
|
{
|
|
if (ignoreTitle)
|
|
{
|
|
var title = iframe.contentWindow.document.getElementsByTagName("title")[0];
|
|
if (!title.innerHTML)
|
|
{
|
|
title.parentElement.removeChild(title);
|
|
}
|
|
}
|
|
process_result(input, iframe.contentWindow.document, expected, true);
|
|
}
|
|
iframe.src = "data:text/html," + encodeURIComponent(input);
|
|
break;
|
|
}
|
|
}
|
|
test();
|
|
}
|
|
|
|
function process_result(input, result, expected, async)
|
|
{
|
|
result = Markup.get(result);
|
|
if (result !== expected)
|
|
{
|
|
fail_list.push(test_number + "." + subtest_number);
|
|
log += "\n\nTest " + (test_number) + " of " + (test_number + tests.length) + " in " + file + " failed. Input:\n" + input + "\nGot:\n" + result + "\nExpected:\n" + expected;
|
|
}
|
|
test_number++;
|
|
if (async)
|
|
test();
|
|
}
|
|
</script>
|