@lynx-js/testing-environment 0.1.4 → 0.1.6
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/CHANGELOG.md +66 -0
- package/README.md +2 -1
- package/dist/env/vitest/index.cjs +1 -2
- package/dist/env/vitest/index.js +1 -2
- package/dist/index.cjs +6 -5
- package/dist/index.d.ts +4 -4
- package/dist/index.js +6 -5
- package/dist/lynx/GlobalEventEmitter.cjs +77 -0
- package/dist/lynx/GlobalEventEmitter.d.ts +10 -0
- package/dist/lynx/GlobalEventEmitter.js +43 -0
- package/package.json +5 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# @lynx-js/testing-environment
|
|
2
|
+
|
|
3
|
+
## 0.1.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fix that `lynxTestingEnv.jsdom` cannot be initialized correctly when `global.jsdom` is not defined. ([#1422](https://github.com/lynx-family/lynx-stack/pull/1422))
|
|
8
|
+
|
|
9
|
+
## 0.1.5
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Fix `GlobalEventEmitter` type definition, the `emit(eventName: string, data: unknown)` function should recevie an array typed `data` and pass as param list of listeners. ([#1479](https://github.com/lynx-family/lynx-stack/pull/1479))
|
|
14
|
+
|
|
15
|
+
## 0.1.4
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Fix the thread switching bug in `lynx.getCoreContext` and `lynx.getJSContext`. ([#1244](https://github.com/lynx-family/lynx-stack/pull/1244))
|
|
20
|
+
|
|
21
|
+
## 0.1.3
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Support alog of component rendering on production for better error reporting. Enable it by using `REACT_ALOG=true rspeedy dev/build` or defining `__ALOG__` to `true` in `lynx.config.js`: ([#1164](https://github.com/lynx-family/lynx-stack/pull/1164))
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
export default defineConfig({
|
|
29
|
+
// ...
|
|
30
|
+
source: {
|
|
31
|
+
define: {
|
|
32
|
+
__ALOG__: true,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- Supports `console.alog` and use different `console` object in main thread and background thread. ([#1164](https://github.com/lynx-family/lynx-stack/pull/1164))
|
|
39
|
+
|
|
40
|
+
## 0.1.2
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- Fix the infinite loop in the `__RemoveElement` element PAPI. ([#1263](https://github.com/lynx-family/lynx-stack/pull/1263))
|
|
45
|
+
|
|
46
|
+
## 0.1.1
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- Fix `getJSContext` or `getCoreContext` is not a function. ([#1122](https://github.com/lynx-family/lynx-stack/pull/1122))
|
|
51
|
+
|
|
52
|
+
## 0.1.0
|
|
53
|
+
|
|
54
|
+
### Minor Changes
|
|
55
|
+
|
|
56
|
+
- Switch to ESM package format by setting `"type": "module"`. ([#703](https://github.com/lynx-family/lynx-stack/pull/703))
|
|
57
|
+
|
|
58
|
+
### Patch Changes
|
|
59
|
+
|
|
60
|
+
- rename @lynx-js/test-environment to @lynx-js/testing-environment ([#704](https://github.com/lynx-family/lynx-stack/pull/704))
|
|
61
|
+
|
|
62
|
+
## 0.0.1
|
|
63
|
+
|
|
64
|
+
### Patch Changes
|
|
65
|
+
|
|
66
|
+
- Add testing library for ReactLynx ([#74](https://github.com/lynx-family/lynx-stack/pull/74))
|
package/README.md
CHANGED
|
@@ -8,8 +8,9 @@ The Element PAPI implementation is based on jsdom, for example `__CreateElement`
|
|
|
8
8
|
|
|
9
9
|
```js
|
|
10
10
|
import { LynxTestingEnv } from '@lynx-js/testing-environment';
|
|
11
|
+
import { JSDOM } from 'jsdom';
|
|
11
12
|
|
|
12
|
-
const lynxTestingEnv = new LynxTestingEnv();
|
|
13
|
+
const lynxTestingEnv = new LynxTestingEnv(new JSDOM());
|
|
13
14
|
```
|
|
14
15
|
|
|
15
16
|
To use `@lynx-js/testing-environment`, you will primarily use the `LynxTestingEnv` constructor, which is a named export of the package. You will get back a `LynxTestingEnv` instance, which has a number of methods of useful properties, notably `switchToMainThread` and `switchToBackgroundThread`, which allow you to switch between the main thread and background thread.
|
|
@@ -34,8 +34,7 @@ const env = {
|
|
|
34
34
|
async setup (global) {
|
|
35
35
|
const fakeGlobal = {};
|
|
36
36
|
await environments_namespaceObject.builtinEnvironments.jsdom.setup(fakeGlobal, {});
|
|
37
|
-
|
|
38
|
-
const lynxTestingEnv = new testing_environment_namespaceObject.LynxTestingEnv();
|
|
37
|
+
const lynxTestingEnv = new testing_environment_namespaceObject.LynxTestingEnv(fakeGlobal.jsdom);
|
|
39
38
|
global.lynxTestingEnv = lynxTestingEnv;
|
|
40
39
|
return {
|
|
41
40
|
teardown (global) {
|
package/dist/env/vitest/index.js
CHANGED
|
@@ -6,8 +6,7 @@ const env = {
|
|
|
6
6
|
async setup (global) {
|
|
7
7
|
const fakeGlobal = {};
|
|
8
8
|
await builtinEnvironments.jsdom.setup(fakeGlobal, {});
|
|
9
|
-
|
|
10
|
-
const lynxTestingEnv = new LynxTestingEnv();
|
|
9
|
+
const lynxTestingEnv = new LynxTestingEnv(fakeGlobal.jsdom);
|
|
11
10
|
global.lynxTestingEnv = lynxTestingEnv;
|
|
12
11
|
return {
|
|
13
12
|
teardown (global) {
|
package/dist/index.cjs
CHANGED
|
@@ -41,6 +41,7 @@ var external_events_default = /*#__PURE__*/ __webpack_require__.n(external_event
|
|
|
41
41
|
const GlobalThis_cjs_namespaceObject = require("./lynx/GlobalThis.cjs");
|
|
42
42
|
const ElementPAPI_cjs_namespaceObject = require("./lynx/ElementPAPI.cjs");
|
|
43
43
|
const external_console_namespaceObject = require("console");
|
|
44
|
+
const GlobalEventEmitter_cjs_namespaceObject = require("./lynx/GlobalEventEmitter.cjs");
|
|
44
45
|
function _define_property(obj, key, value) {
|
|
45
46
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
46
47
|
value: value,
|
|
@@ -231,9 +232,7 @@ function injectBackgroundThreadGlobals(target, polyfills) {
|
|
|
231
232
|
updateData: {}
|
|
232
233
|
}
|
|
233
234
|
};
|
|
234
|
-
const globalEventEmitter = new (
|
|
235
|
-
globalEventEmitter.trigger = globalEventEmitter.emit;
|
|
236
|
-
globalEventEmitter.toggle = globalEventEmitter.emit;
|
|
235
|
+
const globalEventEmitter = new GlobalEventEmitter_cjs_namespaceObject.GlobalEventEmitter();
|
|
237
236
|
target.lynx = {
|
|
238
237
|
getNativeApp: ()=>app,
|
|
239
238
|
performance,
|
|
@@ -311,11 +310,13 @@ class LynxTestingEnv {
|
|
|
311
310
|
this.switchToBackgroundThread();
|
|
312
311
|
null == (_globalThis_onResetLynxTestingEnv = (_globalThis = globalThis).onResetLynxTestingEnv) || _globalThis_onResetLynxTestingEnv.call(_globalThis);
|
|
313
312
|
}
|
|
314
|
-
constructor(){
|
|
313
|
+
constructor(jsdom){
|
|
315
314
|
_define_property(this, "originals", new Map());
|
|
316
315
|
_define_property(this, "backgroundThread", void 0);
|
|
317
316
|
_define_property(this, "mainThread", void 0);
|
|
318
|
-
_define_property(this, "jsdom",
|
|
317
|
+
_define_property(this, "jsdom", void 0);
|
|
318
|
+
this.jsdom = jsdom ?? global.jsdom;
|
|
319
|
+
if (!this.jsdom) throw new Error("LynxTestingEnv requires a JSDOM instance. Pass one to the constructor, or ensure your test runner sets global.jsdom (e.g., via a setup file).");
|
|
319
320
|
this.backgroundThread = (0, GlobalThis_cjs_namespaceObject.createGlobalThis)();
|
|
320
321
|
this.mainThread = (0, GlobalThis_cjs_namespaceObject.createGlobalThis)();
|
|
321
322
|
const globalPolyfills = {
|
package/dist/index.d.ts
CHANGED
|
@@ -56,7 +56,7 @@ declare global {
|
|
|
56
56
|
* ```ts
|
|
57
57
|
* import { LynxTestingEnv } from '@lynx-js/testing-environment';
|
|
58
58
|
*
|
|
59
|
-
* const lynxTestingEnv = new LynxTestingEnv();
|
|
59
|
+
* const lynxTestingEnv = new LynxTestingEnv(new JSDOM());
|
|
60
60
|
*
|
|
61
61
|
* lynxTestingEnv.switchToMainThread();
|
|
62
62
|
* // use the main thread Element PAPI
|
|
@@ -78,7 +78,7 @@ export declare class LynxTestingEnv {
|
|
|
78
78
|
* ```ts
|
|
79
79
|
* import { LynxTestingEnv } from '@lynx-js/testing-environment';
|
|
80
80
|
*
|
|
81
|
-
* const lynxTestingEnv = new LynxTestingEnv();
|
|
81
|
+
* const lynxTestingEnv = new LynxTestingEnv(new JSDOM());
|
|
82
82
|
*
|
|
83
83
|
* lynxTestingEnv.switchToBackgroundThread();
|
|
84
84
|
* // use the background thread global object
|
|
@@ -94,7 +94,7 @@ export declare class LynxTestingEnv {
|
|
|
94
94
|
* ```ts
|
|
95
95
|
* import { LynxTestingEnv } from '@lynx-js/testing-environment';
|
|
96
96
|
*
|
|
97
|
-
* const lynxTestingEnv = new LynxTestingEnv();
|
|
97
|
+
* const lynxTestingEnv = new LynxTestingEnv(new JSDOM());
|
|
98
98
|
*
|
|
99
99
|
* lynxTestingEnv.switchToMainThread();
|
|
100
100
|
* // use the main thread global object
|
|
@@ -105,7 +105,7 @@ export declare class LynxTestingEnv {
|
|
|
105
105
|
*/
|
|
106
106
|
mainThread: LynxGlobalThis & ElementTreeGlobals;
|
|
107
107
|
jsdom: JSDOM;
|
|
108
|
-
constructor();
|
|
108
|
+
constructor(jsdom?: JSDOM);
|
|
109
109
|
injectGlobals(): void;
|
|
110
110
|
switchToBackgroundThread(): void;
|
|
111
111
|
switchToMainThread(): void;
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import events from "events";
|
|
|
2
2
|
import { createGlobalThis } from "./lynx/GlobalThis.js";
|
|
3
3
|
import { initElementTree } from "./lynx/ElementPAPI.js";
|
|
4
4
|
import { Console } from "console";
|
|
5
|
+
import { GlobalEventEmitter } from "./lynx/GlobalEventEmitter.js";
|
|
5
6
|
function _define_property(obj, key, value) {
|
|
6
7
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
7
8
|
value: value,
|
|
@@ -192,9 +193,7 @@ function injectBackgroundThreadGlobals(target, polyfills) {
|
|
|
192
193
|
updateData: {}
|
|
193
194
|
}
|
|
194
195
|
};
|
|
195
|
-
const globalEventEmitter = new
|
|
196
|
-
globalEventEmitter.trigger = globalEventEmitter.emit;
|
|
197
|
-
globalEventEmitter.toggle = globalEventEmitter.emit;
|
|
196
|
+
const globalEventEmitter = new GlobalEventEmitter();
|
|
198
197
|
target.lynx = {
|
|
199
198
|
getNativeApp: ()=>app,
|
|
200
199
|
performance,
|
|
@@ -272,11 +271,13 @@ class LynxTestingEnv {
|
|
|
272
271
|
this.switchToBackgroundThread();
|
|
273
272
|
null == (_globalThis_onResetLynxTestingEnv = (_globalThis = globalThis).onResetLynxTestingEnv) || _globalThis_onResetLynxTestingEnv.call(_globalThis);
|
|
274
273
|
}
|
|
275
|
-
constructor(){
|
|
274
|
+
constructor(jsdom){
|
|
276
275
|
_define_property(this, "originals", new Map());
|
|
277
276
|
_define_property(this, "backgroundThread", void 0);
|
|
278
277
|
_define_property(this, "mainThread", void 0);
|
|
279
|
-
_define_property(this, "jsdom",
|
|
278
|
+
_define_property(this, "jsdom", void 0);
|
|
279
|
+
this.jsdom = jsdom ?? global.jsdom;
|
|
280
|
+
if (!this.jsdom) throw new Error("LynxTestingEnv requires a JSDOM instance. Pass one to the constructor, or ensure your test runner sets global.jsdom (e.g., via a setup file).");
|
|
280
281
|
this.backgroundThread = createGlobalThis();
|
|
281
282
|
this.mainThread = createGlobalThis();
|
|
282
283
|
const globalPolyfills = {
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
GlobalEventEmitter: ()=>GlobalEventEmitter
|
|
28
|
+
});
|
|
29
|
+
function _define_property(obj, key, value) {
|
|
30
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
31
|
+
value: value,
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true
|
|
35
|
+
});
|
|
36
|
+
else obj[key] = value;
|
|
37
|
+
return obj;
|
|
38
|
+
}
|
|
39
|
+
class GlobalEventEmitter {
|
|
40
|
+
addListener(eventName, listener) {
|
|
41
|
+
this.listeners[eventName] ??= [];
|
|
42
|
+
this.listeners[eventName].push(listener);
|
|
43
|
+
}
|
|
44
|
+
removeListener(eventName, listener) {
|
|
45
|
+
if (!this.listeners[eventName]) return;
|
|
46
|
+
this.listeners[eventName] = this.listeners[eventName].filter((l)=>l !== listener);
|
|
47
|
+
}
|
|
48
|
+
emit(eventName, args) {
|
|
49
|
+
if (!this.listeners[eventName]) return;
|
|
50
|
+
this.listeners[eventName].forEach((listener)=>args ? listener(...args) : listener());
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
this.listeners = {};
|
|
54
|
+
}
|
|
55
|
+
removeAllListeners(eventName) {
|
|
56
|
+
if (eventName) delete this.listeners[eventName];
|
|
57
|
+
else this.clear();
|
|
58
|
+
}
|
|
59
|
+
trigger(eventName, params) {
|
|
60
|
+
this.emit(eventName, [
|
|
61
|
+
params
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
toggle(eventName, ...data) {
|
|
65
|
+
this.emit(eventName, data);
|
|
66
|
+
}
|
|
67
|
+
constructor(){
|
|
68
|
+
_define_property(this, "listeners", {});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.GlobalEventEmitter = __webpack_exports__.GlobalEventEmitter;
|
|
72
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
73
|
+
"GlobalEventEmitter"
|
|
74
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
75
|
+
Object.defineProperty(exports, '__esModule', {
|
|
76
|
+
value: true
|
|
77
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class GlobalEventEmitter {
|
|
2
|
+
listeners: Record<string, Function[]>;
|
|
3
|
+
addListener(eventName: string, listener: Function): void;
|
|
4
|
+
removeListener(eventName: string, listener: Function): void;
|
|
5
|
+
emit(eventName: string, args: any[]): void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
removeAllListeners(eventName?: string): void;
|
|
8
|
+
trigger(eventName: string, params: string | Record<any, any>): void;
|
|
9
|
+
toggle(eventName: string, ...data: unknown[]): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
3
|
+
value: value,
|
|
4
|
+
enumerable: true,
|
|
5
|
+
configurable: true,
|
|
6
|
+
writable: true
|
|
7
|
+
});
|
|
8
|
+
else obj[key] = value;
|
|
9
|
+
return obj;
|
|
10
|
+
}
|
|
11
|
+
class GlobalEventEmitter {
|
|
12
|
+
addListener(eventName, listener) {
|
|
13
|
+
this.listeners[eventName] ??= [];
|
|
14
|
+
this.listeners[eventName].push(listener);
|
|
15
|
+
}
|
|
16
|
+
removeListener(eventName, listener) {
|
|
17
|
+
if (!this.listeners[eventName]) return;
|
|
18
|
+
this.listeners[eventName] = this.listeners[eventName].filter((l)=>l !== listener);
|
|
19
|
+
}
|
|
20
|
+
emit(eventName, args) {
|
|
21
|
+
if (!this.listeners[eventName]) return;
|
|
22
|
+
this.listeners[eventName].forEach((listener)=>args ? listener(...args) : listener());
|
|
23
|
+
}
|
|
24
|
+
clear() {
|
|
25
|
+
this.listeners = {};
|
|
26
|
+
}
|
|
27
|
+
removeAllListeners(eventName) {
|
|
28
|
+
if (eventName) delete this.listeners[eventName];
|
|
29
|
+
else this.clear();
|
|
30
|
+
}
|
|
31
|
+
trigger(eventName, params) {
|
|
32
|
+
this.emit(eventName, [
|
|
33
|
+
params
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
toggle(eventName, ...data) {
|
|
37
|
+
this.emit(eventName, data);
|
|
38
|
+
}
|
|
39
|
+
constructor(){
|
|
40
|
+
_define_property(this, "listeners", {});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export { GlobalEventEmitter };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynx-js/testing-environment",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "A subset of a Lynx environment to be useful for testing",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Lynx",
|
|
@@ -43,12 +43,13 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"files": [
|
|
46
|
-
"dist"
|
|
46
|
+
"dist",
|
|
47
|
+
"CHANGELOG.md"
|
|
47
48
|
],
|
|
48
49
|
"devDependencies": {
|
|
49
|
-
"@testing-library/jest-dom": "^6.
|
|
50
|
+
"@testing-library/jest-dom": "^6.7.0",
|
|
50
51
|
"@types/jsdom": "^21.1.7",
|
|
51
|
-
"rsbuild-plugin-publint": "0.3.
|
|
52
|
+
"rsbuild-plugin-publint": "0.3.3"
|
|
52
53
|
},
|
|
53
54
|
"scripts": {
|
|
54
55
|
"api-extractor": "api-extractor run --verbose",
|