openpgpjs/test/mockRandom.ts
larabr 88f20974dd Tests: add support for RNG mocking in browser tests
The affected tests were previously only run in Node.
2024-10-22 12:40:15 +02:00

30 lines
830 B
TypeScript

import type { SinonStub } from 'sinon';
import util from '../src/util';
const webcrypto = typeof crypto !== 'undefined' ? crypto : util.nodeRequire('crypto')?.webcrypto;
type GetRandomValuesFn = typeof crypto.getRandomValues;
let original: GetRandomValuesFn | null = null;
/**
* Mock `crypto.getRandomValues` using the mocked implementation
*/
export const mockCryptoRandomGenerator = (
mockedImplementation: GetRandomValuesFn | SinonStub) => {
if (original !== null) {
throw new Error('random mock already initialized');
}
original = webcrypto.getRandomValues;
webcrypto.getRandomValues = mockedImplementation;
};
export const restoreCryptoRandomGenerator = () => {
if (!original) {
throw new Error('random mock was not initialized');
}
webcrypto.getRandomValues = original;
original = null;
};