michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: let newTabs = []; michael@0: michael@0: // ---------- michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: // set up our tabs michael@0: let urlBase = "http://mochi.test:8888/browser/browser/components/tabview/test/"; michael@0: let tabOne = gBrowser.addTab(urlBase + "search1.html"); michael@0: let tabTwo = gBrowser.addTab(urlBase + "search2.html"); michael@0: newTabs = [ tabOne, tabTwo ]; michael@0: michael@0: // make sure our tabs are loaded so their titles are right michael@0: let stillToLoad = 0; michael@0: let onLoad = function() { michael@0: this.removeEventListener("load", onLoad, true); michael@0: michael@0: stillToLoad--; michael@0: if (!stillToLoad) { michael@0: // show the tab view michael@0: window.addEventListener("tabviewshown", onTabViewWindowLoaded, false); michael@0: ok(!TabView.isVisible(), "Tab View is hidden"); michael@0: TabView.toggle(); michael@0: } michael@0: } michael@0: michael@0: newTabs.forEach(function(tab) { michael@0: stillToLoad++; michael@0: gBrowser.getBrowserForTab(tab).addEventListener("load", onLoad, true); michael@0: }); michael@0: } michael@0: michael@0: // ---------- michael@0: function onTabViewWindowLoaded() { michael@0: window.removeEventListener("tabviewshown", onTabViewWindowLoaded, false); michael@0: ok(TabView.isVisible(), "Tab View is visible"); michael@0: michael@0: let contentWindow = document.getElementById("tab-view").contentWindow; michael@0: let search = contentWindow.document.getElementById("search"); michael@0: let searchButton = contentWindow.document.getElementById("searchbutton"); michael@0: michael@0: ok(searchButton, "Search button exists"); michael@0: michael@0: let onSearchEnabled = function() { michael@0: contentWindow.removeEventListener( michael@0: "tabviewsearchenabled", onSearchEnabled, false); michael@0: michael@0: ok(search.style.display != "none", "Search is enabled"); michael@0: michael@0: let searchBox = contentWindow.document.getElementById("searchbox"); michael@0: ok(contentWindow.document.hasFocus() && michael@0: contentWindow.document.activeElement == searchBox, michael@0: "The search box has focus"); michael@0: michael@0: searchTest(contentWindow); michael@0: } michael@0: contentWindow.addEventListener("tabviewsearchenabled", onSearchEnabled, false); michael@0: // enter search mode michael@0: EventUtils.sendMouseEvent({ type: "mousedown" }, searchButton, contentWindow); michael@0: } michael@0: michael@0: // ---------- michael@0: function searchTest(contentWindow) { michael@0: let searchBox = contentWindow.document.getElementById("searchbox"); michael@0: michael@0: // force an update to make sure the correct titles are in the TabItems michael@0: let tabItems = contentWindow.TabItems.getItems(); michael@0: ok(tabItems.length == 3, "Have three tab items"); michael@0: tabItems.forEach(function(tabItem) { michael@0: contentWindow.TabItems._update(tabItem.tab); michael@0: }); michael@0: michael@0: // empty string michael@0: searchBox.setAttribute("value", ""); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 0, michael@0: "Match nothing if it's an empty string"); michael@0: michael@0: // one char michael@0: searchBox.setAttribute("value", "s"); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 0, michael@0: "Match nothing if the length of search term is less than 2"); michael@0: michael@0: // the full title michael@0: searchBox.setAttribute("value", "search test 1"); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 1, michael@0: "Match something when the whole title exists"); michael@0: michael@0: // part of title michael@0: searchBox.setAttribute("value", "search"); michael@0: contentWindow.Search.perform(); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 2, michael@0: "Match something when a part of title exists"); michael@0: michael@0: // unique part of a url michael@0: searchBox.setAttribute("value", "search1.html"); michael@0: contentWindow.Search.perform(); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 1, michael@0: "Match something when a unique part of a url exists"); michael@0: michael@0: // common part of a url michael@0: searchBox.setAttribute("value", "tabview"); michael@0: contentWindow.Search.perform(); michael@0: is(new contentWindow.TabMatcher( michael@0: searchBox.getAttribute("value")).matched().length, 2, michael@0: "Match something when a common part of a url exists"); michael@0: michael@0: cleanup(contentWindow); michael@0: } michael@0: michael@0: // ---------- michael@0: function cleanup(contentWindow) { michael@0: contentWindow.Search.hide(null); michael@0: let onTabViewHidden = function() { michael@0: window.removeEventListener("tabviewhidden", onTabViewHidden, false); michael@0: ok(!TabView.isVisible(), "Tab View is hidden"); michael@0: michael@0: gBrowser.removeTab(newTabs[0]); michael@0: gBrowser.removeTab(newTabs[1]); michael@0: michael@0: finish(); michael@0: } michael@0: window.addEventListener("tabviewhidden", onTabViewHidden, false); michael@0: EventUtils.synthesizeKey("VK_RETURN", {}); michael@0: }