browser/components/search/test/browser_healthreport.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/components/search/test/browser_healthreport.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,103 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +"use strict";
     1.8 +
     1.9 +function test() {
    1.10 +  requestLongerTimeout(2);
    1.11 +  waitForExplicitFinish();
    1.12 +
    1.13 +  try {
    1.14 +    let cm = Components.classes["@mozilla.org/categorymanager;1"]
    1.15 +                       .getService(Components.interfaces.nsICategoryManager);
    1.16 +    cm.getCategoryEntry("healthreport-js-provider-default", "SearchesProvider");
    1.17 +  } catch (ex) {
    1.18 +    // Health Report disabled, or no SearchesProvider.
    1.19 +    // We need a test or else we'll be marked as failure.
    1.20 +    ok(true, "Firefox Health Report is not enabled.");
    1.21 +    finish();
    1.22 +    return;
    1.23 +  }
    1.24 +
    1.25 +  function testFHR() {
    1.26 +    let reporter = Components.classes["@mozilla.org/datareporting/service;1"]
    1.27 +                                     .getService()
    1.28 +                                     .wrappedJSObject
    1.29 +                                     .healthReporter;
    1.30 +    ok(reporter, "Health Reporter available.");
    1.31 +    reporter.onInit().then(function onInit() {
    1.32 +      let provider = reporter.getProvider("org.mozilla.searches");
    1.33 +      let m = provider.getMeasurement("counts", 3);
    1.34 +
    1.35 +      m.getValues().then(function onData(data) {
    1.36 +        let now = new Date();
    1.37 +        let oldCount = 0;
    1.38 +
    1.39 +        // Find the right bucket for the "Foo" engine.
    1.40 +        let engine = Services.search.getEngineByName("Foo");
    1.41 +        let field = (engine.identifier || "other-Foo") + ".searchbar";
    1.42 +
    1.43 +        if (data.days.hasDay(now)) {
    1.44 +          let day = data.days.getDay(now);
    1.45 +          if (day.has(field)) {
    1.46 +            oldCount = day.get(field);
    1.47 +          }
    1.48 +        }
    1.49 +
    1.50 +        // Now perform a search and ensure the count is incremented.
    1.51 +        let tab = gBrowser.addTab();
    1.52 +        gBrowser.selectedTab = tab;
    1.53 +        let searchBar = BrowserSearch.searchBar;
    1.54 +
    1.55 +        searchBar.value = "firefox health report";
    1.56 +        searchBar.focus();
    1.57 +
    1.58 +        function afterSearch() {
    1.59 +          searchBar.value = "";
    1.60 +          gBrowser.removeTab(tab);
    1.61 +
    1.62 +          m.getValues().then(function onData(data) {
    1.63 +            ok(data.days.hasDay(now), "Have data for today.");
    1.64 +            let day = data.days.getDay(now);
    1.65 +
    1.66 +            is(day.get(field), oldCount + 1, "Performing a search increments FHR count by 1.");
    1.67 +
    1.68 +            let engine = Services.search.getEngineByName("Foo");
    1.69 +            Services.search.removeEngine(engine);
    1.70 +          });
    1.71 +        }
    1.72 +
    1.73 +        EventUtils.synthesizeKey("VK_RETURN", {});
    1.74 +        executeSoon(() => executeSoon(afterSearch));
    1.75 +      });
    1.76 +    });
    1.77 +  }
    1.78 +
    1.79 +  function observer(subject, topic, data) {
    1.80 +    switch (data) {
    1.81 +      case "engine-added":
    1.82 +        let engine = Services.search.getEngineByName("Foo");
    1.83 +        ok(engine, "Engine was added.");
    1.84 +        Services.search.currentEngine = engine;
    1.85 +        break;
    1.86 +
    1.87 +      case "engine-current":
    1.88 +        is(Services.search.currentEngine.name, "Foo", "Current engine is Foo");
    1.89 +        testFHR();
    1.90 +        break;
    1.91 +
    1.92 +      case "engine-removed":
    1.93 +        Services.obs.removeObserver(observer, "browser-search-engine-modified");
    1.94 +        finish();
    1.95 +        break;
    1.96 +    }
    1.97 +  }
    1.98 +
    1.99 +  Services.obs.addObserver(observer, "browser-search-engine-modified", false);
   1.100 +  Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml",
   1.101 +                            Ci.nsISearchEngine.DATA_XML,
   1.102 +                            "data:image/x-icon,%00",
   1.103 +                            false);
   1.104 +
   1.105 +}
   1.106 +

mercurial