Extract worker creation into factories and mack them in tests
This commit is contained in:
parent
ccee4c9cdb
commit
74961dbfb1
10 changed files with 84 additions and 10 deletions
19
__mocks__/workerFactoryMock.js
Normal file
19
__mocks__/workerFactoryMock.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
export default function workerFactory(options) {
|
||||
return jest.fn;
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
module.exports = jest.fn();
|
|
@ -31,7 +31,7 @@ const config: Config = {
|
|||
"decoderWorker\\.min\\.js": "<rootDir>/__mocks__/empty.js",
|
||||
"decoderWorker\\.min\\.wasm": "<rootDir>/__mocks__/empty.js",
|
||||
"waveWorker\\.min\\.js": "<rootDir>/__mocks__/empty.js",
|
||||
"workers/(.+)\\.worker\\.ts": "<rootDir>/__mocks__/workerMock.js",
|
||||
"workers/(.+)Factory": "<rootDir>/__mocks__/workerFactoryMock.js",
|
||||
"^!!raw-loader!.*": "jest-raw-loader",
|
||||
"RecorderWorklet": "<rootDir>/__mocks__/empty.js",
|
||||
},
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
// @ts-ignore - `.ts` is needed here to make TS happy
|
||||
import { Request, Response } from "./workers/blurhash.worker.ts";
|
||||
import { WorkerManager } from "./WorkerManager";
|
||||
import blurhashWorkerFactory from "./workers/blurhashWorkerFactory.js";
|
||||
|
||||
export class BlurhashEncoder {
|
||||
private static internalInstance = new BlurhashEncoder();
|
||||
|
@ -25,9 +26,7 @@ export class BlurhashEncoder {
|
|||
return BlurhashEncoder.internalInstance;
|
||||
}
|
||||
|
||||
private readonly worker = new WorkerManager<Request, Response>(
|
||||
new Worker(new URL("./workers/blurhash.worker.ts", import.meta.url)),
|
||||
);
|
||||
private readonly worker = new WorkerManager<Request, Response>(blurhashWorkerFactory());
|
||||
|
||||
public getBlurhash(imageData: ImageData): Promise<string> {
|
||||
return this.worker.call({ imageData }).then((resp) => resp.blurhash);
|
||||
|
|
|
@ -29,6 +29,7 @@ import { createAudioContext, decodeOgg } from "./compat";
|
|||
import { clamp } from "../utils/numbers";
|
||||
import { WorkerManager } from "../WorkerManager";
|
||||
import { DEFAULT_WAVEFORM, PLAYBACK_WAVEFORM_SAMPLES } from "./consts";
|
||||
import playbackWorkerFactory from "../workers/playbackWorkerFactory.js";
|
||||
|
||||
export enum PlaybackState {
|
||||
Decoding = "decoding",
|
||||
|
@ -63,9 +64,7 @@ export class Playback extends EventEmitter implements IDestroyable, PlaybackInte
|
|||
private waveformObservable = new SimpleObservable<number[]>();
|
||||
private readonly clock: PlaybackClock;
|
||||
private readonly fileSize: number;
|
||||
private readonly worker = new WorkerManager<Request, Response>(
|
||||
new Worker(new URL("../workers/playback.worker.ts", import.meta.url)),
|
||||
);
|
||||
private readonly worker = new WorkerManager<Request, Response>(playbackWorkerFactory());
|
||||
|
||||
/**
|
||||
* Creates a new playback instance from a buffer.
|
||||
|
|
|
@ -23,6 +23,7 @@ import {
|
|||
IndexedDBStore,
|
||||
LocalStorageCryptoStore,
|
||||
} from "matrix-js-sdk/src/matrix";
|
||||
import indexeddbWorkerFactory from "../workers/indexeddbWorkerFactory";
|
||||
|
||||
const localStorage = window.localStorage;
|
||||
|
||||
|
@ -52,7 +53,7 @@ export default function createMatrixClient(opts: ICreateClientOpts): MatrixClien
|
|||
indexedDB: indexedDB,
|
||||
dbName: "riot-web-sync",
|
||||
localStorage,
|
||||
workerFactory: () => new Worker(new URL("../workers/indexeddb.worker.ts", import.meta.url)),
|
||||
workerFactory: indexeddbWorkerFactory,
|
||||
});
|
||||
} else if (localStorage) {
|
||||
storeOpts.store = new MemoryStore({ localStorage });
|
||||
|
|
19
src/workers/blurhashWorkerFactory.ts
Normal file
19
src/workers/blurhashWorkerFactory.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
export default function blurhashWorkerFactory(options?: WorkerOptions | undefined): Worker {
|
||||
return new Worker(new URL("./workers/blurhash.worker.ts", import.meta.url), options);
|
||||
}
|
19
src/workers/indexeddbWorkerFactory.ts
Normal file
19
src/workers/indexeddbWorkerFactory.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
export default function blurhashWorkerFactory(options?: WorkerOptions | undefined): Worker {
|
||||
return new Worker(new URL("../workers/indexeddb.worker.ts", import.meta.url), options)
|
||||
}
|
19
src/workers/playbackWorkerFactory.ts
Normal file
19
src/workers/playbackWorkerFactory.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
export default function blurhashWorkerFactory(options?: WorkerOptions | undefined): Worker {
|
||||
return new Worker(new URL("../workers/playback.worker.ts", import.meta.url), options)
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
"emitDecoratorMetadata": false,
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "commonjs",
|
||||
"module": "es2022",
|
||||
"moduleResolution": "node",
|
||||
"target": "es2016",
|
||||
"noUnusedLocals": true,
|
||||
|
|
Loading…
Reference in a new issue