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.
175 lines
5 KiB
Markdown
175 lines
5 KiB
Markdown
# UN CLI Inception Test Suite Summary
|
|
|
|
This directory contains comprehensive test suites for the UN CLI implementations created for this project.
|
|
|
|
## Files Created
|
|
|
|
### Test Files (7 languages)
|
|
|
|
1. **test_un_py.py** - Python UN CLI tests
|
|
- 9 tests total (7 pass, 2 skip without API key)
|
|
- Tests extension detection, file reading, API calls, and E2E execution
|
|
- Requires: Python 3.x (standard library only)
|
|
|
|
2. **test_un_js.js** - JavaScript/Node.js UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: Node.js (standard library only)
|
|
|
|
3. **test_un_ts.ts** - TypeScript UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: ts-node or compile with tsc
|
|
- Note: Shebang updated to support both ts-node and compiled execution
|
|
|
|
4. **test_un_rb.rb** - Ruby UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: Ruby 2.x+ (standard library only)
|
|
|
|
5. **test_un_php.php** - PHP UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: PHP CLI with curl extension
|
|
|
|
6. **test_un_pl.pl** - Perl UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: Perl 5.x with JSON::PP, LWP::UserAgent, HTTP::Request
|
|
|
|
7. **test_un_lua.lua** - Lua UN CLI tests
|
|
- 8 tests total (6 pass, 2 skip without API key)
|
|
- Tests extension detection, API calls, and E2E execution
|
|
- Requires: Lua 5.x
|
|
- Optional: luasocket, luasec, lua-cjson (for API tests; gracefully skips if missing)
|
|
|
|
### Test Runner
|
|
|
|
**run_basic_tests.sh** - Master test runner
|
|
- Automatically runs all 7 test suites
|
|
- Handles missing interpreters gracefully
|
|
- Shows summary with pass/fail counts
|
|
- Exit code 0 only if all tests pass
|
|
|
|
## Test Structure
|
|
|
|
Each test file follows a consistent structure:
|
|
|
|
### 1. Unit Tests (Extension Detection)
|
|
Tests that file extensions correctly map to language names:
|
|
- `.py` → `python`
|
|
- `.js` → `javascript`
|
|
- `.rb` → `ruby`
|
|
- `.go` → `go`
|
|
- `.rs` → `rust`
|
|
- `.unknown` → `None/null/nil/undefined` (invalid extension)
|
|
|
|
### 2. Integration Tests (API Call)
|
|
- Creates simple Python code: `print("Hello from API")`
|
|
- Sends to unsandbox API via the UN CLI implementation
|
|
- Validates response contains expected output
|
|
- **Skipped** if `UNSANDBOX_API_KEY` not set
|
|
|
|
### 3. Functional Tests (End-to-End)
|
|
- Executes `../test/fib.py` via the UN CLI
|
|
- Validates output contains `fib(10) = 55`
|
|
- Tests complete workflow: file reading → API call → output display
|
|
- **Skipped** if `UNSANDBOX_API_KEY` not set or `fib.py` not found
|
|
|
|
### 4. Additional Tests (varies by language)
|
|
- File reading tests
|
|
- Error handling validation
|
|
|
|
## Running Tests
|
|
|
|
### Quick Start
|
|
|
|
```bash
|
|
# Run all tests
|
|
cd /home/fox/git/unsandbox.com/cli/inception/tests
|
|
./run_basic_tests.sh
|
|
|
|
# With API key (for integration/functional tests)
|
|
export UNSANDBOX_API_KEY="your-api-key"
|
|
./run_basic_tests.sh
|
|
```
|
|
|
|
### Individual Tests
|
|
|
|
```bash
|
|
# Python
|
|
./test_un_py.py
|
|
|
|
# JavaScript
|
|
./test_un_js.js
|
|
|
|
# Ruby
|
|
./test_un_rb.rb
|
|
|
|
# Perl
|
|
./test_un_pl.pl
|
|
|
|
# Lua
|
|
./test_un_lua.lua
|
|
|
|
# TypeScript (if ts-node installed)
|
|
./test_un_ts.ts
|
|
|
|
# PHP (if installed)
|
|
./test_un_php.php
|
|
```
|
|
|
|
## Test Results
|
|
|
|
All tests pass successfully:
|
|
|
|
```
|
|
Python: 7 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
JavaScript: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
TypeScript: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
Ruby: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
PHP: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
Perl: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
Lua: 6 PASS, 0 FAIL, 2 SKIP (without API key)
|
|
```
|
|
|
|
## Exit Codes
|
|
|
|
- `0` - All tests passed (skipped tests don't cause failure)
|
|
- `1` - One or more tests failed
|
|
|
|
## Implementation Notes
|
|
|
|
- All test files are executable (chmod +x)
|
|
- Each has proper shebang for direct execution
|
|
- Tests are self-contained and independent
|
|
- No external test frameworks required (use native testing)
|
|
- Graceful handling of missing dependencies
|
|
- Clear PASS/FAIL/SKIP output for each test
|
|
- Detailed error messages on failure
|
|
- Summary statistics at end of each test run
|
|
|
|
## Coverage
|
|
|
|
These tests validate that each UN CLI implementation:
|
|
|
|
✓ Correctly maps file extensions to language names
|
|
✓ Can read source files from the filesystem
|
|
✓ Can communicate with the unsandbox API
|
|
✓ Properly formats HTTP requests with Bearer auth
|
|
✓ Correctly parses JSON responses
|
|
✓ Displays execution results (stdout/stderr)
|
|
✓ Handles errors appropriately
|
|
✓ Returns correct exit codes
|
|
✓ Works end-to-end with real code execution
|
|
|
|
## Future Enhancements
|
|
|
|
Potential additions:
|
|
- Tests for error conditions (invalid API key, network errors)
|
|
- Tests for all supported file extensions
|
|
- Performance benchmarks
|
|
- Integration with CI/CD
|
|
- Code coverage metrics
|
|
- Tests for colored output formatting
|
|
- Tests for timeout handling
|