1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <link rel="stylesheet" href="results-stylesheet.css">
6</head>
7<body>
8<template class="test-results-listing">
9 <h1>Tests that failed (1):</h1>
10 <table>
11 <template class="test-results-table-section">
12 <tr>
13 <td><span class="expand-button" onclick="toggleActualResults(this)"><span class="expand-button-text">+</span></span><a href="#">webkitpy.common.editdistance_unittest.EditDistanceTest.test_edit_distance</a></td>
14 </tr>
15 <tr class="hidden">
16 <td colspan="1"><pre class="actual-results">AssertionError: 2 != 6</pre></td>
17 </tr>
18 </template>
19 </table>
20</template>
21<template class="passing-test-listing">
22 <h1>Tests that passed (1):</h1>
23 <table>
24 <template class="passing-test-table-section">
25 <tr>
26 <td><a href="#">webkitpy.common.editdistance_unittest.EditDistanceTest.test_edit_distance</a></td>
27 </tr>
28 </template>
29 </table>
30</template>
31
32<script>
33
34var fileRequest = new XMLHttpRequest();
35fileRequest.open('GET', "results.json", false);
36fileRequest.responseType = 'json';
37fileRequest.send();
38
39var g_jsonp = fileRequest.response
40
41</script>
42
43<script>
44var TRAC_WEBKITPY_URL_PREFIX = "https://trac.webkit.org/browser/trunk/Tools/Scripts/";
45var PYTHON_UNIT_TEST_SUFFIX = "_unittest";
46var DisclosureState = {
47 OPEN: "–",
48 CLOSED: "+"
49};
50
51function matchesSelector(node, selector)
52{
53 if (node.matches)
54 return node.matches(selector);
55 if (node.webkitMatchesSelector)
56 return node.webkitMatchesSelector(selector);
57 if (node.mozMatchesSelector)
58 return node.mozMatchesSelector(selector);
59}
60
61function parentOfType(node, selector)
62{
63 while (node = node.parentNode) {
64 if (matchesSelector(node, selector))
65 return node;
66 }
67 return null;
68}
69
70function setActualResultsVisible(resultSection, visible)
71{
72 var functionToCall;
73 var newDisclosureState;
74 if (visible) {
75 newDisclosureState = DisclosureState.OPEN;
76 functionToCall = "remove";
77 } else {
78 newDisclosureState = DisclosureState.CLOSED;
79 functionToCall = "add";
80 }
81 var expandButtonText = resultSection.querySelector(".expand-button-text");
82 expandButtonText.textContent = newDisclosureState;
83 resultSection.nextElementSibling.classList[functionToCall]("hidden");
84}
85
86function toggleActualResults(element)
87{
88 setActualResultsVisible(parentOfType(element, "tr"), element.querySelector(".expand-button-text").textContent === DisclosureState.CLOSED);
89}
90
91function tracURLForPythonUnitTestName(unitTestName)
92{
93 var modulePath = unitTestName.substr(0, unitTestName.lastIndexOf(PYTHON_UNIT_TEST_SUFFIX + ".") + PYTHON_UNIT_TEST_SUFFIX.length);
94 return TRAC_WEBKITPY_URL_PREFIX + modulePath.replace(/\./g, "/") + ".py";
95}
96
97function passToResultFormat(passingTest)
98{
99 return {
100 name: passingTest,
101 result: ["pass"],
102 }
103}
104
105var TestCategories = [
106{
107 name: "Tests that failed",
108 tests: g_jsonp.failures,
109},
110{
111 name: "Tests that had error output",
112 tests: g_jsonp.errors,
113}
114];
115
116var listingContainer = document.createElement("div");
117var listingTemplate = document.querySelector(".test-results-listing").content;
118var tableSectionTemplate = listingTemplate.querySelector(".test-results-table-section").content;
119
120for (var i = 0; i < TestCategories.length; ++i) {
121 var testCategory = TestCategories[i];
122 var tests = testCategory.tests;
123 var numberOfTests = tests.length;
124
125 var listing = listingTemplate.cloneNode(true /* Deep copy */);
126 listing.querySelector("h1").textContent = testCategory.name + " (" + numberOfTests + "):";
127 var table = listing.querySelector("table");
128 for (var j = 0; j < numberOfTests; ++j) {
129 var test = tests[j];
130 var tableSection = tableSectionTemplate.cloneNode(true /* Deep copy */);
131 var a = tableSection.querySelector("a");
132 a.href = tracURLForPythonUnitTestName(test.name);
133 a.textContent = test.name;
134
135 setActualResultsVisible(tableSection.querySelector("tr"), false);
136
137 // FIXME: Consider creating hyperlinks to trac.webkit.org corresponding to each file referenced in the backtrace.
138 tableSection.querySelector(".actual-results").textContent = test.result;
139 table.appendChild(tableSection);
140 }
141 listingContainer.appendChild(listing);
142}
143
144var passingListingTemplate = document.querySelector(".passing-test-listing").content;
145var passingTableSectionTemplate = passingListingTemplate.querySelector(".passing-test-table-section").content;
146
147var passingTests = g_jsonp.passes;
148var numberOfPassingTests = passingTests.length;
149
150var listing = passingListingTemplate.cloneNode(true /* Deep copy */);
151listing.querySelector("h1").textContent = "Tests that passed (" + numberOfPassingTests + "):";
152var table = listing.querySelector("table");
153for (var j = 0; j < numberOfPassingTests; ++j) {
154 var testName = passingTests[j];
155 var tableSection = passingTableSectionTemplate.cloneNode(true /* Deep copy */);
156 var a = tableSection.querySelector("a");
157 a.href = tracURLForPythonUnitTestName(testName);
158 a.textContent = testName;
159
160 table.appendChild(tableSection);
161}
162listingContainer.appendChild(listing);
163
164document.body.appendChild(listingContainer);
165</script>
166</body>
167</html>