un-inception/tests/test_un_v.v
Russell Ballestrini 2b35819393 Initial commit: 42 UN CLI implementations
Unsandbox CLI implementations in 42 programming languages for the
permacomputer project. Public domain software for code execution
across all ecosystems.

Languages: Python, JavaScript, Ruby, Go, Rust, C, C++, Java, Kotlin,
C#, F#, Haskell, OCaml, Clojure, Scheme, Common Lisp, Erlang, Elixir,
D, Nim, Zig, V, Dart, Groovy, Scala, Julia, R, Crystal, Fortran,
COBOL, Prolog, Forth, Tcl, Raku, Lua, PHP, Perl, Bash, TypeScript,
Objective-C, PowerShell, AWK

Includes test suites and service lifecycle tests.
2025-12-23 09:57:08 -05:00

190 lines
4.1 KiB
V

// Test suite for UN CLI V implementation
// Compile: v test_un_v.v -o test_un_v
// Run: ./test_un_v
//
// Tests:
// 1. Unit tests for extension detection
// 2. Integration test for API availability (requires UNSANDBOX_API_KEY)
// 3. Functional test running fib.go
import os
import net.http
import json
// Copy of detect_language from un.v for testing
fn detect_language(filename string) !string {
ext := os.file_ext(filename)
lang_map := {
'.py': 'python'
'.js': 'javascript'
'.go': 'go'
'.rs': 'rust'
'.c': 'c'
'.cpp': 'cpp'
'.d': 'd'
'.zig': 'zig'
'.nim': 'nim'
'.v': 'v'
}
if lang := lang_map[ext] {
return lang
}
return error('Unable to detect language from file extension')
}
fn test_extension_detection() bool {
println('=== Test 1: Extension Detection ===')
tests := [
['script.py', 'python'],
['app.js', 'javascript'],
['main.go', 'go'],
['program.rs', 'rust'],
['code.c', 'c'],
['app.cpp', 'cpp'],
['prog.d', 'd'],
['main.zig', 'zig'],
['script.nim', 'nim'],
['app.v', 'v'],
['unknown.xyz', ''],
]
mut passed := 0
mut failed := 0
for test in tests {
filename := test[0]
expected := test[1]
result := detect_language(filename) or { '' }
if result == expected {
println(' PASS: ${filename} -> ${result}')
passed++
} else {
println(' FAIL: ${filename} -> got ${result}, expected ${expected}')
failed++
}
}
println('Extension Detection: ${passed} passed, ${failed} failed\n')
return failed == 0
}
fn test_api_connection() bool {
println('=== Test 2: API Connection ===')
api_key := os.getenv('UNSANDBOX_API_KEY')
if api_key == '' {
println(' SKIP: UNSANDBOX_API_KEY not set')
println('API Connection: skipped\n')
return true
}
request_body := {
'language': json.Any('python')
'code': json.Any("print('Hello from API test')")
}
json_body := json.encode(request_body)
mut req := http.new_request(.post, 'https://api.unsandbox.com/execute', json_body) or {
println(' FAIL: Error creating request: ${err}')
return false
}
req.add_header(.content_type, 'application/json')
req.add_header(.authorization, 'Bearer ${api_key}')
resp := req.do() or {
println(' FAIL: HTTP request error: ${err}')
return false
}
result := json.decode(map[string]json.Any, resp.body) or {
println(' FAIL: JSON parse error: ${err}')
return false
}
stdout_str := result['stdout'] or { json.Any('') }.str()
if !stdout_str.contains('Hello from API test') {
println(' FAIL: Unexpected response: ${stdout_str}')
return false
}
println(' PASS: API connection successful')
println('API Connection: passed\n')
return true
}
fn test_fib_execution() bool {
println('=== Test 3: Functional Test (fib.go) ===')
api_key := os.getenv('UNSANDBOX_API_KEY')
if api_key == '' {
println(' SKIP: UNSANDBOX_API_KEY not set')
println('Functional Test: skipped\n')
return true
}
if !os.exists('../un_v') {
println(' SKIP: ../un_v binary not found (run: cd .. && v un.v -o un_v)')
println('Functional Test: skipped\n')
return true
}
if !os.exists('fib.go') {
println(' SKIP: fib.go not found')
println('Functional Test: skipped\n')
return true
}
result := os.execute('../un_v fib.go')
if result.exit_code != 0 {
println(' FAIL: Command failed with exit code: ${result.exit_code}')
println(' Output: ${result.output}')
return false
}
if !result.output.contains('fib(10) = 55') {
println(' FAIL: Expected output to contain "fib(10) = 55", got: ${result.output}')
return false
}
println(' PASS: fib.go executed successfully')
print(' Output: ${result.output}')
println('Functional Test: passed\n')
return true
}
fn main() {
println('UN CLI V Implementation Test Suite')
println('===================================\n')
mut all_passed := true
if !test_extension_detection() {
all_passed = false
}
if !test_api_connection() {
all_passed = false
}
if !test_fib_execution() {
all_passed = false
}
println('===================================')
if all_passed {
println('RESULT: ALL TESTS PASSED')
exit(0)
} else {
println('RESULT: SOME TESTS FAILED')
exit(1)
}
}