/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ // Test that the selector-search input proposes ids and classes even when . and // # is missing, but that this only occurs when the query is one word (no // selector combination) function test() { waitForExplicitFinish(); let inspector, searchBox, state, popup; // The various states of the inspector: [key, suggestions array] // [ // what key to press, // suggestions array with count [ // [suggestion1, count1], [suggestion2] ... // ] count can be left to represent 1 // ] let keyStates = [ ["s", [["span", 1], [".span", 1], ["#span", 1]]], ["p", [["span", 1], [".span", 1], ["#span", 1]]], ["a", [["span", 1], [".span", 1], ["#span", 1]]], ["n", []], [" ", [["span div", 1]]], ["d", [["span div", 1]]], // mixed tag/class/id suggestions only work for the first word ["VK_BACK_SPACE", [["span div", 1]]], ["VK_BACK_SPACE", []], ["VK_BACK_SPACE", [["span", 1], [".span", 1], ["#span", 1]]], ["VK_BACK_SPACE", [["span", 1], [".span", 1], ["#span", 1]]], ["VK_BACK_SPACE", [["span", 1], [".span", 1], ["#span", 1]]], ["VK_BACK_SPACE", []], // Test that mixed tags, classes and ids are grouped by types, sorted by // count and alphabetical order ["b", [ ["button", 3], ["body", 1], [".bc", 3], [".ba", 1], [".bb", 1], ["#ba", 1], ["#bb", 1], ["#bc", 1] ]], ]; gBrowser.selectedTab = gBrowser.addTab(); gBrowser.selectedBrowser.addEventListener("load", function onload() { gBrowser.selectedBrowser.removeEventListener("load", onload, true); waitForFocus(setupTest, content); }, true); content.location = "data:text/html," + "" + "
" + "
" + "" + "" + ""; function $(id) { if (id == null) return null; return content.document.getElementById(id); } function setupTest() { openInspector(startTest); } function startTest(aInspector) { inspector = aInspector; searchBox = inspector.panelWin.document.getElementById("inspector-searchbox"); popup = inspector.searchSuggestions.searchPopup; focusSearchBoxUsingShortcut(inspector.panelWin, function() { searchBox.addEventListener("command", checkState, true); checkStateAndMoveOn(0); }); } function checkStateAndMoveOn(index) { if (index == keyStates.length) { finishUp(); return; } let [key, suggestions] = keyStates[index]; state = index; info("pressing key " + key + " to get suggestions " + JSON.stringify(suggestions)); EventUtils.synthesizeKey(key, {}, inspector.panelWin); } function checkState(event) { inspector.searchSuggestions._lastQuery.then(() => { let [key, suggestions] = keyStates[state]; let actualSuggestions = popup.getItems(); is(popup.isOpen ? actualSuggestions.length: 0, suggestions.length, "There are expected number of suggestions at " + state + "th step."); actualSuggestions.reverse(); for (let i = 0; i < suggestions.length; i++) { is(suggestions[i][0], actualSuggestions[i].label, "The suggestion at " + i + "th index for " + state + "th step is correct.") is(suggestions[i][1] || 1, actualSuggestions[i].count, "The count for suggestion at " + i + "th index for " + state + "th step is correct.") } checkStateAndMoveOn(state + 1); }); } function finishUp() { searchBox = null; popup = null; gBrowser.removeCurrentTab(); finish(); } }