Files
rustytorch/demos/ui/src/test/setup.ts
T
2026-03-04 00:08:42 +00:00

184 lines
4.9 KiB
TypeScript

/**
* Vitest test setup file
*/
import '@testing-library/jest-dom'
import { vi } from 'vitest'
// Mock Tauri API for testing
vi.mock('@tauri-apps/api/core', () => ({
invoke: vi.fn()
}))
// Mock requestAnimationFrame for Three.js tests
if (typeof globalThis.requestAnimationFrame === 'undefined') {
globalThis.requestAnimationFrame = (callback: FrameRequestCallback): number => {
return setTimeout(() => callback(Date.now()), 16) as unknown as number
}
}
if (typeof globalThis.cancelAnimationFrame === 'undefined') {
globalThis.cancelAnimationFrame = (id: number): void => {
clearTimeout(id)
}
}
// Mock WebGL context for Three.js
class MockWebGLRenderingContext {
canvas = { width: 800, height: 600 }
drawingBufferWidth = 800
drawingBufferHeight = 600
getExtension() { return null }
getParameter(param: number) {
if (param === 0x1F02) return 'WebGL 1.0' // VERSION
if (param === 0x8B8C) return 16 // MAX_VERTEX_UNIFORM_VECTORS
if (param === 0x8DFD) return 16 // MAX_FRAGMENT_UNIFORM_VECTORS
if (param === 0x8869) return 16 // MAX_VERTEX_ATTRIBS
if (param === 0x8872) return 8 // MAX_TEXTURE_IMAGE_UNITS
if (param === 0x0D33) return 4096 // MAX_TEXTURE_SIZE
if (param === 0x0B71) return 24 // DEPTH_BITS
return 0
}
getShaderPrecisionFormat() {
return { rangeMin: 127, rangeMax: 127, precision: 23 }
}
createShader() { return {} }
shaderSource() {}
compileShader() {}
getShaderParameter() { return true }
createProgram() { return {} }
attachShader() {}
linkProgram() {}
getProgramParameter() { return true }
useProgram() {}
createBuffer() { return {} }
bindBuffer() {}
bufferData() {}
createTexture() { return {} }
bindTexture() {}
texImage2D() {}
texParameteri() {}
createFramebuffer() { return {} }
bindFramebuffer() {}
framebufferTexture2D() {}
createRenderbuffer() { return {} }
bindRenderbuffer() {}
renderbufferStorage() {}
framebufferRenderbuffer() {}
viewport() {}
clear() {}
enable() {}
disable() {}
blendFunc() {}
depthFunc() {}
cullFace() {}
frontFace() {}
clearColor() {}
clearDepth() {}
vertexAttribPointer() {}
enableVertexAttribArray() {}
drawArrays() {}
drawElements() {}
uniform1i() {}
uniform1f() {}
uniform2f() {}
uniform3f() {}
uniform4f() {}
uniformMatrix4fv() {}
getAttribLocation() { return 0 }
getUniformLocation() { return {} }
deleteShader() {}
deleteProgram() {}
deleteBuffer() {}
deleteTexture() {}
deleteFramebuffer() {}
deleteRenderbuffer() {}
pixelStorei() {}
activeTexture() {}
generateMipmap() {}
scissor() {}
checkFramebufferStatus() { return 0x8CD5 } // FRAMEBUFFER_COMPLETE
}
// Mock canvas getContext for WebGL
Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
value: function(this: HTMLCanvasElement, contextId: string): any {
if (contextId === 'webgl' || contextId === 'webgl2' || contextId === 'experimental-webgl') {
return new MockWebGLRenderingContext()
}
// For 2d context, create a simple mock
if (contextId === '2d') {
return {
canvas: this,
fillRect: () => {},
clearRect: () => {},
getImageData: () => ({ data: new Uint8ClampedArray(0) }),
putImageData: () => {},
createImageData: () => ({ data: new Uint8ClampedArray(0) }),
setTransform: () => {},
drawImage: () => {},
save: () => {},
restore: () => {},
beginPath: () => {},
moveTo: () => {},
lineTo: () => {},
closePath: () => {},
stroke: () => {},
fill: () => {},
measureText: () => ({ width: 0 }),
transform: () => {},
scale: () => {},
translate: () => {},
rotate: () => {},
arc: () => {},
rect: () => {},
clip: () => {},
fillText: () => {},
strokeText: () => {},
}
}
return null
},
writable: true,
configurable: true,
})
// Mock ResizeObserver
globalThis.ResizeObserver = class ResizeObserver {
observe() {}
unobserve() {}
disconnect() {}
}
// Mock matchMedia
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(),
removeListener: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
})
// Suppress console errors for expected test failures
const originalError = console.error
console.error = (...args: unknown[]) => {
const message = typeof args[0] === 'string' ? args[0] : ''
// Suppress expected React Three Fiber warnings in tests
if (
message.includes('ReactDOM.render is no longer supported') ||
message.includes('Warning: An update to') ||
message.includes('THREE.WebGLRenderer')
) {
return
}
originalError.apply(console, args)
}