[Release] Webkit2-efl-123997_0.11.85
[framework/web/webkit-efl.git] / Tools / RebaselineQueueServer / templates / builder-queue-edit.html
1 <!DOCTYPE html>
2 <html id="add-form">
3 <head>
4     <title>Rebaseline Queue: Edit</title>
5     <script src="http://test-results.appspot.com/dashboards/builders.js"></script>
6     <link rel="stylesheet" href="/static/styles.css" type="text/css">
7 </head>
8 <body">
9
10 <div id="loading-indicator" class="status">Loading...</div>
11
12 <form method="POST" id="form-template" style="display: none">
13     <table class="test-table">
14         <caption></caption>
15         <thead>
16             <th>Test</th>
17             <th>Expected</th>
18             <th>Actual</th>
19             <th>Results</th>
20         </thead>
21         <tbody></tbody>
22         <tbody>
23             <tr>
24               <td colspan="4" class="submit-row">
25                 <input type="submit" value="">
26               </td>
27             </tr>
28         </tbody>
29     </table>
30 </form>
31
32 <script>
33 var TEST_RESULTS_SERVER = 'http://test-results.appspot.com/';
34 var BUILDER_TO_GROUP = {};
35 for (var builderGroupName in LAYOUT_TESTS_BUILDER_GROUPS) {
36     for (var builderName in LAYOUT_TESTS_BUILDER_GROUPS[builderGroupName]) {
37         BUILDER_TO_GROUP[builderName] = builderGroupName;
38     }
39 }
40
41 // Extract template parameters
42 var builderName = '{{ builder_name|escapejs }}';
43 var queuedTestNames = {{ queued_test_names|safe }};
44
45 function init()
46 {
47   var builderMaster = BUILDER_TO_MASTER[builderName] || CHROMIUM_GPU_BUILDER_MASTER;
48   var resultsUrl = TEST_RESULTS_SERVER + 'testfile?builder=' + builderName +
49       '&master=' + builderMaster.name +
50       '&testtype=layout-tests&name=full_results.json';
51
52   var script = document.createElement('script');
53   script.src = resultsUrl;
54   document.getElementsByTagName('head')[0].appendChild(script);
55 }
56
57 function ADD_RESULTS(results)
58 {
59     var builderGroupName = BUILDER_TO_GROUP[builderName];
60
61     var failingTests = [];
62     var queuedTests = [];
63     function processTestResult(test, results) {
64         var actual = results.actual;
65         var expected = results.expected;
66         if (actual == expected ||
67             expected.split(' ').indexOf(actual) != -1 ||
68             actual == 'SKIP' ||
69             actual.indexOf('PASS') != -1 ||
70             (expected.indexOf('FAIL') != -1 && actual.indexOf('TIMEOUT') == -1)) {
71             continue;
72         }
73
74         results.name = test;
75
76         if (queuedTestNames.indexOf(test) != -1) {
77             queuedTests.push(results);
78             queuedTestNames.splice(queuedTestNames.indexOf(test), 1);
79         } else {
80             failingTests.push(results);
81         }
82     }
83
84     function gatherTests(path, testTree) {
85         if ('actual' in testTree) {
86             processTestResult(path, testTree);
87         } else {
88             if (path) {
89               path += '/';
90             }
91             for (var key in testTree) {
92                 gatherTests(path + key, testTree[key]);
93             }
94         }
95     }
96     gatherTests('', results.tests);
97
98     // If we have remaining queued tests that are currently not failing,
99     // synthesize results for them.
100     queuedTestNames.forEach(function(queuedTestName) {
101         queuedTests.push({
102           name: queuedTestName,
103           actual: 'UNKNOWN',
104           expected: 'UNKNOWN'
105         });
106     });
107
108     document.getElementById('loading-indicator').style.display = 'none';
109
110     renderTestResults(
111         failingTests,
112         'add',
113         'Failing tests',
114         'Add to rebaseline queue',
115         'No failing tests.');
116     renderTestResults(
117         queuedTests,
118         'remove',
119         'Queued tests',
120         'Remove from rebaseline queue',
121         'No queued tests.');
122 }
123
124 function renderTestResults(testResults, formAction, title, submitLabel, emptyMessage)
125 {
126     if (testResults.length == 0) {
127         var emptyNode = document.createElement('div');
128         emptyNode.className = 'status';
129         emptyNode.textContent = emptyMessage;
130         document.body.appendChild(emptyNode);
131         return;
132     }
133
134     var form = document.getElementById('form-template').cloneNode(true);
135     form.action = '/builder/' + builderName + '/queue/' + formAction;
136     form.style.display = '';
137     document.body.appendChild(form);
138
139     var testsTable = form.querySelector('.test-table');
140     testsTable.querySelector('caption').textContent = title;
141     testsTable.querySelector('input[type=submit]').value = submitLabel;
142
143     testResults.sort(function(a, b) {
144         return a.name < b.name ? -1 : (a.name > b.name ? 1 : 0);
145     });
146
147     testResults.forEach(function(result) {
148         var testRow = document.createElement('tr');
149
150         var testCell = document.createElement('td');
151         testRow.appendChild(testCell);
152         var testCheckbox = document.createElement('input');
153         testCheckbox.type = 'checkbox';
154         testCheckbox.name = 'test';
155         testCheckbox.value = result.name;
156         testCheckbox.id = result.name;
157         testCell.appendChild(testCheckbox);
158
159         var testName = document.createElement('label');
160         testName.textContent = result.name;
161         testName.setAttribute('for', result.name);
162         testCell.appendChild(testName);
163
164         var expectedCell = document.createElement('td');
165         testRow.appendChild(expectedCell);
166         expectedCell.textContent = result.expected;
167
168         var actualCell = document.createElement('td');
169         testRow.appendChild(actualCell);
170         actualCell.textContent = result.actual;
171
172         var resultsCell = document.createElement('td');
173         testRow.appendChild(resultsCell);
174         var resultsLink = document.createElement('a');
175         resultsLink.target = '_blank';
176         resultsLink.href = TEST_RESULTS_SERVER +
177             'dashboards/flakiness_dashboard.html#tests=' + result.name +
178             '&group=' + builderGroupName;
179         resultsLink.textContent = 'Flakiness dashboard';
180         resultsCell.appendChild(resultsLink);
181
182         testsTable.tBodies[0].appendChild(testRow);
183     });
184 }
185
186 init();
187 </script>
188
189 </body>
190 </html>