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.
This commit is contained in:
commit
2b35819393
143 changed files with 30022 additions and 0 deletions
168
tests/test_un_py.py
Executable file
168
tests/test_un_py.py
Executable file
|
|
@ -0,0 +1,168 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test suite for UN CLI Python implementation (un.py)
|
||||
Tests extension detection, API calls, and end-to-end functionality
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import json
|
||||
|
||||
# Add parent directory to path to import un module
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
# Import the un module functions
|
||||
import un
|
||||
|
||||
# Test configuration
|
||||
UN_SCRIPT = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'un.py')
|
||||
FIB_PY = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'test', 'fib.py')
|
||||
|
||||
class TestResults:
|
||||
def __init__(self):
|
||||
self.passed = 0
|
||||
self.failed = 0
|
||||
self.skipped = 0
|
||||
|
||||
def pass_test(self, name):
|
||||
print(f"PASS: {name}")
|
||||
self.passed += 1
|
||||
|
||||
def fail_test(self, name, error):
|
||||
print(f"FAIL: {name} - {error}")
|
||||
self.failed += 1
|
||||
|
||||
def skip_test(self, name, reason):
|
||||
print(f"SKIP: {name} - {reason}")
|
||||
self.skipped += 1
|
||||
|
||||
results = TestResults()
|
||||
|
||||
# Test 1: Extension detection for Python
|
||||
try:
|
||||
lang = un.detect_language('test.py')
|
||||
if lang == 'python':
|
||||
results.pass_test("Extension detection: .py -> python")
|
||||
else:
|
||||
results.fail_test("Extension detection: .py -> python", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .py -> python", str(e))
|
||||
|
||||
# Test 2: Extension detection for JavaScript
|
||||
try:
|
||||
lang = un.detect_language('test.js')
|
||||
if lang == 'javascript':
|
||||
results.pass_test("Extension detection: .js -> javascript")
|
||||
else:
|
||||
results.fail_test("Extension detection: .js -> javascript", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .js -> javascript", str(e))
|
||||
|
||||
# Test 3: Extension detection for Ruby
|
||||
try:
|
||||
lang = un.detect_language('test.rb')
|
||||
if lang == 'ruby':
|
||||
results.pass_test("Extension detection: .rb -> ruby")
|
||||
else:
|
||||
results.fail_test("Extension detection: .rb -> ruby", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .rb -> ruby", str(e))
|
||||
|
||||
# Test 4: Extension detection for Go
|
||||
try:
|
||||
lang = un.detect_language('test.go')
|
||||
if lang == 'go':
|
||||
results.pass_test("Extension detection: .go -> go")
|
||||
else:
|
||||
results.fail_test("Extension detection: .go -> go", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .go -> go", str(e))
|
||||
|
||||
# Test 5: Extension detection for Rust
|
||||
try:
|
||||
lang = un.detect_language('test.rs')
|
||||
if lang == 'rust':
|
||||
results.pass_test("Extension detection: .rs -> rust")
|
||||
else:
|
||||
results.fail_test("Extension detection: .rs -> rust", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .rs -> rust", str(e))
|
||||
|
||||
# Test 6: Extension detection for unknown extension
|
||||
try:
|
||||
lang = un.detect_language('test.unknown')
|
||||
if lang is None:
|
||||
results.pass_test("Extension detection: .unknown -> None")
|
||||
else:
|
||||
results.fail_test("Extension detection: .unknown -> None", f"Got {lang}")
|
||||
except Exception as e:
|
||||
results.fail_test("Extension detection: .unknown -> None", str(e))
|
||||
|
||||
# Test 7: API call test (requires UNSANDBOX_API_KEY)
|
||||
if not os.environ.get('UNSANDBOX_API_KEY'):
|
||||
results.skip_test("API call test", "UNSANDBOX_API_KEY not set")
|
||||
else:
|
||||
try:
|
||||
result = un.execute_code('python', 'print("Hello from API")')
|
||||
if 'stdout' in result and 'Hello from API' in result['stdout']:
|
||||
results.pass_test("API call test")
|
||||
else:
|
||||
results.fail_test("API call test", f"Unexpected result: {result}")
|
||||
except Exception as e:
|
||||
results.fail_test("API call test", str(e))
|
||||
|
||||
# Test 8: End-to-end test with fib.py
|
||||
if not os.environ.get('UNSANDBOX_API_KEY'):
|
||||
results.skip_test("End-to-end fib.py test", "UNSANDBOX_API_KEY not set")
|
||||
elif not os.path.exists(FIB_PY):
|
||||
results.skip_test("End-to-end fib.py test", f"fib.py not found at {FIB_PY}")
|
||||
else:
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, UN_SCRIPT, FIB_PY],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=30
|
||||
)
|
||||
|
||||
# Check for expected output
|
||||
if 'fib(10) = 55' in result.stdout:
|
||||
results.pass_test("End-to-end fib.py test")
|
||||
else:
|
||||
results.fail_test("End-to-end fib.py test",
|
||||
f"Expected 'fib(10) = 55' in output, got: {result.stdout[:200]}")
|
||||
except subprocess.TimeoutExpired:
|
||||
results.fail_test("End-to-end fib.py test", "Timeout (30s)")
|
||||
except Exception as e:
|
||||
results.fail_test("End-to-end fib.py test", str(e))
|
||||
|
||||
# Test 9: File reading test
|
||||
try:
|
||||
# Create a temporary test file
|
||||
test_file = '/tmp/test_un_py_temp.txt'
|
||||
test_content = 'test content 123'
|
||||
with open(test_file, 'w') as f:
|
||||
f.write(test_content)
|
||||
|
||||
content = un.read_file(test_file)
|
||||
os.unlink(test_file)
|
||||
|
||||
if content == test_content:
|
||||
results.pass_test("File reading test")
|
||||
else:
|
||||
results.fail_test("File reading test", f"Expected '{test_content}', got '{content}'")
|
||||
except Exception as e:
|
||||
results.fail_test("File reading test", str(e))
|
||||
|
||||
# Print summary
|
||||
print("\n" + "="*50)
|
||||
print(f"Test Summary:")
|
||||
print(f" PASSED: {results.passed}")
|
||||
print(f" FAILED: {results.failed}")
|
||||
print(f" SKIPPED: {results.skipped}")
|
||||
print(f" TOTAL: {results.passed + results.failed + results.skipped}")
|
||||
print("="*50)
|
||||
|
||||
# Exit with appropriate code
|
||||
sys.exit(0 if results.failed == 0 else 1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue