UNPKG

@tevm/base-bundler

Version:

Internal bundler for Tevm

200 lines (183 loc) 4.56 kB
import { describe, expect, it, vi } from 'vitest' import { resolveModuleAsync } from './resolveModuleAsync.js' import { resolveModuleSync } from './resolveModuleSync.js' // This test file focuses specifically on input validation // for both sync and async resolver methods describe('module resolvers input validation', () => { // Setup simple mocks for dependencies const mockLogger = { error: vi.fn(), warn: vi.fn(), info: vi.fn(), debug: vi.fn(), log: vi.fn(), } const mockConfig = { jsonAsConst: [], foundryProject: false, libs: [], remappings: {}, cacheDir: '/tmp/cache', } const mockFao = { writeFileSync: vi.fn(), writeFile: vi.fn(), readFile: vi.fn(), readFileSync: vi.fn(), exists: vi.fn(), existsSync: vi.fn(), statSync: vi.fn(), stat: vi.fn(), mkdirSync: vi.fn(), mkdir: vi.fn(), } const mockSolc = { version: '0.8.17', semver: '0.8.17', license: 'MIT', lowlevel: { compileSingle: vi.fn(), compileMulti: vi.fn(), compileCallback: vi.fn(), }, compile: vi.fn(), features: { legacySingleInput: true, multipleInputs: true, importCallback: true, nativeStandardJSON: true, }, loadRemoteVersion: vi.fn(), setupMethods: vi.fn(), } const mockCache = { readArtifacts: vi.fn(), readArtifactsSync: vi.fn(), writeArtifacts: vi.fn(), writeArtifactsSync: vi.fn(), readDtsSync: vi.fn(), readDts: vi.fn(), readMjsSync: vi.fn(), readMjs: vi.fn(), writeDtsSync: vi.fn(), writeDts: vi.fn(), writeMjsSync: vi.fn(), writeMjs: vi.fn(), } const contractPackage = '@tevm/contract' // Mock implementations to avoid actual file system interaction // and network calls during tests vi.mock('./readCache.js', () => ({ readCache: vi.fn().mockResolvedValue({ solcInput: { sources: {} }, solcOutput: { contracts: {} }, asts: { 'Contract.sol': {} }, artifacts: { Contract: { abi: [], userdoc: { methods: {}, kind: 'user', version: 1 }, evm: { deployedBytecode: { object: '0x123' } }, }, }, modules: {}, }), })) vi.mock('./readCacheSync.js', () => ({ readCacheSync: vi.fn().mockReturnValue({ solcInput: { sources: {} }, solcOutput: { contracts: {} }, asts: { 'Contract.sol': {} }, artifacts: { Contract: { abi: [], userdoc: { methods: {}, kind: 'user', version: 1 }, evm: { deployedBytecode: { object: '0x123' } }, }, }, modules: {}, }), })) vi.mock('@tevm/compiler', () => ({ resolveArtifacts: vi.fn().mockResolvedValue({ solcInput: { sources: {} }, solcOutput: { contracts: {} }, asts: { 'Contract.sol': {} }, artifacts: { Contract: { abi: [], userdoc: { methods: {}, kind: 'user', version: 1 }, evm: { deployedBytecode: { object: '0x123' } }, }, }, modules: {}, }), resolveArtifactsSync: vi.fn().mockReturnValue({ solcInput: { sources: {} }, solcOutput: { contracts: {} }, asts: { 'Contract.sol': {} }, artifacts: { Contract: { abi: [], userdoc: { methods: {}, kind: 'user', version: 1 }, evm: { deployedBytecode: { object: '0x123' } }, }, }, modules: {}, }), })) vi.mock('@tevm/runtime', () => ({ generateRuntime: vi.fn().mockReturnValue({ _tag: 'RuntimeGenerated', code: 'export const Contract = {}', }), })) vi.mock('effect/Effect', () => ({ runPromise: vi.fn().mockResolvedValue('export const Contract = {}'), runSync: vi.fn().mockReturnValue('export const Contract = {}'), })) vi.mock('./writeCache.js', () => ({ writeCache: vi.fn().mockResolvedValue(undefined), })) vi.mock('./writeCacheSync.js', () => ({ writeCacheSync: vi.fn(), })) // Test invalid module types describe('invalid module types', () => { it('should handle invalid module type in resolveModuleAsync', async () => { const result = await resolveModuleAsync( mockLogger, mockConfig, mockFao, mockSolc, 'contract.sol', '/basedir', false, false, 'invalid' as any, mockCache, contractPackage, ) // Should still generate a result expect(result).toBeDefined() expect(result.code).toBeDefined() }) it('should handle invalid module type in resolveModuleSync', () => { const result = resolveModuleSync( mockLogger, mockConfig, mockFao, mockSolc, 'contract.sol', '/basedir', false, false, 'invalid' as any, mockCache, contractPackage, ) // Should still generate a result expect(result).toBeDefined() expect(result.code).toBeDefined() }) }) })