jest-webextension-mock 3.8.12 → 3.8.14

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.
@@ -0,0 +1,8 @@
1
+ # Changesets
2
+
3
+ Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4
+ with multi-package repos, or single-package repos to help you version and publish your code. You can
5
+ find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6
+
7
+ We have a quick list of common questions to get you started engaging with this project in
8
+ [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
3
+ "changelog": "@changesets/cli/changelog",
4
+ "commit": false,
5
+ "fixed": [],
6
+ "linked": [],
7
+ "access": "restricted",
8
+ "baseBranch": "main",
9
+ "updateInternalDependencies": "patch",
10
+ "ignore": []
11
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # jest-webextension-mock
2
+
3
+ ## 3.8.14
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix different storage types using the same store
8
+
9
+ ## 3.8.13
10
+
11
+ ### Patch Changes
12
+
13
+ - 2800518: Add storage onChange event listeners
@@ -143,6 +143,26 @@ describe('browser.storage', () => {
143
143
  });
144
144
  });
145
145
  });
146
+ test('onChanged', () => {
147
+ const callback = jest.fn();
148
+ expect(jest.isMockFunction(storage.onChanged.addListener)).toBe(true);
149
+ expect(jest.isMockFunction(storage.onChanged.removeListener)).toBe(
150
+ true
151
+ );
152
+ expect(jest.isMockFunction(storage.onChanged.hasListener)).toBe(true);
153
+ expect(jest.isMockFunction(storage.onChanged.hasListeners)).toBe(true);
154
+
155
+ expect(storage.onChanged.hasListeners()).toBe(false);
156
+ expect(storage.onChanged.hasListener(callback)).toBe(false);
157
+
158
+ storage.onChanged.addListener(callback);
159
+ expect(storage.onChanged.hasListeners()).toBe(true);
160
+ expect(storage.onChanged.hasListener(callback)).toBe(true);
161
+
162
+ storage.onChanged.removeListener(callback);
163
+ expect(storage.onChanged.hasListeners()).toBe(false);
164
+ expect(storage.onChanged.hasListener(callback)).toBe(false);
165
+ });
146
166
  });
147
167
  });
148
168
  });
package/dist/setup.js CHANGED
@@ -239,6 +239,26 @@ var tabs = {
239
239
  })
240
240
  };
241
241
 
242
+ var createEventListeners = function createEventListeners() {
243
+ var listeners = [];
244
+ return {
245
+ addListener: jest.fn(function (listener) {
246
+ listeners.push(listener);
247
+ }),
248
+ removeListener: jest.fn(function (listener) {
249
+ listeners = listeners.filter(function (l) {
250
+ return l !== listener;
251
+ });
252
+ }),
253
+ hasListener: jest.fn(function (listener) {
254
+ return listeners.includes(listener);
255
+ }),
256
+ hasListeners: jest.fn(function () {
257
+ return listeners.length > 0;
258
+ })
259
+ };
260
+ };
261
+
242
262
  var store = {};
243
263
  function resolveKey(key) {
244
264
  if (typeof key === 'string') {
@@ -298,7 +318,8 @@ var storage = {
298
318
  return cb();
299
319
  }
300
320
  return Promise.resolve();
301
- })
321
+ }),
322
+ onChanged: createEventListeners()
302
323
  },
303
324
  local: {
304
325
  get: jest.fn(function (id, cb) {
@@ -339,7 +360,8 @@ var storage = {
339
360
  return cb();
340
361
  }
341
362
  return Promise.resolve();
342
- })
363
+ }),
364
+ onChanged: createEventListeners()
343
365
  },
344
366
  managed: {
345
367
  get: jest.fn(function (id, cb) {
@@ -380,13 +402,10 @@ var storage = {
380
402
  return cb();
381
403
  }
382
404
  return Promise.resolve();
383
- })
405
+ }),
406
+ onChanged: createEventListeners()
384
407
  },
385
- onChanged: {
386
- addListener: jest.fn(),
387
- removeListener: jest.fn(),
388
- hasListener: jest.fn()
389
- }
408
+ onChanged: createEventListeners()
390
409
  };
391
410
 
392
411
  var getDetails = function getDetails(details, cb) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jest-webextension-mock",
3
- "version": "3.8.12",
3
+ "version": "3.8.14",
4
4
  "description": "Mock the components of a WebExtension",
5
5
  "main": "dist/setup.js",
6
6
  "module": "src/setup.js",
