un-inception/tests/unit/test_v.v
Russell Ballestrini 0b7c6fd08d Add unit tests for all 42 language implementations
Unit tests for extension mapping, signature format, language detection,
argument parsing, file operations, and API constants for:

Systems: C, C++, Rust, Go, Zig, Nim, D, V, Crystal
JVM: Java, Kotlin, Groovy, Clojure
.NET: C#, F#
Functional: Haskell, OCaml, Scheme, Common Lisp, Erlang, Elixir
Scripting: Python, Ruby, JavaScript, TypeScript, Lua, Perl, PHP, Tcl, Bash, AWK, PowerShell
Scientific: Julia, R, Fortran
Legacy/Exotic: COBOL, Prolog, Forth, Raku, Objective-C, Dart

All tests validate internal functions without API calls.
2026-01-05 22:07:13 -05:00

118 lines
3 KiB
V

// Unit tests for un.v - tests internal functions without API calls
// Run with: v run test_v.v
import os
fn main() {
mut passed := 0
mut failed := 0
ext_map := {
'.py': 'python'
'.js': 'javascript'
'.ts': 'typescript'
'.rb': 'ruby'
'.go': 'go'
'.rs': 'rust'
'.c': 'c'
'.v': 'v'
'.java': 'java'
'.kt': 'kotlin'
}
get_language := fn [ext_map] (ext string) string {
return ext_map[ext] or { '' }
}
get_extension := fn (filename string) string {
idx := filename.last_index('.') or { return '' }
return filename[idx..]
}
get_basename := fn (path string) string {
idx := path.last_index('/') or { return path }
return path[idx + 1..]
}
test := fn [mut passed, mut failed] (name string, result bool) {
if result {
println(' ${name}')
passed++
} else {
println(' ${name}')
failed++
}
}
println('\n=== Extension Mapping Tests ===')
test('Python extension maps correctly', get_language('.py') == 'python')
test('V extension maps correctly', get_language('.v') == 'v')
test('JavaScript extension maps correctly', get_language('.js') == 'javascript')
test('Go extension maps correctly', get_language('.go') == 'go')
println('\n=== Signature Format Tests ===')
timestamp := '1704067200'
method := 'POST'
endpoint := '/execute'
body := '{"language":"python"}'
message := '${timestamp}:${method}:${endpoint}:${body}'
test('Signature format starts with timestamp', message.starts_with(timestamp))
test('Signature format contains :POST:', message.contains(':POST:'))
test('Signature format contains :/execute:', message.contains(':/execute:'))
println('\n=== Language Detection Tests ===')
content := '#!/usr/bin/env python3\nprint(\'hello\')'
first_line := content.split('\n')[0]
test('Python shebang detection - starts with #!', first_line.starts_with('#!'))
test('Python shebang detection - contains python', first_line.contains('python'))
println('\n=== Argument Parsing Tests ===')
arg1 := 'DEBUG=1'
eq1 := arg1.index('=') or { 0 }
key1 := arg1[..eq1]
value1 := arg1[eq1 + 1..]
test('Parse -e KEY=VALUE format - key', key1 == 'DEBUG')
test('Parse -e KEY=VALUE format - value', value1 == '1')
arg2 := 'URL=https://example.com?foo=bar'
eq2 := arg2.index('=') or { 0 }
key2 := arg2[..eq2]
value2 := arg2[eq2 + 1..]
test('Parse -e KEY=VALUE with equals in value', key2 == 'URL' && value2 == 'https://example.com?foo=bar')
println('\n=== File Operations Tests ===')
test('Extract file basename', get_basename('/home/user/project/script.v') == 'script.v')
test('Extract file extension', get_extension('/home/user/project/script.v') == '.v')
println('\n=== API Constants Tests ===')
api_base := 'https://api.unsandbox.com'
test('API base URL starts with https://', api_base.starts_with('https://'))
test('API base URL contains unsandbox.com', api_base.contains('unsandbox.com'))
println('\n=== Summary ===')
println('Passed: ${passed}')
println('Failed: ${failed}')
println('Total: ${passed + failed}')
exit(if failed > 0 { 1 } else { 0 })
}