@luma.gl/test-utils 9.0.0-alpha.4 → 9.0.0-alpha.40
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/LICENSE +3 -1
- package/dist/check-type.js +0 -1
- package/dist/check-type.js.map +1 -1
- package/dist/create-test-device.d.ts +11 -4
- package/dist/create-test-device.d.ts.map +1 -1
- package/dist/create-test-device.js +29 -18
- package/dist/create-test-device.js.map +1 -1
- package/dist/engine/classic-animation-loop.d.ts +135 -0
- package/dist/engine/classic-animation-loop.d.ts.map +1 -0
- package/dist/engine/classic-animation-loop.js +434 -0
- package/dist/engine/classic-animation-loop.js.map +1 -0
- package/dist/index.cjs +851 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/performance-test-runner.d.ts +7 -6
- package/dist/performance-test-runner.d.ts.map +1 -1
- package/dist/performance-test-runner.js +10 -22
- package/dist/performance-test-runner.js.map +1 -1
- package/dist/register-devices.d.ts +2 -0
- package/dist/register-devices.d.ts.map +1 -0
- package/dist/register-devices.js +7 -0
- package/dist/register-devices.js.map +1 -0
- package/dist/snapshot-test-runner.d.ts +11 -7
- package/dist/snapshot-test-runner.d.ts.map +1 -1
- package/dist/snapshot-test-runner.js +23 -29
- package/dist/snapshot-test-runner.js.map +1 -1
- package/dist/test-runner.d.ts +35 -23
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +62 -81
- package/dist/test-runner.js.map +1 -1
- package/dist/utils.d.ts +5 -5
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +28 -7
- package/src/check-type.ts +1 -1
- package/src/create-test-device.ts +38 -21
- package/src/engine/classic-animation-loop.ts +714 -0
- package/src/index.ts +5 -5
- package/src/performance-test-runner.ts +17 -13
- package/src/register-devices.ts +11 -0
- package/src/snapshot-test-runner.ts +33 -31
- package/src/test-runner.ts +100 -75
- package/src/utils.ts +1 -1
- package/dist/create-headless-context.d.ts +0 -2
- package/dist/create-headless-context.d.ts.map +0 -1
- package/dist/create-headless-context.js +0 -37
- package/dist/create-headless-context.js.map +0 -1
- package/dist/create-test-context.d.ts +0 -2
- package/dist/create-test-context.d.ts.map +0 -1
- package/dist/create-test-context.js +0 -6
- package/dist/create-test-context.js.map +0 -1
- package/src/create-headless-context.ts +0 -36
- package/src/create-test-context.ts +0 -29
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
import './register-devices';
|
|
1
2
|
export type { TestRunnerTestCase } from './test-runner';
|
|
2
3
|
export type { SnapshotTestRunnerTestCase } from './snapshot-test-runner';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export { createTestContext } from './create-test-context';
|
|
7
|
-
export { createTestDevice, webgl1TestDevice, webgl2TestDevice, webgpuTestDevice } from './create-test-device';
|
|
4
|
+
export { SnapshotTestRunner } from './snapshot-test-runner';
|
|
5
|
+
export { PerformanceTestRunner } from './performance-test-runner';
|
|
6
|
+
export { createTestDevice, createTestContext, webgl1Device, webgl2Device, webgpuDevice } from './create-test-device';
|
|
8
7
|
export { getTestDevices, getWebGLTestDevices } from './create-test-device';
|
|
9
8
|
export { checkType } from './check-type';
|
|
10
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,YAAY,EAAC,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,YAAY,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,YAAY,EAAC,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAC,MAAM,sBAAsB,CAAC;AACnH,OAAO,EAAC,cAAc,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { createTestContext } from
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export { checkType } from './check-type';
|
|
1
|
+
import "./register-devices.js";
|
|
2
|
+
export { SnapshotTestRunner } from "./snapshot-test-runner.js";
|
|
3
|
+
export { PerformanceTestRunner } from "./performance-test-runner.js";
|
|
4
|
+
export { createTestDevice, createTestContext, webgl1Device, webgl2Device, webgpuDevice } from "./create-test-device.js";
|
|
5
|
+
export { getTestDevices, getWebGLTestDevices } from "./create-test-device.js";
|
|
6
|
+
export { checkType } from "./check-type.js";
|
|
8
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["SnapshotTestRunner","PerformanceTestRunner","createTestDevice","createTestContext","webgl1Device","webgl2Device","webgpuDevice","getTestDevices","getWebGLTestDevices","checkType"],"sources":["../src/index.ts"],"sourcesContent":["import './register-devices';\n\nexport type {TestRunnerTestCase} from './test-runner';\nexport type {SnapshotTestRunnerTestCase} from './snapshot-test-runner';\n\nexport {SnapshotTestRunner} from './snapshot-test-runner';\nexport {PerformanceTestRunner} from './performance-test-runner';\nexport {createTestDevice, createTestContext, webgl1Device, webgl2Device, webgpuDevice} from './create-test-device';\nexport {getTestDevices, getWebGLTestDevices} from './create-test-device';\n\nexport {checkType} from './check-type';\n"],"mappings":";SAKQA,kBAAkB;AAAA,SAClBC,qBAAqB;AAAA,SACrBC,gBAAgB,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,YAAY,EAAEC,YAAY;AAAA,SAC7EC,cAAc,EAAEC,mBAAmB;AAAA,SAEnCC,SAAS"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import TestRunner,
|
|
2
|
-
export
|
|
1
|
+
import { TestRunner, TestRunnerProps, TestRunnerTestCase } from './test-runner';
|
|
2
|
+
export type PerformanceTestRunnerProps = TestRunnerProps;
|
|
3
|
+
export declare class PerformanceTestRunner extends TestRunner {
|
|
3
4
|
private _stats;
|
|
4
5
|
private _fps;
|
|
5
|
-
constructor(props:
|
|
6
|
-
initTestCase(testCase:
|
|
7
|
-
shouldRender(animationProps: any): boolean;
|
|
8
|
-
assert(testCase:
|
|
6
|
+
constructor(props: PerformanceTestRunnerProps);
|
|
7
|
+
initTestCase(testCase: TestRunnerTestCase): void;
|
|
8
|
+
shouldRender(animationProps: Record<string, any>): boolean;
|
|
9
|
+
assert(testCase: TestRunnerTestCase): void;
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=performance-test-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance-test-runner.d.ts","sourceRoot":"","sources":["../src/performance-test-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"performance-test-runner.d.ts","sourceRoot":"","sources":["../src/performance-test-runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,0BAA0B,GAAG,eAAe,CAAC;AAEzD,qBAAa,qBAAsB,SAAQ,UAAU;IACnD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,IAAI,CAAqB;gBAErB,KAAK,EAAE,0BAA0B;IASpC,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAMhD,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAW1D,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;CAapD"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
1
|
import { Stats } from '@probe.gl/stats';
|
|
3
|
-
import TestRunner from
|
|
4
|
-
export
|
|
2
|
+
import { TestRunner } from "./test-runner.js";
|
|
3
|
+
export class PerformanceTestRunner extends TestRunner {
|
|
5
4
|
constructor(props) {
|
|
6
5
|
super(props);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
_defineProperty(this, "_fps", void 0);
|
|
11
|
-
|
|
6
|
+
this._stats = null;
|
|
7
|
+
this._fps = null;
|
|
12
8
|
Object.assign(this.testOptions, {
|
|
13
9
|
maxFramesToRender: 60,
|
|
14
10
|
targetFPS: 50
|
|
15
11
|
});
|
|
16
12
|
}
|
|
17
|
-
|
|
18
13
|
initTestCase(testCase) {
|
|
19
14
|
super.initTestCase(testCase);
|
|
20
15
|
this._stats = new Stats({
|
|
@@ -22,25 +17,20 @@ export default class PerformanceTestRunner extends TestRunner {
|
|
|
22
17
|
});
|
|
23
18
|
this._fps = this._stats.get('fps');
|
|
24
19
|
}
|
|
25
|
-
|
|
26
20
|
shouldRender(animationProps) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this._fps.timeStart();
|
|
30
|
-
|
|
21
|
+
var _this$_fps, _this$_fps2;
|
|
22
|
+
(_this$_fps = this._fps) === null || _this$_fps === void 0 ? void 0 : _this$_fps.timeEnd();
|
|
23
|
+
(_this$_fps2 = this._fps) === null || _this$_fps2 === void 0 ? void 0 : _this$_fps2.timeStart();
|
|
31
24
|
if (this._fps.count > this.testOptions.maxFramesToRender) {
|
|
32
25
|
animationProps.done();
|
|
33
26
|
}
|
|
34
|
-
|
|
35
27
|
return true;
|
|
36
28
|
}
|
|
37
|
-
|
|
38
29
|
assert(testCase) {
|
|
30
|
+
var _this$_fps3, _this$_fps4;
|
|
39
31
|
const targetFPS = testCase.targetFPS || this.testOptions.targetFPS;
|
|
40
|
-
const count = this._fps.count;
|
|
41
|
-
|
|
42
|
-
const fps = this._fps.getHz();
|
|
43
|
-
|
|
32
|
+
const count = (_this$_fps3 = this._fps) === null || _this$_fps3 === void 0 ? void 0 : _this$_fps3.count;
|
|
33
|
+
const fps = ((_this$_fps4 = this._fps) === null || _this$_fps4 === void 0 ? void 0 : _this$_fps4.getHz()) || 0;
|
|
44
34
|
if (fps >= targetFPS) {
|
|
45
35
|
this._pass({
|
|
46
36
|
fps,
|
|
@@ -52,9 +42,7 @@ export default class PerformanceTestRunner extends TestRunner {
|
|
|
52
42
|
framesRendered: count
|
|
53
43
|
});
|
|
54
44
|
}
|
|
55
|
-
|
|
56
45
|
this._next();
|
|
57
46
|
}
|
|
58
|
-
|
|
59
47
|
}
|
|
60
48
|
//# sourceMappingURL=performance-test-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"performance-test-runner.js","names":["Stats","TestRunner","PerformanceTestRunner","constructor","props","_stats","_fps","Object","assign","testOptions","maxFramesToRender","targetFPS","initTestCase","testCase","id","name","get","shouldRender","animationProps","_this$_fps","_this$_fps2","timeEnd","timeStart","count","done","assert","_this$_fps3","_this$_fps4","fps","getHz","_pass","framesRendered","_fail","_next"],"sources":["../src/performance-test-runner.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Stats, Stat} from '@probe.gl/stats';\nimport {TestRunner, TestRunnerProps, TestRunnerTestCase} from './test-runner';\n\nexport type PerformanceTestRunnerProps = TestRunnerProps;\n\nexport class PerformanceTestRunner extends TestRunner {\n private _stats: Stats | null = null;\n private _fps: Stat | null = null;\n\n constructor(props: PerformanceTestRunnerProps) {\n super(props);\n\n Object.assign(this.testOptions, {\n maxFramesToRender: 60,\n targetFPS: 50\n });\n }\n\n override initTestCase(testCase: TestRunnerTestCase): void {\n super.initTestCase(testCase);\n this._stats = new Stats({id: testCase.name});\n this._fps = this._stats.get('fps');\n }\n\n override shouldRender(animationProps: Record<string, any>): boolean {\n this._fps?.timeEnd();\n this._fps?.timeStart();\n\n if (this._fps.count > this.testOptions.maxFramesToRender) {\n animationProps.done();\n }\n\n return true;\n }\n\n override assert(testCase: TestRunnerTestCase): void {\n // @ts-expect-error\n const targetFPS = testCase.targetFPS || this.testOptions.targetFPS;\n const count = this._fps?.count;\n const fps = this._fps?.getHz() || 0;\n\n if (fps >= targetFPS) {\n this._pass({fps, framesRendered: count});\n } else {\n this._fail({fps, framesRendered: count});\n }\n this._next();\n }\n}\n"],"mappings":"AAGA,SAAQA,KAAK,QAAa,iBAAiB;AAAC,SACpCC,UAAU;AAIlB,OAAO,MAAMC,qBAAqB,SAASD,UAAU,CAAC;EAIpDE,WAAWA,CAACC,KAAiC,EAAE;IAC7C,KAAK,CAACA,KAAK,CAAC;IAAC,KAJPC,MAAM,GAAiB,IAAI;IAAA,KAC3BC,IAAI,GAAgB,IAAI;IAK9BC,MAAM,CAACC,MAAM,CAAC,IAAI,CAACC,WAAW,EAAE;MAC9BC,iBAAiB,EAAE,EAAE;MACrBC,SAAS,EAAE;IACb,CAAC,CAAC;EACJ;EAESC,YAAYA,CAACC,QAA4B,EAAQ;IACxD,KAAK,CAACD,YAAY,CAACC,QAAQ,CAAC;IAC5B,IAAI,CAACR,MAAM,GAAG,IAAIL,KAAK,CAAC;MAACc,EAAE,EAAED,QAAQ,CAACE;IAAI,CAAC,CAAC;IAC5C,IAAI,CAACT,IAAI,GAAG,IAAI,CAACD,MAAM,CAACW,GAAG,CAAC,KAAK,CAAC;EACpC;EAESC,YAAYA,CAACC,cAAmC,EAAW;IAAA,IAAAC,UAAA,EAAAC,WAAA;IAClE,CAAAD,UAAA,OAAI,CAACb,IAAI,cAAAa,UAAA,uBAATA,UAAA,CAAWE,OAAO,CAAC,CAAC;IACpB,CAAAD,WAAA,OAAI,CAACd,IAAI,cAAAc,WAAA,uBAATA,WAAA,CAAWE,SAAS,CAAC,CAAC;IAEtB,IAAI,IAAI,CAAChB,IAAI,CAACiB,KAAK,GAAG,IAAI,CAACd,WAAW,CAACC,iBAAiB,EAAE;MACxDQ,cAAc,CAACM,IAAI,CAAC,CAAC;IACvB;IAEA,OAAO,IAAI;EACb;EAESC,MAAMA,CAACZ,QAA4B,EAAQ;IAAA,IAAAa,WAAA,EAAAC,WAAA;IAElD,MAAMhB,SAAS,GAAGE,QAAQ,CAACF,SAAS,IAAI,IAAI,CAACF,WAAW,CAACE,SAAS;IAClE,MAAMY,KAAK,IAAAG,WAAA,GAAG,IAAI,CAACpB,IAAI,cAAAoB,WAAA,uBAATA,WAAA,CAAWH,KAAK;IAC9B,MAAMK,GAAG,GAAG,EAAAD,WAAA,OAAI,CAACrB,IAAI,cAAAqB,WAAA,uBAATA,WAAA,CAAWE,KAAK,CAAC,CAAC,KAAI,CAAC;IAEnC,IAAID,GAAG,IAAIjB,SAAS,EAAE;MACpB,IAAI,CAACmB,KAAK,CAAC;QAACF,GAAG;QAAEG,cAAc,EAAER;MAAK,CAAC,CAAC;IAC1C,CAAC,MAAM;MACL,IAAI,CAACS,KAAK,CAAC;QAACJ,GAAG;QAAEG,cAAc,EAAER;MAAK,CAAC,CAAC;IAC1C;IACA,IAAI,CAACU,KAAK,CAAC,CAAC;EACd;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-devices.d.ts","sourceRoot":"","sources":["../src/register-devices.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { luma } from '@luma.gl/core';
|
|
2
|
+
import { WebGLDevice, registerHeadlessGL } from '@luma.gl/webgl';
|
|
3
|
+
import { WebGPUDevice } from '@luma.gl/webgpu';
|
|
4
|
+
import headlessGL from 'gl';
|
|
5
|
+
registerHeadlessGL(headlessGL);
|
|
6
|
+
luma.registerDevices([WebGLDevice, WebGPUDevice]);
|
|
7
|
+
//# sourceMappingURL=register-devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-devices.js","names":["luma","WebGLDevice","registerHeadlessGL","WebGPUDevice","headlessGL","registerDevices"],"sources":["../src/register-devices.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {luma} from '@luma.gl/core';\nimport {WebGLDevice, registerHeadlessGL} from '@luma.gl/webgl';\nimport {WebGPUDevice} from '@luma.gl/webgpu';\n\nimport headlessGL from 'gl';\n\nregisterHeadlessGL(headlessGL);\nluma.registerDevices([WebGLDevice, WebGPUDevice]);\n"],"mappings":"AAGA,SAAQA,IAAI,QAAO,eAAe;AAClC,SAAQC,WAAW,EAAEC,kBAAkB,QAAO,gBAAgB;AAC9D,SAAQC,YAAY,QAAO,iBAAiB;AAE5C,OAAOC,UAAU,MAAM,IAAI;AAE3BF,kBAAkB,CAACE,UAAU,CAAC;AAC9BJ,IAAI,CAACK,eAAe,CAAC,CAACJ,WAAW,EAAEE,YAAY,CAAC,CAAC"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import TestRunner,
|
|
1
|
+
import { TestRunner, TestRunnerProps, TestRunnerTestCase } from './test-runner';
|
|
2
2
|
/** A snapshot test case */
|
|
3
|
-
export
|
|
3
|
+
export type SnapshotTestRunnerTestCase = TestRunnerTestCase & {
|
|
4
4
|
/** URL to golden image */
|
|
5
5
|
goldenImage: string;
|
|
6
|
+
/** Diff options */
|
|
7
|
+
imageDiffOptions?: {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
};
|
|
6
10
|
};
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
constructor(props:
|
|
10
|
-
initTestCase(testCase:
|
|
11
|
+
export type SnapshotTestRunnerProps = TestRunnerProps;
|
|
12
|
+
export declare class SnapshotTestRunner extends TestRunner {
|
|
13
|
+
constructor(props: SnapshotTestRunnerProps);
|
|
14
|
+
initTestCase(testCase: SnapshotTestRunnerTestCase): void;
|
|
11
15
|
shouldRender(): boolean;
|
|
12
|
-
assert(testCase:
|
|
16
|
+
assert(testCase: SnapshotTestRunnerTestCase): Promise<void>;
|
|
13
17
|
}
|
|
14
18
|
//# sourceMappingURL=snapshot-test-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-test-runner.d.ts","sourceRoot":"","sources":["../src/snapshot-test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"snapshot-test-runner.d.ts","sourceRoot":"","sources":["../src/snapshot-test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAG9E,2BAA2B;AAC3B,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC5D,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,gBAAgB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;CACzC,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEtD,qBAAa,kBAAmB,SAAQ,UAAU;gBAIpC,KAAK,EAAE,uBAAuB;IAKjC,YAAY,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAOxD,YAAY,IAAI,OAAO;IAKjB,MAAM,CAAC,QAAQ,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;CAgC3E"}
|
|
@@ -1,49 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export default class SnapshotTestRunner extends TestRunner {
|
|
1
|
+
import { TestRunner } from "./test-runner.js";
|
|
2
|
+
import { getBoundingBoxInPage } from "./utils.js";
|
|
3
|
+
export class SnapshotTestRunner extends TestRunner {
|
|
5
4
|
constructor(props) {
|
|
6
5
|
super(props);
|
|
7
|
-
|
|
8
|
-
_defineProperty(this, "isDiffing", false);
|
|
9
|
-
|
|
10
6
|
this.testOptions.imageDiffOptions = {};
|
|
11
7
|
}
|
|
12
|
-
|
|
13
8
|
initTestCase(testCase) {
|
|
14
9
|
super.initTestCase(testCase);
|
|
15
|
-
|
|
16
10
|
if (!testCase.goldenImage) {
|
|
17
|
-
throw new Error(
|
|
11
|
+
throw new Error(`Test case ${testCase.name} does not have golden image`);
|
|
18
12
|
}
|
|
19
13
|
}
|
|
20
|
-
|
|
21
14
|
shouldRender() {
|
|
22
15
|
return !this.isDiffing;
|
|
23
16
|
}
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
async assert(testCase) {
|
|
18
|
+
var _this$_animationProps;
|
|
26
19
|
if (this.isDiffing) {
|
|
27
20
|
return;
|
|
28
21
|
}
|
|
29
|
-
|
|
30
22
|
this.isDiffing = true;
|
|
31
|
-
const
|
|
23
|
+
const canvas = (_this$_animationProps = this._animationProps) === null || _this$_animationProps === void 0 ? void 0 : _this$_animationProps.canvas;
|
|
24
|
+
if (!(canvas instanceof HTMLCanvasElement)) {
|
|
25
|
+
throw new Error('canvas');
|
|
26
|
+
}
|
|
27
|
+
const diffOptions = {
|
|
28
|
+
...this.testOptions.imageDiffOptions,
|
|
29
|
+
...testCase.imageDiffOptions,
|
|
32
30
|
goldenImage: testCase.goldenImage,
|
|
33
|
-
region: getBoundingBoxInPage(
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this._next();
|
|
45
|
-
});
|
|
31
|
+
region: getBoundingBoxInPage(canvas)
|
|
32
|
+
};
|
|
33
|
+
const result = await globalThis.browserTestDriver_captureAndDiffScreen(diffOptions);
|
|
34
|
+
if (result.success) {
|
|
35
|
+
this._pass(result);
|
|
36
|
+
} else {
|
|
37
|
+
this._fail(result);
|
|
38
|
+
}
|
|
39
|
+
this.isDiffing = false;
|
|
40
|
+
this._next();
|
|
46
41
|
}
|
|
47
|
-
|
|
48
42
|
}
|
|
49
43
|
//# sourceMappingURL=snapshot-test-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"snapshot-test-runner.js","names":["TestRunner","getBoundingBoxInPage","SnapshotTestRunner","constructor","props","testOptions","imageDiffOptions","initTestCase","testCase","goldenImage","Error","name","shouldRender","isDiffing","assert","_this$_animationProps","canvas","_animationProps","HTMLCanvasElement","diffOptions","region","result","globalThis","browserTestDriver_captureAndDiffScreen","success","_pass","_fail","_next"],"sources":["../src/snapshot-test-runner.ts"],"sourcesContent":["import {TestRunner, TestRunnerProps, TestRunnerTestCase} from './test-runner';\nimport {getBoundingBoxInPage} from './utils';\n\n/** A snapshot test case */\nexport type SnapshotTestRunnerTestCase = TestRunnerTestCase & {\n /** URL to golden image */\n goldenImage: string;\n /** Diff options */\n imageDiffOptions?: {[key: string]: any}; \n}\n\nexport type SnapshotTestRunnerProps = TestRunnerProps;\n\nexport class SnapshotTestRunner extends TestRunner {\n // should be defined here but hack access in TestRunner\n // private isDiffing: boolean = false;\n\n constructor(props: SnapshotTestRunnerProps) {\n super(props);\n this.testOptions.imageDiffOptions = {};\n }\n\n override initTestCase(testCase: SnapshotTestRunnerTestCase): void {\n super.initTestCase(testCase);\n if (!testCase.goldenImage) {\n throw new Error(`Test case ${testCase.name} does not have golden image`);\n }\n }\n\n override shouldRender(): boolean {\n // wait for the current diffing to finish\n return !this.isDiffing;\n }\n\n override async assert(testCase: SnapshotTestRunnerTestCase): Promise<void> {\n if (this.isDiffing) {\n // Already performing diffing\n return;\n }\n this.isDiffing = true;\n\n const canvas = this._animationProps?.canvas;\n if (!(canvas instanceof HTMLCanvasElement)) {\n throw new Error('canvas');\n }\n\n const diffOptions = {\n ...this.testOptions.imageDiffOptions,\n ...testCase.imageDiffOptions,\n goldenImage: testCase.goldenImage,\n region: getBoundingBoxInPage(canvas)\n };\n\n // Take screenshot and compare\n const result = await globalThis.browserTestDriver_captureAndDiffScreen(diffOptions);\n\n // invoke user callback\n if (result.success) {\n this._pass(result);\n } else {\n this._fail(result);\n }\n\n this.isDiffing = false;\n this._next();\n }\n}\n"],"mappings":"SAAQA,UAAU;AAAA,SACVC,oBAAoB;AAY5B,OAAO,MAAMC,kBAAkB,SAASF,UAAU,CAAC;EAIjDG,WAAWA,CAACC,KAA8B,EAAE;IAC1C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,WAAW,CAACC,gBAAgB,GAAG,CAAC,CAAC;EACxC;EAESC,YAAYA,CAACC,QAAoC,EAAQ;IAChE,KAAK,CAACD,YAAY,CAACC,QAAQ,CAAC;IAC5B,IAAI,CAACA,QAAQ,CAACC,WAAW,EAAE;MACzB,MAAM,IAAIC,KAAK,CAAE,aAAYF,QAAQ,CAACG,IAAK,6BAA4B,CAAC;IAC1E;EACF;EAESC,YAAYA,CAAA,EAAY;IAE/B,OAAO,CAAC,IAAI,CAACC,SAAS;EACxB;EAEA,MAAeC,MAAMA,CAACN,QAAoC,EAAiB;IAAA,IAAAO,qBAAA;IACzE,IAAI,IAAI,CAACF,SAAS,EAAE;MAElB;IACF;IACA,IAAI,CAACA,SAAS,GAAG,IAAI;IAErB,MAAMG,MAAM,IAAAD,qBAAA,GAAG,IAAI,CAACE,eAAe,cAAAF,qBAAA,uBAApBA,qBAAA,CAAsBC,MAAM;IAC3C,IAAI,EAAEA,MAAM,YAAYE,iBAAiB,CAAC,EAAE;MAC1C,MAAM,IAAIR,KAAK,CAAC,QAAQ,CAAC;IAC3B;IAEA,MAAMS,WAAW,GAAG;MAClB,GAAG,IAAI,CAACd,WAAW,CAACC,gBAAgB;MACpC,GAAGE,QAAQ,CAACF,gBAAgB;MAC5BG,WAAW,EAAED,QAAQ,CAACC,WAAW;MACjCW,MAAM,EAAEnB,oBAAoB,CAACe,MAAM;IACrC,CAAC;IAGD,MAAMK,MAAM,GAAG,MAAMC,UAAU,CAACC,sCAAsC,CAACJ,WAAW,CAAC;IAGnF,IAAIE,MAAM,CAACG,OAAO,EAAE;MAClB,IAAI,CAACC,KAAK,CAACJ,MAAM,CAAC;IACpB,CAAC,MAAM;MACL,IAAI,CAACK,KAAK,CAACL,MAAM,CAAC;IACpB;IAEA,IAAI,CAACR,SAAS,GAAG,KAAK;IACtB,IAAI,CAACc,KAAK,CAAC,CAAC;EACd;AACF"}
|
package/dist/test-runner.d.ts
CHANGED
|
@@ -1,54 +1,66 @@
|
|
|
1
|
+
import { AnimationProps } from '@luma.gl/engine';
|
|
2
|
+
import { ClassicAnimationLoop as AnimationLoop } from './engine/classic-animation-loop';
|
|
1
3
|
/** Describes a test case */
|
|
2
|
-
export
|
|
4
|
+
export type TestRunnerTestCase = {
|
|
3
5
|
/** Name of the test case (for logging) */
|
|
4
6
|
name: string;
|
|
5
7
|
/** Initialize the test case. Can return a promise */
|
|
6
|
-
onInitialize:
|
|
8
|
+
onInitialize: (props: AnimationProps) => Promise<void | {}>;
|
|
7
9
|
/** Perform rendering */
|
|
8
|
-
onRender:
|
|
10
|
+
onRender: (props: AnimationProps & {
|
|
11
|
+
done: any;
|
|
12
|
+
}) => void;
|
|
9
13
|
/** Clean up after the test case */
|
|
10
|
-
onFinalize:
|
|
14
|
+
onFinalize: (props: AnimationProps) => void;
|
|
15
|
+
animationLoop?: AnimationLoop;
|
|
11
16
|
};
|
|
12
17
|
/** Options for a TestRunner */
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
export type TestRunnerProps = {
|
|
19
|
+
width?: number;
|
|
20
|
+
height?: number;
|
|
21
|
+
onTestStart?: (testCase: TestRunnerTestCase) => void;
|
|
22
|
+
onTestPass?: (testCase: TestRunnerTestCase, result?: unknown) => void;
|
|
23
|
+
onTestFail?: (testCase: TestRunnerTestCase, error?: unknown) => void;
|
|
17
24
|
/** milliseconds to wait for each test case before aborting */
|
|
18
25
|
timeout?: number;
|
|
26
|
+
maxFramesToRender?: number;
|
|
27
|
+
imageDiffOptions?: any;
|
|
19
28
|
};
|
|
20
29
|
/** Runs an array of test cases */
|
|
21
|
-
export
|
|
22
|
-
|
|
30
|
+
export declare class TestRunner {
|
|
31
|
+
device: import("modules/webgl/dist").WebGLDevice;
|
|
32
|
+
props: Record<string, any>;
|
|
23
33
|
isRunning: boolean;
|
|
24
|
-
|
|
25
|
-
readonly _animationProps
|
|
34
|
+
testOptions: Required<TestRunnerProps>;
|
|
35
|
+
readonly _animationProps?: AnimationProps;
|
|
36
|
+
private _animationLoop;
|
|
26
37
|
private _testCases;
|
|
27
38
|
private _testCaseData;
|
|
39
|
+
private _currentTestCase;
|
|
40
|
+
private _currentTestCaseStartTime;
|
|
41
|
+
private _currentTestCaseStartTick;
|
|
42
|
+
isDiffing: boolean;
|
|
28
43
|
isHeadless: boolean;
|
|
29
44
|
/**
|
|
30
45
|
* props
|
|
31
46
|
* AnimationLoop props
|
|
32
47
|
*/
|
|
33
|
-
constructor(props?:
|
|
34
|
-
/**
|
|
35
|
-
* Add testCase(s)
|
|
36
|
-
*/
|
|
48
|
+
constructor(props?: Record<string, any>);
|
|
37
49
|
/**
|
|
38
50
|
* Add testCase(s)
|
|
39
51
|
*/
|
|
40
52
|
add(testCases: TestRunnerTestCase[]): this;
|
|
41
53
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
* Returns a promise that resolves when all the test cases are done
|
|
55
|
+
*/
|
|
44
56
|
run(options?: object): Promise<void>;
|
|
45
|
-
initTestCase(testCase:
|
|
57
|
+
initTestCase(testCase: TestRunnerTestCase): void;
|
|
46
58
|
shouldRender(animationProps: any): boolean;
|
|
47
|
-
assert(testCase:
|
|
48
|
-
_pass(result:
|
|
49
|
-
_fail(result:
|
|
59
|
+
assert(testCase: TestRunnerTestCase): void;
|
|
60
|
+
_pass(result: unknown): void;
|
|
61
|
+
_fail(result: unknown): void;
|
|
50
62
|
_next(): void;
|
|
51
63
|
_onRender(animationProps: any): void;
|
|
52
|
-
_nextTestCase(): TestRunnerTestCase
|
|
64
|
+
_nextTestCase(): Promise<TestRunnerTestCase>;
|
|
53
65
|
}
|
|
54
66
|
//# sourceMappingURL=test-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAC,oBAAoB,IAAI,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAEtF,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,YAAY,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5D,wBAAwB;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG;QAAC,IAAI,MAAA;KAAC,KAAK,IAAI,CAAC;IACnD,mCAAmC;IACnC,UAAU,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AASF,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrE,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,CAAC;AAiBF,kCAAkC;AAClC,qBAAa,UAAU;IACrB,MAAM,2CAAe;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAS;IAC3B,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAA2B;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAC1C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,yBAAyB,CAAS;IAG1C,SAAS,EAAE,OAAO,CAAS;IAG3B,UAAU,EAAE,OAAO,CAAgD;IAEnE;;;OAGG;gBACS,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAI3C;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAU1C;;QAEI;IACJ,GAAG,CAAC,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxC,YAAY,CAAC,QAAQ,EAAE,kBAAkB;IAYzC,YAAY,CAAC,cAAc,KAAA,GAAG,OAAO;IAIrC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAO1C,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK5B,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK5B,KAAK,IAAI,IAAI;IAMb,SAAS,CAAC,cAAc,KAAA,GAAG,IAAI;IA2C/B,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC;CAuD7C"}
|