diff options
Diffstat (limited to 'mobile/android/tests/browser/robocop/testFindInPage.js')
-rw-r--r-- | mobile/android/tests/browser/robocop/testFindInPage.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/mobile/android/tests/browser/robocop/testFindInPage.js b/mobile/android/tests/browser/robocop/testFindInPage.js new file mode 100644 index 000000000..485ae5e4e --- /dev/null +++ b/mobile/android/tests/browser/robocop/testFindInPage.js @@ -0,0 +1,89 @@ +// -*- indent-tabs-mode: nil; js-indent-level: 2 -*- +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +var Cu = Components.utils; + +Cu.import("resource://gre/modules/Messaging.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +const TEST_URL = "http://mochi.test:8888/tests/robocop/robocop_text_page.html"; + +function promiseBrowserEvent(browser, eventType) { + return new Promise((resolve) => { + function handle(event) { + do_print("Received event " + eventType + " from browser"); + browser.removeEventListener(eventType, handle, true); + resolve(event); + } + + browser.addEventListener(eventType, handle, true); + do_print("Now waiting for " + eventType + " event from browser"); + }); +} + +function openTabWithUrl(url) { + do_print("Going to open " + url); + let browserApp = Services.wm.getMostRecentWindow("navigator:browser").BrowserApp; + let browser = browserApp.addTab(url, { selected: true, parentId: browserApp.selectedTab.id }).browser; + + return promiseBrowserEvent(browser, "load") + .then(() => { return browser; }); +} + +function findInPage(browser, text, nrOfMatches) { + let repaintPromise = promiseBrowserEvent(browser, "MozAfterPaint"); + do_print("Send findInPageMessage: " + text + " nth: " + nrOfMatches); + Messaging.sendRequest({ type: "Test:FindInPage", text: text, nrOfMatches: nrOfMatches }); + return repaintPromise; +} + +function closeFindInPage(browser) { + let repaintPromise = promiseBrowserEvent(browser, "MozAfterPaint"); + do_print("Send closeFindInPageMessage"); + Messaging.sendRequest({ type: "Test:CloseFindInPage" }); + return repaintPromise; +} + +function assertSelection(document, expectedSelection = false, expectedAnchorText = false) { + let sel = document.getSelection(); + if (!expectedSelection) { + do_print("Assert empty selection"); + do_check_eq(sel.toString(), ""); + } else { + do_print("Assert selection to be " + expectedSelection); + do_check_eq(sel.toString(), expectedSelection); + } + if (expectedAnchorText) { + do_print("Assert anchor text to be " + expectedAnchorText); + do_check_eq(sel.anchorNode.textContent, expectedAnchorText); + } +} + +add_task(function* testFindInPage() { + let browser = yield openTabWithUrl(TEST_URL); + let document = browser.contentDocument; + + yield findInPage(browser, "Robocoop", 1); + assertSelection(document); + + yield closeFindInPage(browser); + assertSelection(document); + + yield findInPage(browser, "Robocop", 1); + assertSelection(document, "Robocop", " Robocop 1 "); + + yield closeFindInPage(browser); + assertSelection(document); + + yield findInPage(browser, "Robocop", 3); + assertSelection(document, "Robocop", " Robocop 3 "); + + yield closeFindInPage(browser); + assertSelection(document); +}); + +run_next_test(); |