jest-webextension-mock 3.8.9 → 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/dist/setup.js +27 -62
- package/package.json +3 -3
- package/src/index.js +4 -2
- package/src/permissions.js +17 -0
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
|
+
});
|
package/dist/setup.js
CHANGED
|
@@ -2,17 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
function ownKeys(object, enumerableOnly) {
|
|
4
4
|
var keys = Object.keys(object);
|
|
5
|
-
|
|
6
5
|
if (Object.getOwnPropertySymbols) {
|
|
7
6
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
8
7
|
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
9
8
|
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
10
9
|
})), keys.push.apply(keys, symbols);
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
return keys;
|
|
14
12
|
}
|
|
15
|
-
|
|
16
13
|
function _objectSpread2(target) {
|
|
17
14
|
for (var i = 1; i < arguments.length; i++) {
|
|
18
15
|
var source = null != arguments[i] ? arguments[i] : {};
|
|
@@ -22,10 +19,8 @@ function _objectSpread2(target) {
|
|
|
22
19
|
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
23
20
|
});
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
return target;
|
|
27
23
|
}
|
|
28
|
-
|
|
29
24
|
function _typeof(obj) {
|
|
30
25
|
"@babel/helpers - typeof";
|
|
31
26
|
|
|
@@ -35,7 +30,6 @@ function _typeof(obj) {
|
|
|
35
30
|
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
36
31
|
}, _typeof(obj);
|
|
37
32
|
}
|
|
38
|
-
|
|
39
33
|
function _defineProperty(obj, key, value) {
|
|
40
34
|
if (key in obj) {
|
|
41
35
|
Object.defineProperty(obj, key, {
|
|
@@ -47,11 +41,11 @@ function _defineProperty(obj, key, value) {
|
|
|
47
41
|
} else {
|
|
48
42
|
obj[key] = value;
|
|
49
43
|
}
|
|
50
|
-
|
|
51
44
|
return obj;
|
|
52
45
|
}
|
|
53
46
|
|
|
54
47
|
// https://developer.chrome.com/extensions/omnibox
|
|
48
|
+
|
|
55
49
|
var omnibox = {
|
|
56
50
|
setDefaultSuggestion: jest.fn(),
|
|
57
51
|
onInputStarted: {
|
|
@@ -91,11 +85,9 @@ var runtime = {
|
|
|
91
85
|
onMessageListeners.forEach(function (listener) {
|
|
92
86
|
return listener(message);
|
|
93
87
|
});
|
|
94
|
-
|
|
95
88
|
if (cb !== undefined) {
|
|
96
89
|
return cb();
|
|
97
90
|
}
|
|
98
|
-
|
|
99
91
|
return Promise.resolve();
|
|
100
92
|
}),
|
|
101
93
|
onMessage: {
|
|
@@ -167,25 +159,22 @@ var tabs = {
|
|
|
167
159
|
onMessage: {
|
|
168
160
|
addListener: jest.fn()
|
|
169
161
|
},
|
|
170
|
-
postMessage: jest.fn()
|
|
171
|
-
|
|
162
|
+
postMessage: jest.fn()
|
|
163
|
+
// TODO: add sender
|
|
172
164
|
};
|
|
173
165
|
}),
|
|
174
166
|
create: jest.fn(function () {
|
|
175
167
|
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
176
168
|
var cb = arguments.length > 1 ? arguments[1] : undefined;
|
|
177
|
-
|
|
178
169
|
if (cb !== undefined) {
|
|
179
170
|
return cb(props);
|
|
180
171
|
}
|
|
181
|
-
|
|
182
172
|
return Promise.resolve(props);
|
|
183
173
|
}),
|
|
184
174
|
remove: jest.fn(function (tabIds, cb) {
|
|
185
175
|
if (cb !== undefined) {
|
|
186
176
|
return cb();
|
|
187
177
|
}
|
|
188
|
-
|
|
189
178
|
return Promise.resolve();
|
|
190
179
|
}),
|
|
191
180
|
duplicate: jest.fn(function () {
|
|
@@ -230,11 +219,9 @@ var tabs = {
|
|
|
230
219
|
onMessageListeners.forEach(function (listener) {
|
|
231
220
|
return listener(tabId, message);
|
|
232
221
|
});
|
|
233
|
-
|
|
234
222
|
if (cb !== undefined) {
|
|
235
223
|
return cb();
|
|
236
224
|
}
|
|
237
|
-
|
|
238
225
|
return Promise.resolve();
|
|
239
226
|
}),
|
|
240
227
|
reload: jest.fn(function (tabId, reloadProperties, cb) {
|
|
@@ -243,7 +230,6 @@ var tabs = {
|
|
|
243
230
|
};
|
|
244
231
|
|
|
245
232
|
var store = {};
|
|
246
|
-
|
|
247
233
|
function resolveKey(key) {
|
|
248
234
|
if (typeof key === 'string') {
|
|
249
235
|
var result = {};
|
|
@@ -260,37 +246,30 @@ function resolveKey(key) {
|
|
|
260
246
|
return acc;
|
|
261
247
|
}, {});
|
|
262
248
|
}
|
|
263
|
-
|
|
264
249
|
throw new Error('Wrong key given');
|
|
265
250
|
}
|
|
266
|
-
|
|
267
251
|
var storage = {
|
|
268
252
|
sync: {
|
|
269
253
|
get: jest.fn(function (id, cb) {
|
|
270
254
|
var result = id === null ? store : resolveKey(id);
|
|
271
|
-
|
|
272
255
|
if (cb !== undefined) {
|
|
273
256
|
return cb(result);
|
|
274
257
|
}
|
|
275
|
-
|
|
276
258
|
return Promise.resolve(result);
|
|
277
259
|
}),
|
|
278
260
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
279
261
|
if (cb !== undefined) {
|
|
280
262
|
return cb(0);
|
|
281
263
|
}
|
|
282
|
-
|
|
283
264
|
return Promise.resolve(0);
|
|
284
265
|
}),
|
|
285
266
|
set: jest.fn(function (payload, cb) {
|
|
286
267
|
Object.keys(payload).forEach(function (key) {
|
|
287
268
|
return store[key] = payload[key];
|
|
288
269
|
});
|
|
289
|
-
|
|
290
270
|
if (cb !== undefined) {
|
|
291
271
|
return cb();
|
|
292
272
|
}
|
|
293
|
-
|
|
294
273
|
return Promise.resolve();
|
|
295
274
|
}),
|
|
296
275
|
remove: jest.fn(function (id, cb) {
|
|
@@ -298,49 +277,40 @@ var storage = {
|
|
|
298
277
|
keys.forEach(function (key) {
|
|
299
278
|
return delete store[key];
|
|
300
279
|
});
|
|
301
|
-
|
|
302
280
|
if (cb !== undefined) {
|
|
303
281
|
return cb();
|
|
304
282
|
}
|
|
305
|
-
|
|
306
283
|
return Promise.resolve();
|
|
307
284
|
}),
|
|
308
285
|
clear: jest.fn(function (cb) {
|
|
309
286
|
store = {};
|
|
310
|
-
|
|
311
287
|
if (cb !== undefined) {
|
|
312
288
|
return cb();
|
|
313
289
|
}
|
|
314
|
-
|
|
315
290
|
return Promise.resolve();
|
|
316
291
|
})
|
|
317
292
|
},
|
|
318
293
|
local: {
|
|
319
294
|
get: jest.fn(function (id, cb) {
|
|
320
295
|
var result = id === null ? store : resolveKey(id);
|
|
321
|
-
|
|
322
296
|
if (cb !== undefined) {
|
|
323
297
|
return cb(result);
|
|
324
298
|
}
|
|
325
|
-
|
|
326
299
|
return Promise.resolve(result);
|
|
327
300
|
}),
|
|
328
301
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
329
302
|
if (cb !== undefined) {
|
|
330
303
|
return cb(0);
|
|
331
304
|
}
|
|
332
|
-
|
|
333
305
|
return Promise.resolve(0);
|
|
334
306
|
}),
|
|
335
307
|
set: jest.fn(function (payload, cb) {
|
|
336
308
|
Object.keys(payload).forEach(function (key) {
|
|
337
309
|
return store[key] = payload[key];
|
|
338
310
|
});
|
|
339
|
-
|
|
340
311
|
if (cb !== undefined) {
|
|
341
312
|
return cb();
|
|
342
313
|
}
|
|
343
|
-
|
|
344
314
|
return Promise.resolve();
|
|
345
315
|
}),
|
|
346
316
|
remove: jest.fn(function (id, cb) {
|
|
@@ -348,49 +318,40 @@ var storage = {
|
|
|
348
318
|
keys.forEach(function (key) {
|
|
349
319
|
return delete store[key];
|
|
350
320
|
});
|
|
351
|
-
|
|
352
321
|
if (cb !== undefined) {
|
|
353
322
|
return cb();
|
|
354
323
|
}
|
|
355
|
-
|
|
356
324
|
return Promise.resolve();
|
|
357
325
|
}),
|
|
358
326
|
clear: jest.fn(function (cb) {
|
|
359
327
|
store = {};
|
|
360
|
-
|
|
361
328
|
if (cb !== undefined) {
|
|
362
329
|
return cb();
|
|
363
330
|
}
|
|
364
|
-
|
|
365
331
|
return Promise.resolve();
|
|
366
332
|
})
|
|
367
333
|
},
|
|
368
334
|
managed: {
|
|
369
335
|
get: jest.fn(function (id, cb) {
|
|
370
336
|
var result = id === null ? store : resolveKey(id);
|
|
371
|
-
|
|
372
337
|
if (cb !== undefined) {
|
|
373
338
|
return cb(result);
|
|
374
339
|
}
|
|
375
|
-
|
|
376
340
|
return Promise.resolve(result);
|
|
377
341
|
}),
|
|
378
342
|
getBytesInUse: jest.fn(function (id, cb) {
|
|
379
343
|
if (cb !== undefined) {
|
|
380
344
|
return cb(0);
|
|
381
345
|
}
|
|
382
|
-
|
|
383
346
|
return Promise.resolve(0);
|
|
384
347
|
}),
|
|
385
348
|
set: jest.fn(function (payload, cb) {
|
|
386
349
|
Object.keys(payload).forEach(function (key) {
|
|
387
350
|
return store[key] = payload[key];
|
|
388
351
|
});
|
|
389
|
-
|
|
390
352
|
if (cb !== undefined) {
|
|
391
353
|
return cb();
|
|
392
354
|
}
|
|
393
|
-
|
|
394
355
|
return Promise.resolve();
|
|
395
356
|
}),
|
|
396
357
|
remove: jest.fn(function (id, cb) {
|
|
@@ -398,20 +359,16 @@ var storage = {
|
|
|
398
359
|
keys.forEach(function (key) {
|
|
399
360
|
return delete store[key];
|
|
400
361
|
});
|
|
401
|
-
|
|
402
362
|
if (cb !== undefined) {
|
|
403
363
|
return cb();
|
|
404
364
|
}
|
|
405
|
-
|
|
406
365
|
return Promise.resolve();
|
|
407
366
|
}),
|
|
408
367
|
clear: jest.fn(function (cb) {
|
|
409
368
|
store = {};
|
|
410
|
-
|
|
411
369
|
if (cb !== undefined) {
|
|
412
370
|
return cb();
|
|
413
371
|
}
|
|
414
|
-
|
|
415
372
|
return Promise.resolve();
|
|
416
373
|
})
|
|
417
374
|
},
|
|
@@ -426,10 +383,8 @@ var getDetails = function getDetails(details, cb) {
|
|
|
426
383
|
if (cb !== undefined) {
|
|
427
384
|
return cb();
|
|
428
385
|
}
|
|
429
|
-
|
|
430
386
|
return Promise.resolve();
|
|
431
387
|
};
|
|
432
|
-
|
|
433
388
|
var browserAction = {
|
|
434
389
|
setTitle: jest.fn(),
|
|
435
390
|
getTitle: jest.fn(getDetails),
|
|
@@ -448,12 +403,12 @@ var browserAction = {
|
|
|
448
403
|
};
|
|
449
404
|
|
|
450
405
|
// https://developer.chrome.com/extensions/commands
|
|
406
|
+
|
|
451
407
|
var commands = {
|
|
452
408
|
getAll: jest.fn(function (cb) {
|
|
453
409
|
if (cb !== undefined) {
|
|
454
410
|
return cb();
|
|
455
411
|
}
|
|
456
|
-
|
|
457
412
|
return Promise.resolve();
|
|
458
413
|
}),
|
|
459
414
|
onCommand: {
|
|
@@ -465,22 +420,17 @@ var cbOrPromise$1 = function cbOrPromise(cb, value) {
|
|
|
465
420
|
if (cb !== undefined) {
|
|
466
421
|
return cb(value);
|
|
467
422
|
}
|
|
468
|
-
|
|
469
423
|
return Promise.resolve(value);
|
|
470
424
|
};
|
|
471
|
-
|
|
472
425
|
var create = function create(notificationId, options, cb) {
|
|
473
426
|
if (typeof notificationId !== 'string') {
|
|
474
427
|
notificationId = 'generated-id';
|
|
475
428
|
}
|
|
476
|
-
|
|
477
429
|
if (typeof options === 'function') {
|
|
478
430
|
cb = options;
|
|
479
431
|
}
|
|
480
|
-
|
|
481
432
|
return cbOrPromise$1(cb, notificationId);
|
|
482
433
|
};
|
|
483
|
-
|
|
484
434
|
var notifications = {
|
|
485
435
|
create: jest.fn(create),
|
|
486
436
|
update: jest.fn(function (notificationId, options, cb) {
|
|
@@ -540,10 +490,8 @@ var cbOrPromise = function cbOrPromise(cb, value) {
|
|
|
540
490
|
if (cb !== undefined) {
|
|
541
491
|
return cb(value);
|
|
542
492
|
}
|
|
543
|
-
|
|
544
493
|
return Promise.resolve(value);
|
|
545
494
|
};
|
|
546
|
-
|
|
547
495
|
var downloads = {
|
|
548
496
|
acceptDanger: jest.fn(function (downloadId, cb) {
|
|
549
497
|
return cbOrPromise(cb);
|
|
@@ -578,6 +526,20 @@ var downloads = {
|
|
|
578
526
|
showDefaultFolder: jest.fn()
|
|
579
527
|
};
|
|
580
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
|
+
|
|
581
543
|
var geckoProfiler = {
|
|
582
544
|
stop: jest.fn(function () {
|
|
583
545
|
return Promise.resolve();
|
|
@@ -620,7 +582,8 @@ var chrome = {
|
|
|
620
582
|
i18n: i18n,
|
|
621
583
|
webNavigation: webNavigation,
|
|
622
584
|
extension: extension,
|
|
623
|
-
downloads: downloads
|
|
585
|
+
downloads: downloads,
|
|
586
|
+
permissions: permissions
|
|
624
587
|
};
|
|
625
588
|
// Firefox uses 'browser' but aliases it to chrome
|
|
626
589
|
|
|
@@ -630,14 +593,16 @@ var chrome = {
|
|
|
630
593
|
* directly call the module in their `setupFiles` property.
|
|
631
594
|
*/
|
|
632
595
|
global.chrome = chrome;
|
|
633
|
-
global.browser = chrome;
|
|
596
|
+
global.browser = chrome;
|
|
597
|
+
|
|
598
|
+
// Firefox specific globals
|
|
634
599
|
// if (navigator.userAgent.indexOf('Firefox') !== -1) {
|
|
635
600
|
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#exportFunction
|
|
636
|
-
|
|
637
601
|
global.exportFunction = jest.fn(function (func) {
|
|
638
602
|
return func;
|
|
639
|
-
});
|
|
640
|
-
|
|
603
|
+
});
|
|
604
|
+
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#cloneInto
|
|
641
605
|
global.cloneInto = jest.fn(function (obj) {
|
|
642
606
|
return obj;
|
|
643
|
-
});
|
|
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,13 +9,14 @@ 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
|
|
|
16
17
|
globalThis[Symbol.for('jest-webextension-mock')] = {
|
|
17
|
-
|
|
18
|
-
...globalThis[Symbol.for('jest-webextension-mock')]
|
|
18
|
+
extensionPath: 'moz-extension://8b413e68-1e0d-4cad-b98e-1eb000799783/',
|
|
19
|
+
...globalThis[Symbol.for('jest-webextension-mock')],
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
const chrome = {
|
|
@@ -31,6 +32,7 @@ const chrome = {
|
|
|
31
32
|
webNavigation,
|
|
32
33
|
extension,
|
|
33
34
|
downloads,
|
|
35
|
+
permissions,
|
|
34
36
|
};
|
|
35
37
|
|
|
36
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
|
+
};
|