jest-webextension-mock 3.8.8 → 3.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/__tests__/permissions.test.js +39 -0
- package/__tests__/runtime.test.js +2 -1
- package/dist/setup.js +76 -66
- package/package.json +3 -3
- package/src/index.js +7 -0
- package/src/permissions.js +17 -0
- package/src/runtime.js +2 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
[](https://www.npmjs.com/package/jest-webextension-mock) [](https://github.com/clarkbw/jest-webextension-mock/blob/master/LICENSE) [](https://codecov.io/gh/clarkbw/jest-webextension-mock) [](https://greenkeeper.io/) [](https://twitter.com/intent/tweet?text=Wow:&url=%5Bobject%20Object%5D)
|
|
2
2
|
|
|
3
|
+
💪 @RickyMarou is an official maintainer. This change was made on `2024-04-12` as @clarkbw has not been able to devote sufficient time necessary for this project.
|
|
4
|
+
|
|
3
5
|
## Install
|
|
4
6
|
|
|
5
7
|
For npm:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
test('chrome.permissions.contains', () => {
|
|
2
|
+
expect(jest.isMockFunction(chrome.permissions.contains)).toBe(true);
|
|
3
|
+
chrome.permissions.contains({ permissions: ['tabs'] }, () => {});
|
|
4
|
+
expect(chrome.permissions.contains).toBeCalled();
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
test('chrome.permissions.getAll', () => {
|
|
8
|
+
expect(jest.isMockFunction(chrome.permissions.getAll)).toBe(true);
|
|
9
|
+
chrome.permissions.getAll(() => {});
|
|
10
|
+
expect(chrome.permissions.getAll).toBeCalled();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('chrome.permissions.remove', () => {
|
|
14
|
+
expect(jest.isMockFunction(chrome.permissions.remove)).toBe(true);
|
|
15
|
+
chrome.permissions.remove({ permissions: ['tabs'] }, () => {});
|
|
16
|
+
expect(chrome.permissions.remove).toBeCalled();
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('chrome.permissions.request', () => {
|
|
20
|
+
expect(jest.isMockFunction(chrome.permissions.request)).toBe(true);
|
|
21
|
+
chrome.permissions.request({ permissions: ['tabs'] }, () => {});
|
|
22
|
+
expect(chrome.permissions.request).toBeCalled();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test('chrome.permissions.onAdded.addListener', () => {
|
|
26
|
+
expect(jest.isMockFunction(chrome.permissions.onAdded.addListener)).toBe(
|
|
27
|
+
true
|
|
28
|
+
);
|
|
29
|
+
chrome.permissions.onAdded.addListener(() => {});
|
|
30
|
+
expect(chrome.permissions.onAdded.addListener).toBeCalled();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('chrome.permissions.onRemoved.addListener', () => {
|
|
34
|
+
expect(jest.isMockFunction(chrome.permissions.onRemoved.addListener)).toBe(
|
|
35
|
+
true
|
|
36
|
+
);
|
|
37
|
+
chrome.permissions.onRemoved.addListener(() => {});
|
|
38
|
+
expect(chrome.permissions.onRemoved.addListener).toBeCalled();
|
|
39
|
+
});
|
|
@@ -29,9 +29,10 @@ describe('browser.runtime', () => {
|
|
|
29
29
|
});
|
|
30
30
|
test('getURL', () => {
|
|
31
31
|
const path = 'TEST_PATH';
|
|
32
|
+
const extensionOriginURL = globalThis[Symbol.for('jest-webextension-mock')].extensionPath;
|
|
32
33
|
expect(jest.isMockFunction(browser.runtime.getURL)).toBe(true);
|
|
33
34
|
const respPath = browser.runtime.getURL(path);
|
|
34
|
-
expect(respPath).toEqual(path);
|
|
35
|
+
expect(respPath).toEqual(extensionOriginURL + path);
|
|
35
36
|
expect(browser.runtime.getURL).toHaveBeenCalledTimes(1);
|
|
36
37
|
});
|
|
37
38
|
test('sendMessage', (done) => {
|
package/dist/setup.js
CHANGED
|
@@ -1,6 +1,51 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
function ownKeys(object, enumerableOnly) {
|
|
4
|
+
var keys = Object.keys(object);
|
|
5
|
+
if (Object.getOwnPropertySymbols) {
|
|
6
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
7
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
8
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
9
|
+
})), keys.push.apply(keys, symbols);
|
|
10
|
+
}
|
|
11
|
+
return keys;
|
|
12
|
+
}
|
|
13
|
+
function _objectSpread2(target) {
|
|
14
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
15
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
16
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
17
|
+
_defineProperty(target, key, source[key]);
|
|
18
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
19
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return target;
|
|
23
|
+
}
|
|
24
|
+
function _typeof(obj) {
|
|
25
|
+
"@babel/helpers - typeof";
|
|
26
|
+
|
|
27
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
28
|
+
return typeof obj;
|
|
29
|
+
} : function (obj) {
|
|
30
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
31
|
+
}, _typeof(obj);
|
|
32
|
+
}
|
|
33
|
+
function _defineProperty(obj, key, value) {
|
|
34
|
+
if (key in obj) {
|
|
35
|
+
Object.defineProperty(obj, key, {
|
|
36
|
+
value: value,
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
obj[key] = value;
|
|
43
|
+
}
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
|
|
3
47
|
// https://developer.chrome.com/extensions/omnibox
|
|
48
|
+
|
|
4
49
|
var omnibox = {
|
|
5
50
|
setDefaultSuggestion: jest.fn(),
|
|
6
51
|
onInputStarted: {
|
|
@@ -40,11 +85,9 @@ var runtime = {
|
|
|
40
85
|
onMessageListeners.forEach(function (listener) {
|
|
41
86
|
return listener(message);
|
|
42
87
|
});
|
|
43
|
-
|
|
44
88
|
if (cb !== undefined) {
|
|
45
89
|
return cb();
|
|
46
90
|
}
|
|
47
|
-
|
|
48
91
|
return Promise.resolve();
|
|
49
92
|
}),
|
|
50
93
|
onMessage: {
|
|
@@ -84,7 +127,8 @@ var runtime = {
|
|
|
84
127
|
hasListener: jest.fn()
|
|
85
128
|
},
|
|
86
129
|
getURL: jest.fn(function (path) {
|
|
87
|
-
|
|
130
|
+
var origin = globalThis[Symbol["for"]('jest-webextension-mock')].extensionPath;
|
|
131
|
+
return String(new URL(path, origin));
|
|
88
132
|
}),
|
|
89
133
|
openOptionsPage: jest.fn(),
|
|
90
134
|
getManifest: jest.fn(function () {
|
|
@@ -115,25 +159,22 @@ var tabs = {
|
|
|
115
159
|
onMessage: {
|
|
116
160
|
addListener: jest.fn()
|
|
117
161
|
},
|
|
118
|
-
postMessage: jest.fn()
|
|
119
|
-
|
|
162
|
+
postMessage: jest.fn()
|
|
163
|
+
// TODO: add sender
|
|
120
164
|
};
|
|
121
165
|
}),
|
|
122
166
|
create: jest.fn(function () {
|
|
123
167
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
124
168
|
var cb = arguments.length > 1 ? arguments[1] : undefined;
|
|
125
|
-
|
|
126
169
|
if (cb !== undefined) {
|
|
127
170
|
return cb(props);
|
|
128
171
|
}
|
|
129
|
-
|
|
130
172
|
return Promise.resolve(props);
|
|
131
173
|
}),
|
|
132
174
|
remove: jest.fn(function (tabIds, cb) {
|
|
133
175
|
if (cb !== undefined) {
|
|
134
176
|
return cb();
|
|
135
177
|
}
|
|
136
|
-
|
|
137
178
|
return Promise.resolve();
|
|
138
179
|
}),
|
|
139
180
|
duplicate: jest.fn(function () {
|
|
@@ -178,11 +219,9 @@ var tabs = {
|
|
|
178
219
|
onMessageListeners.forEach(function (listener) {
|
|
179
220
|
return listener(tabId, message);
|
|
180
221
|
});
|
|
181
|
-
|
|
182
222
|
if (cb !== undefined) {
|
|
183
223
|
return cb();
|
|
184
224
|
}
|
|
185
|
-
|
|
186
225
|
return Promise.resolve();
|
|
187
226
|
}),
|
|
188
227
|
reload: jest.fn(function (tabId, reloadProperties, cb) {
|
|
@@ -190,18 +229,7 @@ var tabs = {
|
|
|
190
229
|
})
|
|
191
230
|
};
|
|
192
231
|
|
|
193
|
-
function _typeof(obj) {
|
|
194
|
-
"@babel/helpers - typeof";
|
|
195
|
-
|
|
196
|
-
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
197
|
-
return typeof obj;
|
|
198
|
-
} : function (obj) {
|
|
199
|
-
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
200
|
-
}, _typeof(obj);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
232
|
var store = {};
|
|
204
|
-
|
|
205
233
|
function resolveKey(key) {
|
|
206
234
|
if (typeof key === 'string') {
|
|
207
235
|
var result = {};
|
|
@@ -218,37 +246,30 @@ function resolveKey(key) {
|
|
|
218
246
|
return acc;
|
|
219
247
|
}, {});
|
|
220
248
|
}
|
|
221
|
-
|
|
222
249
|
throw new Error('Wrong key given');
|
|
223
250
|
}
|
|
224
|
-
|
|
225
251
|
var storage = {
|
|
226
252
|
sync: {
|
|
227
253
|
get: jest.fn(function (id, cb) {
|
|
228
254
|
var result = id === null ? store : resolveKey(id);
|
|
229
|
-
|
|
230
255
|
if (cb !== undefined) {
|
|
231
256
|
return cb(result);
|
|
232
257
|
}
|
|
233
|
-
|
|
234
258
|
return Promise.resolve(result);
|
|
235
259
|
}),
|
|
236
260
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
237
261
|
if (cb !== undefined) {
|
|
238
262
|
return cb(0);
|
|
239
263
|
}
|
|
240
|
-
|
|
241
264
|
return Promise.resolve(0);
|
|
242
265
|
}),
|
|
243
266
|
set: jest.fn(function (payload, cb) {
|
|
244
267
|
Object.keys(payload).forEach(function (key) {
|
|
245
268
|
return store[key] = payload[key];
|
|
246
269
|
});
|
|
247
|
-
|
|
248
270
|
if (cb !== undefined) {
|
|
249
271
|
return cb();
|
|
250
272
|
}
|
|
251
|
-
|
|
252
273
|
return Promise.resolve();
|
|
253
274
|
}),
|
|
254
275
|
remove: jest.fn(function (id, cb) {
|
|
@@ -256,49 +277,40 @@ var storage = {
|
|
|
256
277
|
keys.forEach(function (key) {
|
|
257
278
|
return delete store[key];
|
|
258
279
|
});
|
|
259
|
-
|
|
260
280
|
if (cb !== undefined) {
|
|
261
281
|
return cb();
|
|
262
282
|
}
|
|
263
|
-
|
|
264
283
|
return Promise.resolve();
|
|
265
284
|
}),
|
|
266
285
|
clear: jest.fn(function (cb) {
|
|
267
286
|
store = {};
|
|
268
|
-
|
|
269
287
|
if (cb !== undefined) {
|
|
270
288
|
return cb();
|
|
271
289
|
}
|
|
272
|
-
|
|
273
290
|
return Promise.resolve();
|
|
274
291
|
})
|
|
275
292
|
},
|
|
276
293
|
local: {
|
|
277
294
|
get: jest.fn(function (id, cb) {
|
|
278
295
|
var result = id === null ? store : resolveKey(id);
|
|
279
|
-
|
|
280
296
|
if (cb !== undefined) {
|
|
281
297
|
return cb(result);
|
|
282
298
|
}
|
|
283
|
-
|
|
284
299
|
return Promise.resolve(result);
|
|
285
300
|
}),
|
|
286
301
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
287
302
|
if (cb !== undefined) {
|
|
288
303
|
return cb(0);
|
|
289
304
|
}
|
|
290
|
-
|
|
291
305
|
return Promise.resolve(0);
|
|
292
306
|
}),
|
|
293
307
|
set: jest.fn(function (payload, cb) {
|
|
294
308
|
Object.keys(payload).forEach(function (key) {
|
|
295
309
|
return store[key] = payload[key];
|
|
296
310
|
});
|
|
297
|
-
|
|
298
311
|
if (cb !== undefined) {
|
|
299
312
|
return cb();
|
|
300
313
|
}
|
|
301
|
-
|
|
302
314
|
return Promise.resolve();
|
|
303
315
|
}),
|
|
304
316
|
remove: jest.fn(function (id, cb) {
|
|
@@ -306,49 +318,40 @@ var storage = {
|
|
|
306
318
|
keys.forEach(function (key) {
|
|
307
319
|
return delete store[key];
|
|
308
320
|
});
|
|
309
|
-
|
|
310
321
|
if (cb !== undefined) {
|
|
311
322
|
return cb();
|
|
312
323
|
}
|
|
313
|
-
|
|
314
324
|
return Promise.resolve();
|
|
315
325
|
}),
|
|
316
326
|
clear: jest.fn(function (cb) {
|
|
317
327
|
store = {};
|
|
318
|
-
|
|
319
328
|
if (cb !== undefined) {
|
|
320
329
|
return cb();
|
|
321
330
|
}
|
|
322
|
-
|
|
323
331
|
return Promise.resolve();
|
|
324
332
|
})
|
|
325
333
|
},
|
|
326
334
|
managed: {
|
|
327
335
|
get: jest.fn(function (id, cb) {
|
|
328
336
|
var result = id === null ? store : resolveKey(id);
|
|
329
|
-
|
|
330
337
|
if (cb !== undefined) {
|
|
331
338
|
return cb(result);
|
|
332
339
|
}
|
|
333
|
-
|
|
334
340
|
return Promise.resolve(result);
|
|
335
341
|
}),
|
|
336
342
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
337
343
|
if (cb !== undefined) {
|
|
338
344
|
return cb(0);
|
|
339
345
|
}
|
|
340
|
-
|
|
341
346
|
return Promise.resolve(0);
|
|
342
347
|
}),
|
|
343
348
|
set: jest.fn(function (payload, cb) {
|
|
344
349
|
Object.keys(payload).forEach(function (key) {
|
|
345
350
|
return store[key] = payload[key];
|
|
346
351
|
});
|
|
347
|
-
|
|
348
352
|
if (cb !== undefined) {
|
|
349
353
|
return cb();
|
|
350
354
|
}
|
|
351
|
-
|
|
352
355
|
return Promise.resolve();
|
|
353
356
|
}),
|
|
354
357
|
remove: jest.fn(function (id, cb) {
|
|
@@ -356,20 +359,16 @@ var storage = {
|
|
|
356
359
|
keys.forEach(function (key) {
|
|
357
360
|
return delete store[key];
|
|
358
361
|
});
|
|
359
|
-
|
|
360
362
|
if (cb !== undefined) {
|
|
361
363
|
return cb();
|
|
362
364
|
}
|
|
363
|
-
|
|
364
365
|
return Promise.resolve();
|
|
365
366
|
}),
|
|
366
367
|
clear: jest.fn(function (cb) {
|
|
367
368
|
store = {};
|
|
368
|
-
|
|
369
369
|
if (cb !== undefined) {
|
|
370
370
|
return cb();
|
|
371
371
|
}
|
|
372
|
-
|
|
373
372
|
return Promise.resolve();
|
|
374
373
|
})
|
|
375
374
|
},
|
|
@@ -384,10 +383,8 @@ var getDetails = function getDetails(details, cb) {
|
|
|
384
383
|
if (cb !== undefined) {
|
|
385
384
|
return cb();
|
|
386
385
|
}
|
|
387
|
-
|
|
388
386
|
return Promise.resolve();
|
|
389
387
|
};
|
|
390
|
-
|
|
391
388
|
var browserAction = {
|
|
392
389
|
setTitle: jest.fn(),
|
|
393
390
|
getTitle: jest.fn(getDetails),
|
|
@@ -406,12 +403,12 @@ var browserAction = {
|
|
|
406
403
|
};
|
|
407
404
|
|
|
408
405
|
// https://developer.chrome.com/extensions/commands
|
|
406
|
+
|
|
409
407
|
var commands = {
|
|
410
408
|
getAll: jest.fn(function (cb) {
|
|
411
409
|
if (cb !== undefined) {
|
|
412
410
|
return cb();
|
|
413
411
|
}
|
|
414
|
-
|
|
415
412
|
return Promise.resolve();
|
|
416
413
|
}),
|
|
417
414
|
onCommand: {
|
|
@@ -423,22 +420,17 @@ var cbOrPromise$1 = function cbOrPromise(cb, value) {
|
|
|
423
420
|
if (cb !== undefined) {
|
|
424
421
|
return cb(value);
|
|
425
422
|
}
|
|
426
|
-
|
|
427
423
|
return Promise.resolve(value);
|
|
428
424
|
};
|
|
429
|
-
|
|
430
425
|
var create = function create(notificationId, options, cb) {
|
|
431
426
|
if (typeof notificationId !== 'string') {
|
|
432
427
|
notificationId = 'generated-id';
|
|
433
428
|
}
|
|
434
|
-
|
|
435
429
|
if (typeof options === 'function') {
|
|
436
430
|
cb = options;
|
|
437
431
|
}
|
|
438
|
-
|
|
439
432
|
return cbOrPromise$1(cb, notificationId);
|
|
440
433
|
};
|
|
441
|
-
|
|
442
434
|
var notifications = {
|
|
443
435
|
create: jest.fn(create),
|
|
444
436
|
update: jest.fn(function (notificationId, options, cb) {
|
|
@@ -498,10 +490,8 @@ var cbOrPromise = function cbOrPromise(cb, value) {
|
|
|
498
490
|
if (cb !== undefined) {
|
|
499
491
|
return cb(value);
|
|
500
492
|
}
|
|
501
|
-
|
|
502
493
|
return Promise.resolve(value);
|
|
503
494
|
};
|
|
504
|
-
|
|
505
495
|
var downloads = {
|
|
506
496
|
acceptDanger: jest.fn(function (downloadId, cb) {
|
|
507
497
|
return cbOrPromise(cb);
|
|
@@ -536,6 +526,20 @@ var downloads = {
|
|
|
536
526
|
showDefaultFolder: jest.fn()
|
|
537
527
|
};
|
|
538
528
|
|
|
529
|
+
// https://developer.chrome.com/extensions/permissions
|
|
530
|
+
var permissions = {
|
|
531
|
+
contains: jest.fn(),
|
|
532
|
+
getAll: jest.fn(),
|
|
533
|
+
remove: jest.fn(),
|
|
534
|
+
request: jest.fn(),
|
|
535
|
+
onAdded: {
|
|
536
|
+
addListener: jest.fn()
|
|
537
|
+
},
|
|
538
|
+
onRemoved: {
|
|
539
|
+
addListener: jest.fn()
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
|
|
539
543
|
var geckoProfiler = {
|
|
540
544
|
stop: jest.fn(function () {
|
|
541
545
|
return Promise.resolve();
|
|
@@ -563,6 +567,9 @@ var geckoProfiler = {
|
|
|
563
567
|
}
|
|
564
568
|
};
|
|
565
569
|
|
|
570
|
+
globalThis[Symbol["for"]('jest-webextension-mock')] = _objectSpread2({
|
|
571
|
+
extensionPath: 'moz-extension://8b413e68-1e0d-4cad-b98e-1eb000799783/'
|
|
572
|
+
}, globalThis[Symbol["for"]('jest-webextension-mock')]);
|
|
566
573
|
var chrome = {
|
|
567
574
|
omnibox: omnibox,
|
|
568
575
|
tabs: tabs,
|
|
@@ -575,7 +582,8 @@ var chrome = {
|
|
|
575
582
|
i18n: i18n,
|
|
576
583
|
webNavigation: webNavigation,
|
|
577
584
|
extension: extension,
|
|
578
|
-
downloads: downloads
|
|
585
|
+
downloads: downloads,
|
|
586
|
+
permissions: permissions
|
|
579
587
|
};
|
|
580
588
|
// Firefox uses 'browser' but aliases it to chrome
|
|
581
589
|
|
|
@@ -585,14 +593,16 @@ var chrome = {
|
|
|
585
593
|
* directly call the module in their `setupFiles` property.
|
|
586
594
|
*/
|
|
587
595
|
global.chrome = chrome;
|
|
588
|
-
global.browser = chrome;
|
|
596
|
+
global.browser = chrome;
|
|
597
|
+
|
|
598
|
+
// Firefox specific globals
|
|
589
599
|
// if (navigator.userAgent.indexOf('Firefox') !== -1) {
|
|
590
600
|
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#exportFunction
|
|
591
|
-
|
|
592
601
|
global.exportFunction = jest.fn(function (func) {
|
|
593
602
|
return func;
|
|
594
|
-
});
|
|
595
|
-
|
|
603
|
+
});
|
|
604
|
+
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#cloneInto
|
|
596
605
|
global.cloneInto = jest.fn(function (obj) {
|
|
597
606
|
return obj;
|
|
598
|
-
});
|
|
607
|
+
});
|
|
608
|
+
// }
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jest-webextension-mock",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.11",
|
|
4
4
|
"description": "Mock the components of a WebExtension",
|
|
5
5
|
"main": "dist/setup.js",
|
|
6
6
|
"module": "src/setup.js",
|
|
7
|
-
"author": "
|
|
7
|
+
"author": "Marwan Zibaoui <marwan.zibaoui@gmail.com> (https://mas.to/@Rickymarou)",
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/
|
|
11
|
+
"url": "https://github.com/RickyMarou/jest-webextension-mock"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
14
|
"test": "jest",
|
package/src/index.js
CHANGED
|
@@ -9,10 +9,16 @@ import { i18n } from './i18n';
|
|
|
9
9
|
import { webNavigation } from './webNavigation';
|
|
10
10
|
import { extension } from './extension';
|
|
11
11
|
import { downloads } from './downloads';
|
|
12
|
+
import { permissions } from './permissions';
|
|
12
13
|
|
|
13
14
|
// Firefox specific API
|
|
14
15
|
import { geckoProfiler } from './geckoProfiler';
|
|
15
16
|
|
|
17
|
+
globalThis[Symbol.for('jest-webextension-mock')] = {
|
|
18
|
+
extensionPath: 'moz-extension://8b413e68-1e0d-4cad-b98e-1eb000799783/',
|
|
19
|
+
...globalThis[Symbol.for('jest-webextension-mock')],
|
|
20
|
+
};
|
|
21
|
+
|
|
16
22
|
const chrome = {
|
|
17
23
|
omnibox,
|
|
18
24
|
tabs,
|
|
@@ -26,6 +32,7 @@ const chrome = {
|
|
|
26
32
|
webNavigation,
|
|
27
33
|
extension,
|
|
28
34
|
downloads,
|
|
35
|
+
permissions,
|
|
29
36
|
};
|
|
30
37
|
|
|
31
38
|
export { chrome };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// https://developer.chrome.com/extensions/permissions
|
|
2
|
+
|
|
3
|
+
export let onMessageListeners = [];
|
|
4
|
+
export let onMessageExternalListeners = [];
|
|
5
|
+
|
|
6
|
+
export const permissions = {
|
|
7
|
+
contains: jest.fn(),
|
|
8
|
+
getAll: jest.fn(),
|
|
9
|
+
remove: jest.fn(),
|
|
10
|
+
request: jest.fn(),
|
|
11
|
+
onAdded: {
|
|
12
|
+
addListener: jest.fn(),
|
|
13
|
+
},
|
|
14
|
+
onRemoved: {
|
|
15
|
+
addListener: jest.fn(),
|
|
16
|
+
},
|
|
17
|
+
};
|
package/src/runtime.js
CHANGED
|
@@ -56,7 +56,8 @@ export const runtime = {
|
|
|
56
56
|
hasListener: jest.fn(),
|
|
57
57
|
},
|
|
58
58
|
getURL: jest.fn(function (path) {
|
|
59
|
-
|
|
59
|
+
const origin = globalThis[Symbol.for('jest-webextension-mock')].extensionPath;
|
|
60
|
+
return String(new URL(path, origin));
|
|
60
61
|
}),
|
|
61
62
|
openOptionsPage: jest.fn(),
|
|
62
63
|
getManifest: jest.fn(() => ({ manifest_version: 3 })),
|