2016-10-10 00:48:35 +00:00
|
|
|
"use strict";
|
|
|
|
|
2016-10-12 00:08:52 +00:00
|
|
|
const {deepEqual, equal, ok} = require("chai").assert;
|
2016-10-10 00:48:35 +00:00
|
|
|
|
|
|
|
const {setupTestDOMWindow} = require("./setup");
|
|
|
|
|
|
|
|
describe("browser-polyfill", () => {
|
2016-10-11 12:27:26 +00:00
|
|
|
it("wraps the global chrome namespace with a global browser namespace", () => {
|
2016-10-10 00:48:35 +00:00
|
|
|
const fakeChrome = {};
|
|
|
|
return setupTestDOMWindow(fakeChrome).then(window => {
|
2016-10-12 00:08:52 +00:00
|
|
|
equal(typeof window.browser, "object", "Got the window.browser object");
|
2016-10-10 00:48:35 +00:00
|
|
|
});
|
|
|
|
});
|
2016-10-11 14:39:13 +00:00
|
|
|
|
2016-11-02 20:31:56 +00:00
|
|
|
it("does not override the global browser namespace if it already exists", () => {
|
2016-10-11 14:39:13 +00:00
|
|
|
const fakeChrome = {
|
|
|
|
runtime: {lastError: null},
|
|
|
|
};
|
|
|
|
const fakeBrowser = {
|
|
|
|
mycustomns: {mykey: true},
|
|
|
|
};
|
|
|
|
|
|
|
|
return setupTestDOMWindow(fakeChrome, fakeBrowser).then(window => {
|
2016-10-12 00:08:52 +00:00
|
|
|
deepEqual(window.browser, fakeBrowser,
|
2016-11-02 20:31:56 +00:00
|
|
|
"The existing browser has not been wrapped");
|
2016-10-11 14:39:13 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("browser wrapper", () => {
|
|
|
|
it("supports custom properties defined using Object.defineProperty", () => {
|
|
|
|
const fakeChrome = {};
|
|
|
|
return setupTestDOMWindow(fakeChrome).then(window => {
|
|
|
|
Object.defineProperty(window.browser, "myns", {
|
|
|
|
enumerable: true,
|
|
|
|
configurable: true,
|
|
|
|
value: {mykey: true},
|
|
|
|
});
|
|
|
|
|
2016-10-12 00:08:52 +00:00
|
|
|
ok("myns" in window.browser, "The custom property exists");
|
|
|
|
ok("mykey" in window.browser.myns,
|
2016-11-02 19:39:07 +00:00
|
|
|
"The content of the custom property exists");
|
2016-10-11 14:39:13 +00:00
|
|
|
|
2016-10-12 00:08:52 +00:00
|
|
|
deepEqual(window.browser.myns, {mykey: true},
|
2016-11-02 19:39:07 +00:00
|
|
|
"The custom property has the expected content");
|
2016-10-11 14:39:13 +00:00
|
|
|
|
|
|
|
delete window.browser.myns;
|
|
|
|
|
2016-10-12 00:08:52 +00:00
|
|
|
ok(!("myns" in window.browser),
|
2016-11-02 19:39:07 +00:00
|
|
|
"The deleted custom defined property has been removed");
|
2016-10-11 14:39:13 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("returns undefined for property undefined in the target", () => {
|
|
|
|
const fakeChrome = {myns: {mykey: true}};
|
|
|
|
return setupTestDOMWindow(fakeChrome).then(window => {
|
2016-10-12 00:08:52 +00:00
|
|
|
equal(window.browser.myns.mykey, true,
|
2016-11-02 19:39:07 +00:00
|
|
|
"Got the expected result from a wrapped property");
|
2016-10-12 00:08:52 +00:00
|
|
|
equal(window.browser.myns.nonexistent, undefined,
|
2016-11-02 19:39:07 +00:00
|
|
|
"Got undefined for non existent property");
|
2016-10-12 00:08:52 +00:00
|
|
|
equal(window.browser.nonexistent, undefined,
|
2016-11-02 19:39:07 +00:00
|
|
|
"Got undefined for non existent namespaces");
|
2016-10-11 14:39:13 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2016-10-10 00:48:35 +00:00
|
|
|
});
|