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

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:ec74cea6c725
1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et: */
3
4 Components.utils.import("resource://gre/modules/Services.jsm");
5 Components.utils.import("resource://gre/modules/NetUtil.jsm");
6 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
7 Components.utils.import("resource://gre/modules/FileUtils.jsm");
8 Components.utils.import("resource://gre/modules/Promise.jsm");
9 Components.utils.import("resource://testing-common/AppInfo.jsm");
10
11 const BROWSER_SEARCH_PREF = "browser.search.";
12 const NS_APP_SEARCH_DIR = "SrchPlugns";
13
14 const MODE_RDONLY = FileUtils.MODE_RDONLY;
15 const MODE_WRONLY = FileUtils.MODE_WRONLY;
16 const MODE_CREATE = FileUtils.MODE_CREATE;
17 const MODE_TRUNCATE = FileUtils.MODE_TRUNCATE;
18
19 // Need to create and register a profile folder.
20 var gProfD = do_get_profile();
21
22 function dumpn(text)
23 {
24 dump("search test: " + text + "\n");
25 }
26
27 /**
28 * Clean the profile of any metadata files left from a previous run.
29 */
30 function removeMetadata()
31 {
32 let file = gProfD.clone();
33 file.append("search-metadata.json");
34 if (file.exists()) {
35 file.remove(false);
36 }
37
38 file = gProfD.clone();
39 file.append("search.sqlite");
40 if (file.exists()) {
41 file.remove(false);
42 }
43 }
44
45 function removeCacheFile()
46 {
47 let file = gProfD.clone();
48 file.append("search.json");
49 if (file.exists()) {
50 file.remove(false);
51 }
52 }
53
54 /**
55 * Clean the profile of any cache file left from a previous run.
56 */
57 function removeCache()
58 {
59 let file = gProfD.clone();
60 file.append("search.json");
61 if (file.exists()) {
62 file.remove(false);
63 }
64
65 }
66
67 /**
68 * Run some callback once metadata has been committed to disk.
69 */
70 function afterCommit(callback)
71 {
72 let obs = function(result, topic, verb) {
73 if (verb == "write-metadata-to-disk-complete") {
74 Services.obs.removeObserver(obs, topic);
75 callback(result);
76 } else {
77 dump("TOPIC: " + topic+ "\n");
78 }
79 }
80 Services.obs.addObserver(obs, "browser-search-service", false);
81 }
82
83 /**
84 * Run some callback once cache has been built.
85 */
86 function afterCache(callback)
87 {
88 let obs = function(result, topic, verb) {
89 do_print("afterCache: " + verb);
90 if (verb == "write-cache-to-disk-complete") {
91 Services.obs.removeObserver(obs, topic);
92 callback(result);
93 } else {
94 dump("TOPIC: " + topic+ "\n");
95 }
96 }
97 Services.obs.addObserver(obs, "browser-search-service", false);
98 }
99
100 function parseJsonFromStream(aInputStream) {
101 const json = Cc["@mozilla.org/dom/json;1"].createInstance(Components.interfaces.nsIJSON);
102 const data = json.decodeFromStream(aInputStream, aInputStream.available());
103 return data;
104 }
105
106 /**
107 * Read a JSON file and return the JS object
108 */
109 function readJSONFile(aFile) {
110 let stream = Cc["@mozilla.org/network/file-input-stream;1"].
111 createInstance(Ci.nsIFileInputStream);
112 try {
113 stream.init(aFile, MODE_RDONLY, FileUtils.PERMS_FILE, 0);
114 return parseJsonFromStream(stream, stream.available());
115 } catch(ex) {
116 dumpn("readJSONFile: Error reading JSON file: " + ex);
117 } finally {
118 stream.close();
119 }
120 return false;
121 }
122
123 /**
124 * Recursively compare two objects and check that every property of expectedObj has the same value
125 * on actualObj.
126 */
127 function isSubObjectOf(expectedObj, actualObj) {
128 for (let prop in expectedObj) {
129 if (expectedObj[prop] instanceof Object) {
130 do_check_eq(expectedObj[prop].length, actualObj[prop].length);
131 isSubObjectOf(expectedObj[prop], actualObj[prop]);
132 } else {
133 do_check_eq(expectedObj[prop], actualObj[prop]);
134 }
135 }
136 }
137
138 // Expand the amount of information available in error logs
139 Services.prefs.setBoolPref("browser.search.log", true);
140

mercurial