@@ -13,16 +13,16 @@
13
13
  "scripts": {
14
14
  "test": "jest",
15
15
  "build": "rollup -c",
16
- "release": "bumpp && npm publish",
16
+ "release": "changeset version",
17
17
  "prettier": "prettier --write \"{config,src,__{tests,setups}__}/**/*.js\" rollup.config.js",
18
18
  "eslint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@babel/core": "^7.11.6",
22
22
  "@babel/preset-env": "^7.11.5",
23
+ "@changesets/cli": "^2.27.1",
23
24
  "babel-core": "^7.0.0-bridge.0",
24
25
  "babel-jest": "^26.5.2",
25
- "bumpp": "^9.4.0",
26
26
  "eslint": "^7.11.0",
27
27
  "eslint-config-prettier": "^6.12.0",
28
28
  "eslint-plugin-prettier": "^3.1.4",
@@ -0,0 +1,18 @@
1
+ export const createEventListeners = () => {
2
+ let listeners = [];
3
+
4
+ return {
5
+ addListener: jest.fn((listener) => {
6
+ listeners.push(listener);
7
+ }),
8
+ removeListener: jest.fn((listener) => {
9
+ listeners = listeners.filter((l) => l !== listener);
10
+ }),
11
+ hasListener: jest.fn((listener) => {
12
+ return listeners.includes(listener);
13
+ }),
14
+ hasListeners: jest.fn(() => {
15
+ return listeners.length > 0;
16
+ }),
17
+ };
18
+ };
package/src/storage.js CHANGED
@@ -1,6 +1,10 @@
1
- let store = {};
1
+ import { createEventListeners } from './createEventListeners';
2
2
 
3
- function resolveKey(key) {
3
+ let syncStore = {};
4
+ let localStore = {};
5
+ let managedStore = {};
6
+
7
+ function resolveKey(key, store) {
4
8
  if (typeof key === 'string') {
5
9
  const result = {};
6
10
  result[key] = store[key];
@@ -22,7 +26,7 @@ function resolveKey(key) {
22
26
  export const storage = {
23
27
  sync: {
24
28
  get: jest.fn((id, cb) => {
25
- const result = id === null ? store : resolveKey(id);
29
+ const result = id === null ? syncStore : resolveKey(id, syncStore);
26
30
  if (cb !== undefined) {
27
31
  return cb(result);
28
32
  }
@@ -35,7 +39,7 @@ export const storage = {
35
39
  return Promise.resolve(0);
36
40
  }),
37
41
  set: jest.fn((payload, cb) => {
38
- Object.keys(payload).forEach((key) => (store[key] = payload[key]));
42
+ Object.keys(payload).forEach((key) => (syncStore[key] = payload[key]));
39
43
  if (cb !== undefined) {
40
44
  return cb();
41
45
  }
@@ -43,23 +47,24 @@ export const storage = {
43
47
  }),
44
48
  remove: jest.fn((id, cb) => {
45
49
  const keys = typeof id === 'string' ? [id] : id;
46
- keys.forEach((key) => delete store[key]);
50
+ keys.forEach((key) => delete syncStore[key]);
47
51
  if (cb !== undefined) {
48
52
  return cb();
49
53
  }
50
54
  return Promise.resolve();
51
55
  }),
52
56
  clear: jest.fn((cb) => {
53
- store = {};
57
+ syncStore = {};
54
58
  if (cb !== undefined) {
55
59
  return cb();
56
60
  }
57
61
  return Promise.resolve();
58
62
  }),
63
+ onChanged: createEventListeners(),
59
64
  },
60
65
  local: {
61
66
  get: jest.fn((id, cb) => {
62
- const result = id === null ? store : resolveKey(id);
67
+ const result = id === null ? localStore : resolveKey(id, localStore);
63
68
  if (cb !== undefined) {
64
69
  return cb(result);
65
70
  }
@@ -72,7 +77,7 @@ export const storage = {
72
77
  return Promise.resolve(0);
73
78
  }),
74
79
  set: jest.fn((payload, cb) => {
75
- Object.keys(payload).forEach((key) => (store[key] = payload[key]));
80
+ Object.keys(payload).forEach((key) => (localStore[key] = payload[key]));
76
81
  if (cb !== undefined) {
77
82
  return cb();
78
83
  }
@@ -80,23 +85,24 @@ export const storage = {
80
85
  }),
81
86
  remove: jest.fn((id, cb) => {
82
87
  const keys = typeof id === 'string' ? [id] : id;
83
- keys.forEach((key) => delete store[key]);
88
+ keys.forEach((key) => delete localStore[key]);
84
89
  if (cb !== undefined) {
85
90
  return cb();
86
91
  }
87
92
  return Promise.resolve();
88
93
  }),
89
94
  clear: jest.fn((cb) => {
90
- store = {};
95
+ localStore = {};
91
96
  if (cb !== undefined) {
92
97
  return cb();
93
98
  }
94
99
  return Promise.resolve();
95
100
  }),
101
+ onChanged: createEventListeners(),
96
102
  },
97
103
  managed: {
98
104
  get: jest.fn((id, cb) => {
99
- const result = id === null ? store : resolveKey(id);
105
+ const result = id === null ? managedStore : resolveKey(id, managedStore);
100
106
  if (cb !== undefined) {
101
107
  return cb(result);
102
108
  }
@@ -109,7 +115,7 @@ export const storage = {
109
115
  return Promise.resolve(0);
110
116
  }),
111
117
  set: jest.fn((payload, cb) => {
112
- Object.keys(payload).forEach((key) => (store[key] = payload[key]));
118
+ Object.keys(payload).forEach((key) => (managedStore[key] = payload[key]));
113
119
  if (cb !== undefined) {
114
120
  return cb();
115
121
  }
@@ -117,23 +123,20 @@ export const storage = {
117
123
  }),
118
124
  remove: jest.fn((id, cb) => {
119
125
  const keys = typeof id === 'string' ? [id] : id;
120
- keys.forEach((key) => delete store[key]);
126
+ keys.forEach((key) => delete managedStore[key]);
121
127
  if (cb !== undefined) {
122
128
  return cb();
123
129
  }
124
130
  return Promise.resolve();
125
131
  }),
126
132
  clear: jest.fn((cb) => {
127
- store = {};
133
+ managedStore = {};
128
134
  if (cb !== undefined) {
129
135
  return cb();
130
136
  }
131
137
  return Promise.resolve();
132
138
  }),
139
+ onChanged: createEventListeners(),
133
140
  },
134
- onChanged: {
135
- addListener: jest.fn(),
136
- removeListener: jest.fn(),
137
- hasListener: jest.fn(),
138
- },
141
+ onChanged: createEventListeners(),
139
142
  };