summaryrefslogtreecommitdiffstats
path: root/Tools/RebaselineQueueServer/templates/builder-queue-edit.html
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/RebaselineQueueServer/templates/builder-queue-edit.html')
-rw-r--r--Tools/RebaselineQueueServer/templates/builder-queue-edit.html176
1 files changed, 176 insertions, 0 deletions
diff --git a/Tools/RebaselineQueueServer/templates/builder-queue-edit.html b/Tools/RebaselineQueueServer/templates/builder-queue-edit.html
new file mode 100644
index 0000000..21a0f02
--- /dev/null
+++ b/Tools/RebaselineQueueServer/templates/builder-queue-edit.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html id="add-form">
+<head>
+ <title>Rebaseline Queue: Edit</title>
+ <script src="http://test-results.appspot.com/dashboards/builders.js"></script>
+ <link rel="stylesheet" href="/static/styles.css" type="text/css">
+</head>
+<body">
+
+<div id="loading-indicator" class="status">Loading...</div>
+
+<form method="POST" id="form-template" style="display: none">
+ <table class="test-table">
+ <caption></caption>
+ <thead>
+ <th>Test</th>
+ <th>Expected</th>
+ <th>Actual</th>
+ <th>Results</th>
+ </thead>
+ <tbody></tbody>
+ <tbody>
+ <tr>
+ <td colspan="4" class="submit-row">
+ <input type="submit" value="">
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</form>
+
+<script>
+var TEST_RESULTS_SERVER = 'http://test-results.appspot.com/';
+var BUILDER_TO_GROUP = {};
+for (var builderGroupName in LAYOUT_TESTS_BUILDER_GROUPS) {
+ for (var builderName in LAYOUT_TESTS_BUILDER_GROUPS[builderGroupName]) {
+ BUILDER_TO_GROUP[builderName] = builderGroupName;
+ }
+}
+
+// Extract template parameters
+var builderName = '{{ builder_name|escapejs }}';
+var queuedTestNames = {{ queued_test_names|safe }};
+
+function init()
+{
+ var builderMaster = BUILDER_TO_MASTER[builderName];
+ var resultsUrl = TEST_RESULTS_SERVER + 'testfile?builder=' + builderName +
+ '&master=' + builderMaster.name +
+ '&testtype=layout-tests&name=full_results.json';
+
+ var script = document.createElement('script');
+ script.src = resultsUrl;
+ document.getElementsByTagName('head')[0].appendChild(script);
+}
+
+function ADD_RESULTS(results)
+{
+ var builderGroupName = BUILDER_TO_GROUP[builderName];
+
+ var tests = results.tests;
+ var failingTests = [];
+ var queuedTests = [];
+ for (var test in tests) {
+ var testResults = tests[test];
+ if (testResults.actual == testResults.expected ||
+ testResults.expected.split(' ').indexOf(testResults.actual) != -1 ||
+ testResults.actual == 'SKIP' ||
+ testResults.actual.indexOf('PASS') != -1 ||
+ (testResults.actual != 'PASS' && testResults.expected.indexOf('FAIL') != -1)) {
+ continue;
+ }
+
+ testResults.name = test;
+
+ if (queuedTestNames.indexOf(test) != -1) {
+ queuedTests.push(testResults);
+ queuedTestNames.splice(queuedTestNames.indexOf(test), 1);
+ } else {
+ failingTests.push(testResults);
+ }
+ }
+
+ // If we have remaining queued tests that are currently not failing,
+ // synthesize results for them.
+ queuedTestNames.forEach(function(queuedTestName) {
+ queuedTests.push({
+ name: queuedTestName,
+ actual: 'UNKNOWN',
+ expected: 'UNKNOWN'
+ });
+ });
+
+ document.getElementById('loading-indicator').style.display = 'none';
+
+ renderTestResults(
+ failingTests,
+ 'add',
+ 'Failing tests',
+ 'Add to rebaseline queue',
+ 'No failing tests.');
+ renderTestResults(
+ queuedTests,
+ 'remove',
+ 'Queued tests',
+ 'Remove from rebaseline queue',
+ 'No queued tests.');
+}
+
+function renderTestResults(testResults, formAction, title, submitLabel, emptyMessage)
+{
+ if (testResults.length == 0) {
+ var emptyNode = document.createElement('div');
+ emptyNode.className = 'status';
+ emptyNode.textContent = emptyMessage;
+ document.body.appendChild(emptyNode);
+ return;
+ }
+
+ var form = document.getElementById('form-template').cloneNode(true);
+ form.action = '/builder/' + builderName + '/queue/' + formAction;
+ form.style.display = '';
+ document.body.appendChild(form);
+
+ var testsTable = form.querySelector('.test-table');
+ testsTable.querySelector('caption').textContent = title;
+ testsTable.querySelector('input[type=submit]').value = submitLabel;
+
+ testResults.sort(function(a, b) {
+ return a.name < b.name ? -1 : (a.name > b.name ? 1 : 0);
+ });
+
+ testResults.forEach(function(result) {
+ var testRow = document.createElement('tr');
+
+ var testCell = document.createElement('td');
+ testRow.appendChild(testCell);
+ var testCheckbox = document.createElement('input');
+ testCheckbox.type = 'checkbox';
+ testCheckbox.name = 'test';
+ testCheckbox.value = result.name;
+ testCheckbox.id = result.name;
+ testCell.appendChild(testCheckbox);
+
+ var testName = document.createElement('label');
+ testName.textContent = result.name;
+ testName.setAttribute('for', result.name);
+ testCell.appendChild(testName);
+
+ var expectedCell = document.createElement('td');
+ testRow.appendChild(expectedCell);
+ expectedCell.textContent = result.expected;
+
+ var actualCell = document.createElement('td');
+ testRow.appendChild(actualCell);
+ actualCell.textContent = result.actual;
+
+ var resultsCell = document.createElement('td');
+ testRow.appendChild(resultsCell);
+ var resultsLink = document.createElement('a');
+ resultsLink.target = '_blank';
+ resultsLink.href = TEST_RESULTS_SERVER +
+ 'dashboards/flakiness_dashboard.html#tests=' + result.name +
+ '&group=' + builderGroupName;
+ resultsLink.textContent = 'Flakiness dashboard';
+ resultsCell.appendChild(resultsLink);
+
+ testsTable.tBodies[0].appendChild(testRow);
+ });
+}
+
+init();
+</script>
+
+</body>
+</html>