import {vec2} from 'gl-matrix'; import {LightFlamegraphTheme} from 'sentry/utils/profiling/flamegraph/flamegraphTheme'; import {Rect, Transform} from 'sentry/utils/profiling/gl/utils'; import {CursorRenderer} from 'sentry/utils/profiling/renderers/cursorRenderer'; describe('CursorRenderer', () => { it('renders cursor in center screen', () => { const context = { beginPath: jest.fn(), moveTo: jest.fn(), lineTo: jest.fn(), strokeStyle: undefined, stroke: jest.fn(), }; const canvasMock = { getContext: jest.fn().mockReturnValue(context), } as unknown as HTMLCanvasElement; const renderer = new CursorRenderer(canvasMock, LightFlamegraphTheme); const cursor = vec2.fromValues(0.5, 0.5); const physicalSpace = new Rect(0, 0, 1000, 1000); const configViewToPhysicalSpace = Transform.betweenRect( new Rect(0, 0, 1, 1), physicalSpace ); renderer.draw(cursor, physicalSpace, configViewToPhysicalSpace.toMatrix()); expect(context.beginPath).toHaveBeenCalled(); // Draws vertical line expect(context.moveTo.mock.calls[0]).toEqual([500, 0]); expect(context.lineTo.mock.calls[0]).toEqual([500, 1000]); // Draws horizontal line expect(context.moveTo.mock.calls[1]).toEqual([0, 500]); expect(context.lineTo.mock.calls[1]).toEqual([1000, 500]); expect(context.strokeStyle).toBe(LightFlamegraphTheme.COLORS.CURSOR_CROSSHAIR); expect(context.stroke).toHaveBeenCalledTimes(1); }); });