Files
rrweb/packages/rrweb/test/replay/webgl-mutation.test.ts
2026-04-01 12:00:00 +08:00

49 lines
1.2 KiB
TypeScript

/**
* @jest-environment jsdom
*/
import { polyfillWebGLGlobals } from '../utils';
polyfillWebGLGlobals();
import webglMutation from '../../src/replay/canvas/webgl';
import { CanvasContext } from '@rrweb/types';
import { variableListFor } from '../../src/replay/canvas/deserialize-args';
let canvas: HTMLCanvasElement;
describe('webglMutation', () => {
beforeEach(() => {
canvas = document.createElement('canvas');
});
afterEach(() => {
jest.clearAllMocks();
});
it('should create webgl variables', async () => {
const createShaderMock = jest.fn().mockImplementation(() => {
return new WebGLShader();
});
const context = {
createShader: createShaderMock,
} as unknown as WebGLRenderingContext;
jest.spyOn(canvas, 'getContext').mockImplementation(() => {
return context;
});
expect(variableListFor(context, 'WebGLShader')).toHaveLength(0);
await webglMutation({
mutation: {
property: 'createShader',
args: [35633],
},
type: CanvasContext.WebGL,
target: canvas,
imageMap: new Map(),
errorHandler: () => {},
});
expect(createShaderMock).toHaveBeenCalledWith(35633);
expect(variableListFor(context, 'WebGLShader')).toHaveLength(1);
});
});