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.
190 lines
4.1 KiB
V
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)
|
|
}
|
|
}
|