@tevm/ts-plugin
Version:
A typescript plugin for tevm
100 lines (81 loc) • 2.96 kB
text/typescript
import { beforeEach, describe, expect, it, vi } from 'vitest'
// This test is simplified to avoid module mocking issues
describe('tevm-gen CLI simple test', () => {
// Mock some CLI functionality to simulate what tevm-gen.ts does
beforeEach(() => {
vi.resetAllMocks()
})
it('should parse command line arguments correctly', () => {
// Mock process.argv
const parseArguments = (args: string[]) => {
if (args.includes('-h') || args.includes('--help')) {
return { showHelp: true }
}
const [userCwd, userInclude] = args
const cwd = userCwd || '/default/cwd'
const include = userInclude ? userInclude.split(',') : ['src/**/*.sol']
return { cwd, include }
}
// Test with help flag
expect(parseArguments(['-h'])).toEqual({ showHelp: true })
expect(parseArguments(['--help'])).toEqual({ showHelp: true })
// Test with default values
expect(parseArguments([])).toEqual({
cwd: '/default/cwd',
include: ['src/**/*.sol'],
})
// Test with custom directory
expect(parseArguments(['/custom/path'])).toEqual({
cwd: '/custom/path',
include: ['src/**/*.sol'],
})
// Test with custom include pattern
expect(parseArguments(['/custom/path', 'contracts/**/*.sol'])).toEqual({
cwd: '/custom/path',
include: ['contracts/**/*.sol'],
})
// Test with multiple comma-separated include patterns
expect(parseArguments(['/custom/path', 'contracts/**/*.sol,test/**/*.sol'])).toEqual({
cwd: '/custom/path',
include: ['contracts/**/*.sol', 'test/**/*.sol'],
})
})
it('should format help text correctly', () => {
// Mock console.log
const originalConsoleLog = console.log
console.log = vi.fn()
// Simple implementation of the showHelp function
const showHelp = () => {
console.log(`
Usage: tevm-gen [cwd] [include]
Description:
Generates TypeScript type definitions for Solidity contracts.
Arguments:
cwd Working directory (defaults to current directory)
include Glob pattern(s) for Solidity files, comma-separated (defaults to 'src/**/*.sol')
Options:
-h, --help Show this help message and exit
`)
}
// Call showHelp and verify the output
showHelp()
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('Usage: tevm-gen'))
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('Arguments:'))
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('Options:'))
// Restore console.log
console.log = originalConsoleLog
})
it('should handle file generation errors', () => {
// Test error handling with a simplified generate function
const generate = (files: string[] = []) => {
if (files.length === 0) {
throw new Error('No files found')
}
return files
}
// Should throw when no files are found
expect(() => generate([])).toThrow('No files found')
// Should return files when they exist
expect(generate(['src/Contract.sol'])).toEqual(['src/Contract.sol'])
})
})