summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_keywordSearch_postData.js
blob: 3f700fa586c5a0ca7fb8b489a449dc8b11859b2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 **/

var gTests = [
  {
    name: "normal search (search service)",
    testText: "test search",
    expectText: "test+search"
  },
  {
    name: "?-prefixed search (search service)",
    testText: "?   foo  ",
    expectText: "foo"
  }
];

function test() {
  waitForExplicitFinish();

  let tab = gBrowser.selectedTab = gBrowser.addTab();

  let searchObserver = function search_observer(aSubject, aTopic, aData) {
    let engine = aSubject.QueryInterface(Ci.nsISearchEngine);
    info("Observer: " + aData + " for " + engine.name);

    if (aData != "engine-added")
      return;

    if (engine.name != "POST Search")
      return;

    Services.search.defaultEngine = engine;

    registerCleanupFunction(function () {
      Services.search.removeEngine(engine);
    });

    // ready to execute the tests!
    executeSoon(nextTest);
  };

  Services.obs.addObserver(searchObserver, "browser-search-engine-modified", false);

  registerCleanupFunction(function () {
    gBrowser.removeTab(tab);

    Services.obs.removeObserver(searchObserver, "browser-search-engine-modified");
  });

  Services.search.addEngine("http://test:80/browser/browser/base/content/test/general/POSTSearchEngine.xml",
                            null, null, false);
}

var gCurrTest;
function nextTest() {
  if (gTests.length) {
    gCurrTest = gTests.shift();
    doTest();
  } else {
    finish();
  }
}

function doTest() {
  info("Running test: " + gCurrTest.name);

  waitForLoad(function () {
    let loadedText = gBrowser.contentDocument.body.textContent;
    ok(loadedText, "search page loaded");
    let needle = "searchterms=" + gCurrTest.expectText;
    is(loadedText, needle, "The query POST data should be returned in the response");
    nextTest();
  });

  // Simulate a user entering search terms
  gURLBar.value = gCurrTest.testText;
  gURLBar.focus();
  EventUtils.synthesizeKey("VK_RETURN", {});
}


function waitForLoad(cb) {
  let browser = gBrowser.selectedBrowser;
  browser.addEventListener("load", function listener() {
    if (browser.currentURI.spec == "about:blank")
      return;
    info("Page loaded: " + browser.currentURI.spec);
    browser.removeEventListener("load", listener, true);

    cb();
  }, true);
}