/** * Simple test setup for Brainy library * No direct TensorFlow references - patches are handled internally by Brainy */ import { beforeAll, beforeEach, afterEach, afterAll } from 'vitest' import { existsSync, rmSync } from 'fs' import { join } from 'path' // Configure model loading for tests beforeAll(() => { // Set model path to local models directory const modelsPath = join(process.cwd(), 'models') // Check if models exist if (existsSync(modelsPath)) { process.env.BRAINY_MODELS_PATH = modelsPath console.log('✅ Using local models for tests:', modelsPath) } else { console.warn('⚠️ Models directory not found, tests may download models') } // Disable remote model downloads in tests to avoid network dependencies process.env.BRAINY_ALLOW_REMOTE_MODELS = 'false' // Set test environment process.env.NODE_ENV = 'test' // Disable verbose logging in tests process.env.BRAINY_LOG_LEVEL = 'error' }) // Define the test utilities type for reuse type TestUtilsType = { createTestVector: (dimensions: number) => number[] timeout: number } // Extend global type definitions for both global and globalThis declare global { let testUtils: TestUtilsType | undefined let __ENV__: any } // Explicitly declare globalThis interface to ensure TypeScript recognizes these properties declare global { interface globalThis { testUtils?: TestUtilsType | undefined __ENV__?: any } } // Clean up between tests beforeEach(() => { // Clear any global state that might interfere with tests if (typeof globalThis !== 'undefined' && globalThis.__ENV__) { delete globalThis.__ENV__ } if (typeof global !== 'undefined' && global.__ENV__) { delete global.__ENV__ } // Clean up test data directory to prevent file accumulation const testDataDir = join(process.cwd(), 'brainy-data') if (existsSync(testDataDir)) { try { rmSync(testDataDir, { recursive: true, force: true }) } catch (error) { // Ignore errors during cleanup } } }) // Clean up after each test afterEach(() => { // Force garbage collection if available (requires --expose-gc flag) if (global.gc) { global.gc() } }) // Final cleanup after all tests afterAll(() => { // Clean up test data directory const testDataDir = join(process.cwd(), 'brainy-data') if (existsSync(testDataDir)) { try { rmSync(testDataDir, { recursive: true, force: true }) } catch (error) { // Ignore errors during cleanup } } }) // Add simple test utilities to both global and globalThis for compatibility const testUtilsObject = { // Create a simple test vector with predictable values createTestVector: (dimensions: number): number[] => { return Array.from({ length: dimensions }, (_, i) => (i + 1) / dimensions) }, // Standard timeout for async operations timeout: 30000 } global.testUtils = testUtilsObject globalThis.testUtils = testUtilsObject // Set a clear test environment flag for embedding system globalThis.__BRAINY_TEST_ENV__ = true if (typeof global !== 'undefined') { (global as any).__BRAINY_TEST_ENV__ = true }