subtree['bar.html'] = mockExpectation('TEXT', 'FAIL');
subtree['bar1.html'] = mockExpectation('TEXT', 'FAIL');
subtree['bar2.html'] = mockExpectation('TEXT', 'FAIL');
-
+
+ runTest(results, function() {
+ if (window.eventSender) {
+ eventSender.keyDown('k'); // previous
+ var testRows = document.querySelectorAll('#results-table tbody tr');
+ assertTrue(!testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(testRows[2].classList.contains('current'));
+ }
+ });
+
+ runTest(results, function() {
+ if (window.eventSender) {
+ eventSender.keyDown('j'); // next
+ var testRows = document.querySelectorAll('#results-table tbody tr');
+ assertTrue(testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
+ }
+ });
+
runTest(results, function() {
assertTrue(document.getElementById('results-table'));
assertTrue(visibleExpandLinks().length == 3);
if (window.eventSender) {
+ eventSender.keyDown('i', ["metaKey"]);
+ eventSender.keyDown('i', ["shiftKey"]);
+ eventSender.keyDown('i', ["ctrlKey"]);
+ var testRows = document.querySelectorAll('#results-table tbody tr');
+ assertTrue(!testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
+
eventSender.keyDown('i'); // first
- var expandButtons = document.querySelectorAll('#results-table tbody .expand-button');
- assertTrue(expandButtons[0].classList.contains('current'));
- assertTrue(!expandButtons[1].classList.contains('current'));
- assertTrue(!expandButtons[2].classList.contains('current'));
+ assertTrue(testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
+
+ eventSender.keyDown('j', ["metaKey"]);
+ eventSender.keyDown('j', ["shiftKey"]);
+ eventSender.keyDown('j', ["ctrlKey"]);
+ assertTrue(testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
eventSender.keyDown('j'); // next
- var expandButtons = document.querySelectorAll('#results-table tbody .expand-button');
- assertTrue(!expandButtons[0].classList.contains('current'));
- assertTrue(expandButtons[1].classList.contains('current'));
- assertTrue(!expandButtons[2].classList.contains('current'));
+ assertTrue(!testRows[0].classList.contains('current'));
+ assertTrue(testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
+
+ eventSender.keyDown('k', ["metaKey"]);
+ eventSender.keyDown('k', ["shiftKey"]);
+ eventSender.keyDown('k', ["ctrlKey"]);
+ assertTrue(!testRows[0].classList.contains('current'));
+ assertTrue(testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
eventSender.keyDown('k'); // previous
- var expandButtons = document.querySelectorAll('#results-table tbody .expand-button');
- assertTrue(expandButtons[0].classList.contains('current'));
- assertTrue(!expandButtons[1].classList.contains('current'));
- assertTrue(!expandButtons[2].classList.contains('current'));
+ assertTrue(testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
+
+ eventSender.keyDown('l', ["metaKey"]);
+ eventSender.keyDown('l', ["shiftKey"]);
+ eventSender.keyDown('l', ["ctrlKey"]);
+ assertTrue(testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(!testRows[2].classList.contains('current'));
eventSender.keyDown('l'); // last
- var expandButtons = document.querySelectorAll('#results-table tbody .expand-button');
- assertTrue(!expandButtons[0].classList.contains('current'));
- assertTrue(!expandButtons[1].classList.contains('current'));
- assertTrue(expandButtons[2].classList.contains('current'));
+ assertTrue(!testRows[0].classList.contains('current'));
+ assertTrue(!testRows[1].classList.contains('current'));
+ assertTrue(testRows[2].classList.contains('current'));
eventSender.keyDown('i'); // first
- eventSender.keyDown('e'); // expand
+
+ eventSender.keyDown('e', ["metaKey"]);
+ eventSender.keyDown('e', ["shiftKey"]);
+ eventSender.keyDown('e', ["ctrlKey"]);
var expandLinks = document.querySelectorAll('.expand-button-text');
+ assertTrue(!isExpanded(expandLinks[0]));
+
+ eventSender.keyDown('e'); // expand
+ assertTrue(isExpanded(expandLinks[0]));
+
+ eventSender.keyDown('c', ["metaKey"]);
+ eventSender.keyDown('c', ["shiftKey"]);
+ eventSender.keyDown('c', ["ctrlKey"]);
assertTrue(isExpanded(expandLinks[0]));
eventSender.keyDown('c'); // collapse
assertTrue(isCollapsed(expandLinks[0]));
- eventSender.keyDown('f'); // flag
+ eventSender.keyDown('f', ["metaKey"]);
+ eventSender.keyDown('f', ["shiftKey"]);
+ eventSender.keyDown('f', ["ctrlKey"]);
var flaggedTestsTextbox = document.getElementById('flagged-tests');
- flaggedTestsTextbox.innerText == 'bar.html';
+ assertTrue(flaggedTestsTextbox.innerText == '');
+
+ eventSender.keyDown('f'); // flag
+ assertTrue(flaggedTestsTextbox.innerText == 'foo/bar.html');
+
+ eventSender.keyDown('j'); // next
+ eventSender.keyDown('f'); // flag
+ assertTrue(flaggedTestsTextbox.innerText == 'foo/bar.html\nfoo/bar1.html');
+
+ document.getElementById('use-newlines').checked = false;
+ TestNavigator.updateFlaggedTests();
+ assertTrue(flaggedTestsTextbox.innerText == 'foo/bar.html foo/bar1.html');
eventSender.keyDown('f'); // unflag
- flaggedTestsTextbox.innerText == '';
+ assertTrue(flaggedTestsTextbox.innerText == 'foo/bar.html');
+
+ eventSender.keyDown('k'); // previous
+ eventSender.keyDown('f'); // flag
+ assertTrue(flaggedTestsTextbox.innerText == '');
}
});
cursor: default;
}
-.expand-button.current {
+.current {
color: red;
}
+.current .expand-button {
+ border-color: red;
+}
+
.expand-button-text {
position: absolute;
top: -0.3em;
}
.test-link.flagged:after {
- content: ' (flagged)';
+ content: ' \2691';
}
.stopped-running-early-message {
var TestNavigator = {};
-TestNavigator.currentTestIndex = 0;
-TestNavigator.flaggedTests = {};
+TestNavigator.reset = function() {
+ TestNavigator.currentTestIndex = -1;
+ TestNavigator.flaggedTests = {};
+}
TestNavigator.handleKeyEvent = function(event)
{
+ if (event.metaKey || event.shiftKey || event.ctrlKey)
+ return;
+
switch (String.fromCharCode(event.charCode)) {
case 'i':
TestNavigator._scrollToFirstTest();
TestNavigator._scrollToNextTest = function()
{
- if (TestNavigator._setCurrentTest(TestNavigator.currentTestIndex + 1))
+ if (TestNavigator.currentTestIndex == -1)
+ TestNavigator._scrollToFirstTest();
+ else if (TestNavigator._setCurrentTest(TestNavigator.currentTestIndex + 1))
TestNavigator._scrollToCurrentTest();
}
TestNavigator._scrollToPreviousTest = function()
{
- if (TestNavigator._setCurrentTest(TestNavigator.currentTestIndex - 1))
+ if (TestNavigator.currentTestIndex == -1)
+ TestNavigator._scrollToLastTest();
+ else if (TestNavigator._setCurrentTest(TestNavigator.currentTestIndex - 1))
TestNavigator._scrollToCurrentTest();
}
testLink.classList.add('flagged');
TestNavigator.flaggedTests[testName] = 1;
}
-
+
+ TestNavigator.updateFlaggedTests();
+}
+
+TestNavigator.updateFlaggedTests = function()
+{
var flaggedTestTextbox = document.getElementById('flagged-tests');
if (!flaggedTestTextbox) {
var flaggedTestContainer = document.createElement('div');
- flaggedTestContainer.className = 'flagged-test-container';
- flaggedTestContainer.innerHTML = '<h2>Flagged Tests</h2><div id="flagged-tests" contentEditable></div>';
+ flaggedTestContainer.id = 'flagged-test-container';
+ flaggedTestContainer.innerHTML = '<h2>Flagged Tests</h2><pre id="flagged-tests" contentEditable></pre>';
document.body.appendChild(flaggedTestContainer);
flaggedTestTextbox = document.getElementById('flagged-tests');
}
-
var flaggedTests = Object.keys(this.flaggedTests);
flaggedTests.sort();
- flaggedTestTextbox.innerHTML = flaggedTests.join('<br>');
+ var separator = document.getElementById('use-newlines').checked ? '\n' : ' ';
+ flaggedTestTextbox.innerHTML = flaggedTests.join(separator);
+ document.getElementById('flagged-test-container').style.display = flaggedTests.length ? '' : 'none';
}
TestNavigator._setCurrentTest = function(testIndex)
var currExpandLink = links[TestNavigator.currentTestIndex];
if (currExpandLink)
- currExpandLink.parentNode.classList.remove('current');
+ parentOfType(currExpandLink, 'tr').classList.remove('current');
TestNavigator.currentTestIndex = testIndex;
currExpandLink = links[TestNavigator.currentTestIndex];
- currExpandLink.parentNode.classList.add('current');
+ parentOfType(currExpandLink, 'tr').classList.add('current');
return true;
}
'.expected { display: none; }' : '';
TestNavigator.onlyShowUnexpectedFailuresChanged();
- // if (onlyShowUnexpectedFailures() && parentOfType(TestNavigator.currentTestLink(), 'tbody').classList.contains('expected'))
- // TestNavigator.currentTestLink().classList.remove('current');
}
var OptionWriter = {};
forEach(document.querySelectorAll('#options-menu input'), function(input) { input.onchange(); });
}
+function handleToggleUseNewlines()
+{
+ OptionWriter.save();
+ TestNavigator.updateFlaggedTests();
+}
+
function handleToggleImagesChange()
{
OptionWriter.save();
'<div id=options-menu class=hidden-menu>' +
'<label><input id="unexpected-results" type=checkbox checked onchange="handleUnexpectedResultsChange()">Only unexpected results</label>' +
'<label><input id="toggle-images" type=checkbox checked onchange="handleToggleImagesChange()">Toggle images</label>' +
+ '<label title="Use newlines instead of spaces to separate flagged tests"><input id="use-newlines" type=checkbox checked onchange="handleToggleUseNewlines()">Use newlines</input>' +
'</div></div>';
if (globalState().results.interrupted)
}
}
+ TestNavigator.reset();
OptionWriter.apply();
}
</script>