toolkit/components/search/tests/xpcshell/head_search.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/components/search/tests/xpcshell/head_search.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,140 @@
     1.4 +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* vim:set ts=2 sw=2 sts=2 et: */
     1.6 +
     1.7 +Components.utils.import("resource://gre/modules/Services.jsm");
     1.8 +Components.utils.import("resource://gre/modules/NetUtil.jsm");
     1.9 +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
    1.10 +Components.utils.import("resource://gre/modules/FileUtils.jsm");
    1.11 +Components.utils.import("resource://gre/modules/Promise.jsm");
    1.12 +Components.utils.import("resource://testing-common/AppInfo.jsm");
    1.13 +
    1.14 +const BROWSER_SEARCH_PREF = "browser.search.";
    1.15 +const NS_APP_SEARCH_DIR = "SrchPlugns";
    1.16 +
    1.17 +const MODE_RDONLY = FileUtils.MODE_RDONLY;
    1.18 +const MODE_WRONLY = FileUtils.MODE_WRONLY;
    1.19 +const MODE_CREATE = FileUtils.MODE_CREATE;
    1.20 +const MODE_TRUNCATE = FileUtils.MODE_TRUNCATE;
    1.21 +
    1.22 +// Need to create and register a profile folder.
    1.23 +var gProfD = do_get_profile();
    1.24 +
    1.25 +function dumpn(text)
    1.26 +{
    1.27 +  dump("search test: " + text + "\n");
    1.28 +}
    1.29 +
    1.30 +/**
    1.31 + * Clean the profile of any metadata files left from a previous run.
    1.32 + */
    1.33 +function removeMetadata()
    1.34 +{
    1.35 +  let file = gProfD.clone();
    1.36 +  file.append("search-metadata.json");
    1.37 +  if (file.exists()) {
    1.38 +    file.remove(false);
    1.39 +  }
    1.40 +
    1.41 +  file = gProfD.clone();
    1.42 +  file.append("search.sqlite");
    1.43 +  if (file.exists()) {
    1.44 +    file.remove(false);
    1.45 +  }
    1.46 +}
    1.47 +
    1.48 +function removeCacheFile()
    1.49 +{
    1.50 +  let file = gProfD.clone();
    1.51 +  file.append("search.json");
    1.52 +  if (file.exists()) {
    1.53 +    file.remove(false);
    1.54 +  }
    1.55 +}
    1.56 +
    1.57 +/**
    1.58 + * Clean the profile of any cache file left from a previous run.
    1.59 + */
    1.60 +function removeCache()
    1.61 +{
    1.62 +  let file = gProfD.clone();
    1.63 +  file.append("search.json");
    1.64 +  if (file.exists()) {
    1.65 +    file.remove(false);
    1.66 +  }
    1.67 +
    1.68 +}
    1.69 +
    1.70 +/**
    1.71 + * Run some callback once metadata has been committed to disk.
    1.72 + */
    1.73 +function afterCommit(callback)
    1.74 +{
    1.75 +  let obs = function(result, topic, verb) {
    1.76 +    if (verb == "write-metadata-to-disk-complete") {
    1.77 +      Services.obs.removeObserver(obs, topic);
    1.78 +      callback(result);
    1.79 +    } else {
    1.80 +      dump("TOPIC: " + topic+ "\n");
    1.81 +    }
    1.82 +  }
    1.83 +  Services.obs.addObserver(obs, "browser-search-service", false);
    1.84 +}
    1.85 +
    1.86 +/**
    1.87 + * Run some callback once cache has been built.
    1.88 + */
    1.89 +function afterCache(callback)
    1.90 +{
    1.91 +  let obs = function(result, topic, verb) {
    1.92 +    do_print("afterCache: " + verb);
    1.93 +    if (verb == "write-cache-to-disk-complete") {
    1.94 +      Services.obs.removeObserver(obs, topic);
    1.95 +      callback(result);
    1.96 +    } else {
    1.97 +      dump("TOPIC: " + topic+ "\n");
    1.98 +    }
    1.99 +  }
   1.100 +  Services.obs.addObserver(obs, "browser-search-service", false);
   1.101 +}
   1.102 +
   1.103 +function parseJsonFromStream(aInputStream) {
   1.104 +  const json = Cc["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
   1.105 +  const data = json.decodeFromStream(aInputStream, aInputStream.available());
   1.106 +  return data;
   1.107 +}
   1.108 +
   1.109 +/**
   1.110 + * Read a JSON file and return the JS object
   1.111 + */
   1.112 +function readJSONFile(aFile) {
   1.113 +  let stream = Cc["@mozilla.org/network/file-input-stream;1"].
   1.114 +               createInstance(Ci.nsIFileInputStream);
   1.115 +  try {
   1.116 +    stream.init(aFile, MODE_RDONLY, FileUtils.PERMS_FILE, 0);
   1.117 +    return parseJsonFromStream(stream, stream.available());
   1.118 +  } catch(ex) {
   1.119 +    dumpn("readJSONFile: Error reading JSON file: " + ex);
   1.120 +  } finally {
   1.121 +    stream.close();
   1.122 +  }
   1.123 +  return false;
   1.124 +}
   1.125 +
   1.126 +/**
   1.127 + * Recursively compare two objects and check that every property of expectedObj has the same value
   1.128 + * on actualObj.
   1.129 + */
   1.130 +function isSubObjectOf(expectedObj, actualObj) {
   1.131 +  for (let prop in expectedObj) {
   1.132 +    if (expectedObj[prop] instanceof Object) {
   1.133 +      do_check_eq(expectedObj[prop].length, actualObj[prop].length);
   1.134 +      isSubObjectOf(expectedObj[prop], actualObj[prop]);
   1.135 +    } else {
   1.136 +      do_check_eq(expectedObj[prop], actualObj[prop]);
   1.137 +    }
   1.138 +  }
   1.139 +}
   1.140 +
   1.141 +// Expand the amount of information available in error logs
   1.142 +Services.prefs.setBoolPref("browser.search.log", true);
   1.143 +

mercurial