gecko-dev/browser/components/newtab/test/unit/unit-entry.js
2018-10-12 19:13:39 +00:00

220 lines
6.1 KiB
JavaScript

import {EventEmitter, FakePerformance, FakePrefs, GlobalOverrider} from "test/unit/utils";
import Adapter from "enzyme-adapter-react-16";
import {chaiAssertions} from "test/schemas/pings";
import chaiJsonSchema from "chai-json-schema";
import enzyme from "enzyme";
enzyme.configure({adapter: new Adapter()});
// Cause React warnings to make tests that trigger them fail
const origConsoleError = console.error; // eslint-disable-line no-console
console.error = function(msg, ...args) { // eslint-disable-line no-console
// eslint-disable-next-line no-console
origConsoleError.apply(console, [msg, ...args]);
if (/(Invalid prop|Failed prop type|Check the render method|React Intl)/.test(msg)) {
throw new Error(msg);
}
};
const req = require.context(".", true, /\.test\.jsx?$/);
const files = req.keys();
// This exposes sinon assertions to chai.assert
sinon.assert.expose(assert, {prefix: ""});
chai.use(chaiAssertions);
chai.use(chaiJsonSchema);
const overrider = new GlobalOverrider();
const TEST_GLOBAL = {
AddonManager: {
getActiveAddons() {
return Promise.resolve({addons: [], fullData: false});
},
},
AppConstants: {MOZILLA_OFFICIAL: true},
UpdateUtils: {getUpdateChannel() {}},
ChromeUtils: {
defineModuleGetter() {},
generateQI() { return {}; },
import(str) {
if (str === "resource://services-settings/remote-settings.js") {
return {RemoteSettings: TEST_GLOBAL.RemoteSettings};
}
return {};
},
},
Components: {isSuccessCode: () => true},
// eslint-disable-next-line object-shorthand
ContentSearchUIController: function() {}, // NB: This is a function/constructor
Cc: {
"@mozilla.org/browser/nav-bookmarks-service;1": {
addObserver() {},
getService() {
return this;
},
removeObserver() {},
SOURCES: {},
TYPE_BOOKMARK: {},
},
"@mozilla.org/browser/nav-history-service;1": {
addObserver() {},
executeQuery() {},
getNewQuery() {},
getNewQueryOptions() {},
getService() {
return this;
},
insert() {},
markPageAsTyped() {},
removeObserver() {},
},
},
Ci: {
nsIHttpChannel: {REFERRER_POLICY_UNSAFE_URL: 5},
nsITimer: {TYPE_ONE_SHOT: 1},
},
Cu: {
importGlobalProperties() {},
now: () => window.performance.now(),
reportError() {},
},
dump() {},
fetch() {},
// eslint-disable-next-line object-shorthand
Image: function() {}, // NB: This is a function/constructor
NewTabUtils: {
activityStreamProvider: {
getTopFrecentSites: () => [],
executePlacesQuery: async (sql, options) => ({sql, options}),
},
},
PlacesUtils: {
get bookmarks() {
return TEST_GLOBAL.Cc["@mozilla.org/browser/nav-bookmarks-service;1"];
},
get history() {
return TEST_GLOBAL.Cc["@mozilla.org/browser/nav-history-service;1"];
},
observers: {
addListener() {},
removeListener() {},
},
},
PluralForm: {get() {}},
Preferences: FakePrefs,
PrivateBrowsingUtils: {isWindowPrivate: () => false},
DownloadsViewUI: {
getDisplayName: () => "filename.ext",
getSizeWithUnits: () => "1.5 MB",
},
FileUtils: {
// eslint-disable-next-line object-shorthand
File: function() {}, // NB: This is a function/constructor
},
Services: {
locale: {
get appLocaleAsLangTag() { return "en-US"; },
negotiateLanguages() {},
},
urlFormatter: {formatURL: str => str, formatURLPref: str => str},
mm: {
addMessageListener: (msg, cb) => cb(),
removeMessageListener() {},
},
appShell: {hiddenDOMWindow: {performance: new FakePerformance()}},
obs: {
addObserver() {},
removeObserver() {},
},
telemetry: {
setEventRecordingEnabled: () => {},
recordEvent: eventDetails => {},
},
console: {logStringMessage: () => {}},
prefs: {
addObserver() {},
prefHasUserValue() {},
removeObserver() {},
getPrefType() {},
clearUserPref() {},
getStringPref() {},
getIntPref() {},
getBoolPref() {},
setBoolPref() {},
setIntPref() {},
getBranch() {},
PREF_BOOL: "boolean",
PREF_INT: "integer",
PREF_STRING: "string",
getDefaultBranch() {
return {
setBoolPref() {},
setIntPref() {},
setStringPref() {},
clearUserPref() {},
};
},
},
tm: {
dispatchToMainThread: cb => cb(),
idleDispatchToMainThread: cb => cb(),
},
eTLD: {
getBaseDomain({spec}) { return spec.match(/\/([^/]+)/)[1]; },
getPublicSuffix() {},
},
io: {
newURI: spec => ({
mutate: () => ({
setRef: ref => ({
finalize: () => ({
ref,
spec,
}),
}),
}),
spec,
}),
},
search: {
init(cb) { cb(); },
getVisibleEngines: () => [{identifier: "google"}, {identifier: "bing"}],
defaultEngine: {identifier: "google"},
currentEngine: {identifier: "google", searchForm: "https://www.google.com/search?q=&ie=utf-8&oe=utf-8&client=firefox-b"},
},
scriptSecurityManager: {
createNullPrincipal() {},
getSystemPrincipal() {},
},
wm: {getMostRecentWindow: () => window, getEnumerator: () => []},
ww: {registerNotification() {}, unregisterNotification() {}},
appinfo: {appBuildID: "20180710100040"},
},
XPCOMUtils: {
defineLazyGetter(object, name, f) {
if (object && name) {
object[name] = f();
} else {
f();
}
},
defineLazyGlobalGetters() {},
defineLazyModuleGetter() {},
defineLazyModuleGetters() {},
defineLazyServiceGetter() {},
defineLazyServiceGetters() {},
generateQI() { return {}; },
},
EventEmitter,
ShellService: {isDefaultBrowser: () => true},
FilterExpressions: {eval() { return Promise.resolve(false); }},
RemoteSettings() { return {get() { return Promise.resolve([]); }}; },
Localization: class {},
};
overrider.set(TEST_GLOBAL);
describe("activity-stream", () => {
after(() => overrider.restore());
files.forEach(file => req(file));
});