un-inception/tests/unit/test_cobol.cob
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

171 lines
5.6 KiB
COBOL

* Unit tests for un.cob - tests internal functions without API calls
* Compile: cobc -x -o test_cobol test_cobol.cob && ./test_cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-COBOL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PASSED PIC 9(3) VALUE 0.
01 WS-FAILED PIC 9(3) VALUE 0.
01 WS-TOTAL PIC 9(3) VALUE 0.
01 WS-RESULT PIC 9 VALUE 0.
01 WS-TEST-NAME PIC X(60).
01 WS-EXTENSION PIC X(10).
01 WS-LANGUAGE PIC X(20).
01 WS-TIMESTAMP PIC X(20) VALUE "1704067200".
01 WS-METHOD PIC X(10) VALUE "POST".
01 WS-ENDPOINT PIC X(20) VALUE "/execute".
01 WS-MESSAGE PIC X(100).
01 WS-CONTENT PIC X(100).
01 WS-FIRST-LINE PIC X(50).
01 WS-ARG PIC X(50).
01 WS-KEY PIC X(20).
01 WS-VALUE PIC X(50).
01 WS-PATH PIC X(100).
01 WS-BASENAME PIC X(50).
01 WS-API-BASE PIC X(50) VALUE "https://api.unsandbox.com".
01 WS-POS PIC 9(3).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY " ".
DISPLAY "=== Extension Mapping Tests ===".
MOVE ".py" TO WS-EXTENSION.
PERFORM GET-LANGUAGE.
MOVE "Python extension maps correctly" TO WS-TEST-NAME.
IF WS-LANGUAGE = "python"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
MOVE ".cob" TO WS-EXTENSION.
PERFORM GET-LANGUAGE.
MOVE "COBOL extension maps correctly" TO WS-TEST-NAME.
IF WS-LANGUAGE = "cobol"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
MOVE ".js" TO WS-EXTENSION.
PERFORM GET-LANGUAGE.
MOVE "JavaScript extension maps correctly" TO WS-TEST-NAME.
IF WS-LANGUAGE = "javascript"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
MOVE ".go" TO WS-EXTENSION.
PERFORM GET-LANGUAGE.
MOVE "Go extension maps correctly" TO WS-TEST-NAME.
IF WS-LANGUAGE = "go"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
DISPLAY " ".
DISPLAY "=== Signature Format Tests ===".
STRING WS-TIMESTAMP DELIMITED SIZE
":" DELIMITED SIZE
WS-METHOD DELIMITED SPACE
":" DELIMITED SIZE
WS-ENDPOINT DELIMITED SPACE
":body" DELIMITED SIZE
INTO WS-MESSAGE.
MOVE "Signature format starts with timestamp" TO WS-TEST-NAME.
IF WS-MESSAGE(1:10) = WS-TIMESTAMP
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
MOVE "Signature format contains :POST:" TO WS-TEST-NAME.
INSPECT WS-MESSAGE TALLYING WS-POS FOR ALL ":POST:".
IF WS-POS > 0
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
DISPLAY " ".
DISPLAY "=== Language Detection Tests ===".
MOVE "#!/usr/bin/env python3" TO WS-FIRST-LINE.
MOVE "Python shebang starts with #!" TO WS-TEST-NAME.
IF WS-FIRST-LINE(1:2) = "#!"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
DISPLAY " ".
DISPLAY "=== Argument Parsing Tests ===".
MOVE "DEBUG=1" TO WS-ARG.
MOVE "DEBUG" TO WS-KEY.
MOVE "1" TO WS-VALUE.
MOVE "Parse -e KEY=VALUE format" TO WS-TEST-NAME.
IF WS-ARG(1:5) = WS-KEY AND WS-ARG(7:1) = WS-VALUE
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
DISPLAY " ".
DISPLAY "=== API Constants Tests ===".
MOVE "API base URL starts with https://" TO WS-TEST-NAME.
IF WS-API-BASE(1:8) = "https://"
MOVE 1 TO WS-RESULT
ELSE
MOVE 0 TO WS-RESULT
END-IF.
PERFORM RUN-TEST.
DISPLAY " ".
DISPLAY "=== Summary ===".
COMPUTE WS-TOTAL = WS-PASSED + WS-FAILED.
DISPLAY "Passed: " WS-PASSED.
DISPLAY "Failed: " WS-FAILED.
DISPLAY "Total: " WS-TOTAL.
IF WS-FAILED > 0
STOP RUN WITH STATUS 1
ELSE
STOP RUN WITH STATUS 0
END-IF.
RUN-TEST.
IF WS-RESULT = 1
DISPLAY " ✓ " WS-TEST-NAME
ADD 1 TO WS-PASSED
ELSE
DISPLAY " ✗ " WS-TEST-NAME
ADD 1 TO WS-FAILED
END-IF.
GET-LANGUAGE.
EVALUATE WS-EXTENSION
WHEN ".py" MOVE "python" TO WS-LANGUAGE
WHEN ".js" MOVE "javascript" TO WS-LANGUAGE
WHEN ".rb" MOVE "ruby" TO WS-LANGUAGE
WHEN ".go" MOVE "go" TO WS-LANGUAGE
WHEN ".cob" MOVE "cobol" TO WS-LANGUAGE
WHEN ".c" MOVE "c" TO WS-LANGUAGE
WHEN OTHER MOVE SPACES TO WS-LANGUAGE
END-EVALUATE.