зеркало из https://github.com/mozilla/pjs.git
Backed out changeset eb4233025be0 for xpcshell test failures
This commit is contained in:
Родитель
b81e75c4be
Коммит
d99208360b
|
@ -88,11 +88,8 @@ WBORecord.prototype = {
|
||||||
// Take a base URI string, with trailing slash, and return the URI of this
|
// Take a base URI string, with trailing slash, and return the URI of this
|
||||||
// WBO based on collection and ID.
|
// WBO based on collection and ID.
|
||||||
uri: function(base) {
|
uri: function(base) {
|
||||||
if (this.collection && this.id) {
|
if (this.collection && this.id)
|
||||||
let url = Utils.makeURI(base + this.collection + "/" + this.id);
|
return Utils.makeURL(base + this.collection + "/" + this.id);
|
||||||
url.QueryInterface(Ci.nsIURL);
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -207,6 +207,28 @@ let Utils = {
|
||||||
return !!guid && this._base64url_regex.test(guid);
|
return !!guid && this._base64url_regex.test(guid);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
ensureOneOpen: let (windows = {}) function ensureOneOpen(window) {
|
||||||
|
// Close the other window if it exists
|
||||||
|
let url = window.location.href;
|
||||||
|
let other = windows[url];
|
||||||
|
if (other != null)
|
||||||
|
other.close();
|
||||||
|
|
||||||
|
// Save the new window for future closure
|
||||||
|
windows[url] = window;
|
||||||
|
|
||||||
|
// Actively clean up when the window is closed
|
||||||
|
window.addEventListener("unload", function() windows[url] = null, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Returns a nsILocalFile representing a file relative to the current
|
||||||
|
// user's profile directory. The argument should be a string with
|
||||||
|
// unix-style slashes for directory names (these slashes are automatically
|
||||||
|
// converted to platform-specific path separators).
|
||||||
|
getProfileFile: function getProfileFile(path) {
|
||||||
|
return FileUtils.getFile("ProfD", path.split("/"), true);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a simple getter/setter to an object that defers access of a property
|
* Add a simple getter/setter to an object that defers access of a property
|
||||||
* to an inner property.
|
* to an inner property.
|
||||||
|
@ -270,46 +292,70 @@ let Utils = {
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deepCopy: function Weave_deepCopy(thing, noSort) {
|
||||||
|
if (typeof(thing) != "object" || thing == null)
|
||||||
|
return thing;
|
||||||
|
let ret;
|
||||||
|
|
||||||
|
if (Array.isArray(thing)) {
|
||||||
|
ret = [];
|
||||||
|
for (let i = 0; i < thing.length; i++)
|
||||||
|
ret.push(Utils.deepCopy(thing[i], noSort));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ret = {};
|
||||||
|
let props = [p for (p in thing)];
|
||||||
|
if (!noSort)
|
||||||
|
props = props.sort();
|
||||||
|
props.forEach(function(k) ret[k] = Utils.deepCopy(thing[k], noSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Works on frames or exceptions, munges file:// URIs to shorten the paths
|
||||||
|
// FIXME: filename munging is sort of hackish, might be confusing if
|
||||||
|
// there are multiple extensions with similar filenames
|
||||||
|
formatFrame: function Utils_formatFrame(frame) {
|
||||||
|
let tmp = "<file:unknown>";
|
||||||
|
|
||||||
|
let file = frame.filename || frame.fileName;
|
||||||
|
if (file)
|
||||||
|
tmp = file.replace(/^(?:chrome|file):.*?([^\/\.]+\.\w+)$/, "$1");
|
||||||
|
|
||||||
|
if (frame.lineNumber)
|
||||||
|
tmp += ":" + frame.lineNumber;
|
||||||
|
if (frame.name)
|
||||||
|
tmp = frame.name + "()@" + tmp;
|
||||||
|
|
||||||
|
return tmp;
|
||||||
|
},
|
||||||
|
|
||||||
exceptionStr: function Weave_exceptionStr(e) {
|
exceptionStr: function Weave_exceptionStr(e) {
|
||||||
let message = e.message ? e.message : e;
|
let message = e.message ? e.message : e;
|
||||||
return message + " " + Utils.stackTrace(e);
|
return message + " " + Utils.stackTrace(e);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
stackTraceFromFrame: function Weave_stackTraceFromFrame(frame) {
|
||||||
|
let output = [];
|
||||||
|
while (frame) {
|
||||||
|
let str = Utils.formatFrame(frame);
|
||||||
|
if (str)
|
||||||
|
output.push(str);
|
||||||
|
frame = frame.caller;
|
||||||
|
}
|
||||||
|
return output.join(" < ");
|
||||||
|
},
|
||||||
|
|
||||||
stackTrace: function Weave_stackTrace(e) {
|
stackTrace: function Weave_stackTrace(e) {
|
||||||
// Wrapped nsIException
|
// Wrapped nsIException
|
||||||
if (e.location){
|
if (e.location)
|
||||||
let frame = e.location;
|
return "Stack trace: " + Utils.stackTraceFromFrame(e.location);
|
||||||
let output = [];
|
|
||||||
while (frame) {
|
|
||||||
// Works on frames or exceptions, munges file:// URIs to shorten the paths
|
|
||||||
// FIXME: filename munging is sort of hackish, might be confusing if
|
|
||||||
// there are multiple extensions with similar filenames
|
|
||||||
let str = "<file:unknown>";
|
|
||||||
|
|
||||||
let file = frame.filename || frame.fileName;
|
|
||||||
if (file){
|
|
||||||
str = file.replace(/^(?:chrome|file):.*?([^\/\.]+\.\w+)$/, "$1");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frame.lineNumber){
|
|
||||||
str += ":" + frame.lineNumber;
|
|
||||||
}
|
|
||||||
if (frame.name){
|
|
||||||
str = frame.name + "()@" + str;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str){
|
|
||||||
output.push(str);
|
|
||||||
}
|
|
||||||
frame = frame.caller;
|
|
||||||
}
|
|
||||||
return "Stack trace: " + output.join(" < ");
|
|
||||||
}
|
|
||||||
// Standard JS exception
|
// Standard JS exception
|
||||||
if (e.stack){
|
if (e.stack)
|
||||||
return "JS Stack trace: " + e.stack.trim().replace(/\n/g, " < ").
|
return "JS Stack trace: " + e.stack.trim().replace(/\n/g, " < ").
|
||||||
replace(/@[^@]*?([^\/\.]+\.\w+:)/g, "@$1");
|
replace(/@[^@]*?([^\/\.]+\.\w+:)/g, "@$1");
|
||||||
}
|
|
||||||
|
|
||||||
return "No traceback available";
|
return "No traceback available";
|
||||||
},
|
},
|
||||||
|
@ -845,6 +891,12 @@ let Utils = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
makeURL: function Weave_makeURL(URIString) {
|
||||||
|
let url = Utils.makeURI(URIString);
|
||||||
|
url.QueryInterface(Ci.nsIURL);
|
||||||
|
return url;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a json object from disk
|
* Load a json object from disk
|
||||||
*
|
*
|
||||||
|
@ -860,7 +912,7 @@ let Utils = {
|
||||||
if (that._log)
|
if (that._log)
|
||||||
that._log.trace("Loading json from disk: " + filePath);
|
that._log.trace("Loading json from disk: " + filePath);
|
||||||
|
|
||||||
let file = FileUtils.getFile("ProfD", filePath.split("/"), true);
|
let file = Utils.getProfileFile(filePath);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
callback.call(that);
|
callback.call(that);
|
||||||
return;
|
return;
|
||||||
|
@ -905,7 +957,7 @@ let Utils = {
|
||||||
if (that._log)
|
if (that._log)
|
||||||
that._log.trace("Saving json to disk: " + filePath);
|
that._log.trace("Saving json to disk: " + filePath);
|
||||||
|
|
||||||
let file = FileUtils.getFile("ProfD", filePath.split("/"), true);
|
let file = Utils.getProfileFile(filePath);
|
||||||
let json = typeof obj == "function" ? obj.call(that) : obj;
|
let json = typeof obj == "function" ? obj.call(that) : obj;
|
||||||
let out = JSON.stringify(json);
|
let out = JSON.stringify(json);
|
||||||
|
|
||||||
|
|
|
@ -456,26 +456,3 @@ RotaryEngine.prototype = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
deepCopy: function deepCopy(thing, noSort) {
|
|
||||||
if (typeof(thing) != "object" || thing == null){
|
|
||||||
return thing;
|
|
||||||
}
|
|
||||||
let ret;
|
|
||||||
|
|
||||||
if (Array.isArray(thing)) {
|
|
||||||
ret = [];
|
|
||||||
for (let i = 0; i < thing.length; i++){
|
|
||||||
ret.push(deepCopy(thing[i], noSort));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ret = {};
|
|
||||||
let props = [p for (p in thing)];
|
|
||||||
if (!noSort){
|
|
||||||
props = props.sort();
|
|
||||||
}
|
|
||||||
props.forEach(function(k) ret[k] = deepCopy(thing[k], noSort));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
};
|
|
|
@ -56,7 +56,7 @@ store.wipe();
|
||||||
function makeLivemark(p, mintGUID) {
|
function makeLivemark(p, mintGUID) {
|
||||||
let b = new Livemark("bookmarks", p.id);
|
let b = new Livemark("bookmarks", p.id);
|
||||||
// Copy here, because tests mutate the contents.
|
// Copy here, because tests mutate the contents.
|
||||||
b.cleartext = deepCopy(p);
|
b.cleartext = Utils.deepCopy(p);
|
||||||
|
|
||||||
if (mintGUID)
|
if (mintGUID)
|
||||||
b.id = Utils.makeGUID();
|
b.id = Utils.makeGUID();
|
||||||
|
|
|
@ -495,10 +495,8 @@ function run_test() {
|
||||||
|
|
||||||
let query = "?" + args.join("&");
|
let query = "?" + args.join("&");
|
||||||
|
|
||||||
let uri1 = Utils.makeURI("http://foo/" + query)
|
let uri1 = Utils.makeURL("http://foo/" + query);
|
||||||
.QueryInterface(Ci.nsIURL);
|
let uri2 = Utils.makeURL("http://foo/");
|
||||||
let uri2 = Utils.makeURI("http://foo/")
|
|
||||||
.QueryInterface(Ci.nsIURL);
|
|
||||||
uri2.query = query;
|
uri2.query = query;
|
||||||
do_check_eq(uri1.query, uri2.query);
|
do_check_eq(uri1.query, uri2.query);
|
||||||
server.stop(do_test_finished);
|
server.stop(do_test_finished);
|
||||||
|
|
|
@ -661,10 +661,8 @@ add_test(function test_uri_construction() {
|
||||||
|
|
||||||
let query = "?" + args.join("&");
|
let query = "?" + args.join("&");
|
||||||
|
|
||||||
let uri1 = Utils.makeURI("http://foo/" + query)
|
let uri1 = Utils.makeURL("http://foo/" + query);
|
||||||
.QueryInterface(Ci.nsIURL);
|
let uri2 = Utils.makeURL("http://foo/");
|
||||||
let uri2 = Utils.makeURI("http://foo/")
|
|
||||||
.QueryInterface(Ci.nsIURL);
|
|
||||||
uri2.query = query;
|
uri2.query = query;
|
||||||
do_check_eq(uri1.query, uri2.query);
|
do_check_eq(uri1.query, uri2.query);
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ function fakeSessionSvc(url, numtabs) {
|
||||||
if (numtabs) {
|
if (numtabs) {
|
||||||
let tabs = obj.windows[0].tabs;
|
let tabs = obj.windows[0].tabs;
|
||||||
for (let i = 0; i < numtabs-1; i++)
|
for (let i = 0; i < numtabs-1; i++)
|
||||||
tabs.push(deepCopy(tabs[0]));
|
tabs.push(Utils.deepCopy(tabs[0]));
|
||||||
}
|
}
|
||||||
return JSON.stringify(obj);
|
return JSON.stringify(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ Cu.import("resource://services-sync/util.js");
|
||||||
|
|
||||||
function run_test() {
|
function run_test() {
|
||||||
let thing = {o: {foo: "foo", bar: ["bar"]}, a: ["foo", {bar: "bar"}]};
|
let thing = {o: {foo: "foo", bar: ["bar"]}, a: ["foo", {bar: "bar"}]};
|
||||||
let ret = deepCopy(thing);
|
let ret = Utils.deepCopy(thing);
|
||||||
do_check_neq(ret, thing)
|
do_check_neq(ret, thing)
|
||||||
do_check_neq(ret.o, thing.o);
|
do_check_neq(ret.o, thing.o);
|
||||||
do_check_neq(ret.o.bar, thing.o.bar);
|
do_check_neq(ret.o.bar, thing.o.bar);
|
||||||
|
|
|
@ -69,8 +69,7 @@ add_test(function test_load_logging() {
|
||||||
_("Verify that reads and read errors are logged.");
|
_("Verify that reads and read errors are logged.");
|
||||||
|
|
||||||
// Write a file with some invalid JSON
|
// Write a file with some invalid JSON
|
||||||
let filePath = "weave/log.json";
|
let file = Utils.getProfileFile("weave/log.json");
|
||||||
let file = FileUtils.getFile("ProfD", filePath.split("/"), true);
|
|
||||||
let fos = Cc["@mozilla.org/network/file-output-stream;1"]
|
let fos = Cc["@mozilla.org/network/file-output-stream;1"]
|
||||||
.createInstance(Ci.nsIFileOutputStream);
|
.createInstance(Ci.nsIFileOutputStream);
|
||||||
let flags = FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE
|
let flags = FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE
|
||||||
|
|
|
@ -65,3 +65,35 @@ function _test_makeURI() {
|
||||||
do_check_eq(Utils.makeURI("chrome://badstuff"), undefined);
|
do_check_eq(Utils.makeURI("chrome://badstuff"), undefined);
|
||||||
do_check_eq(Utils.makeURI("this is a test"), undefined);
|
do_check_eq(Utils.makeURI("this is a test"), undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _test_makeURL() {
|
||||||
|
_("Check http uri");
|
||||||
|
let uri = "http://mozillalabs.com/";
|
||||||
|
do_check_true(Utils.makeURL(uri) instanceof Ci.nsIURL);
|
||||||
|
|
||||||
|
_("Check https uri");
|
||||||
|
let uris = "https://mozillalabs.com/";
|
||||||
|
do_check_true(Utils.makeURL(uris) instanceof Ci.nsIURL);
|
||||||
|
|
||||||
|
let uric = "chrome://browser/content/browser.xul";
|
||||||
|
do_check_true(Utils.makeURL(uric) instanceof Ci.nsIURL);
|
||||||
|
|
||||||
|
_("Check about uri");
|
||||||
|
let uria = "about:weave";
|
||||||
|
let except1;
|
||||||
|
try {
|
||||||
|
Utils.makeURL(uria);
|
||||||
|
} catch(e) {
|
||||||
|
except1 = e;
|
||||||
|
}
|
||||||
|
do_check_true(!!except1);
|
||||||
|
|
||||||
|
_("Check invalid uri");
|
||||||
|
let except2;
|
||||||
|
try {
|
||||||
|
Utils.makeURL("mozillalabs.com");
|
||||||
|
} catch(e) {
|
||||||
|
except2 = e;
|
||||||
|
}
|
||||||
|
do_check_true(!!except2);
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче