UNPKG

tcl-js

Version:

tcl-js is a tcl intepreter written completely in Typescript. It is meant to replicate the tcl-sh interpreter as closely as possible.

327 lines (299 loc) 6.81 kB
# Test if the puts command works Puts: - name: Simple input: type: raw value: 'puts HelloWorld' stdout: type: raw value: "HelloWorld\n" - name: 'With -nonewline' input: type: raw value: 'puts -nonewline HelloWorld' stdout: type: raw value: HelloWorld - name: 'With longer text' input: type: raw value: 'puts "Hello World!"' stdout: type: raw value: "Hello World!\n" - name: 'To stderr' input: type: raw value: 'puts stderr "Hello World!"' stderr: type: raw value: "Hello World!\n" - name: 'Error on uncomplete' input: type: raw value: 'puts' output: type: error Expr: - name: Simple input: type: raw value: 'expr 3' output: type: raw value: '3' - name: Simple math input: type: raw value: 'expr (3 +6) * (5 % 3) / 7 - 3**2' output: type: raw value: '-6.428571428571429' - name: Math with variables input: type: raw value: 'set five 5; expr 3 + $five' output: type: raw value: '8' - name: Nested expressions input: type: raw value: 'expr {[expr 3]}' output: type: raw value: '3' - name: String expressions input: type: raw value: "expr {true ? 'hello': 'no'}" output: type: error value: 'expression resolved to unusable value' # Test the functionality of variables 'Set and Unset': - name: Simple input: type: raw value: 'set var HelloWorld' output: type: raw value: HelloWorld - name: 'Print variable' input: type: raw value: 'set var HelloWorld; puts $var;' stdout: type: raw value: "HelloWorld\n" - name: 'Retrieve variable' input: type: raw value: 'set var HelloWorld; puts $var; set var;' stdout: type: raw value: "HelloWorld\n" output: type: raw value: HelloWorld - name: 'Unset variable' input: type: raw value: 'set var HelloWorld; puts $var; unset var;' stdout: type: raw value: "HelloWorld\n" - name: 'Set variable and change' input: type: raw value: 'set var HelloWorld; puts $var; set var HelloEarth; puts $var;' stdout: type: raw value: "HelloWorld\nHelloEarth\n" - name: 'Set variable, unset variable and set again' input: type: raw value: 'set var HelloWorld; puts $var; unset var; set var HelloEarth; puts $var;' stdout: type: raw value: "HelloWorld\nHelloEarth\n" - name: 'Unset non-existing' input: type: raw value: 'set var HelloWorld; unset rav;' output: type: error - name: 'Unset non-existing with nocomplain' input: type: raw value: 'set var HelloWorld; unset -nocomplain rav;' - name: 'Error on unfinshed variable name' input: type: raw value: 'set (wow)' output: type: error - name: 'Error on uncomplete' input: type: raw value: 'set' output: type: error - name: 'Unset object key from nonexistent object' input: type: raw value: 'unset -nocomplain var(test)' output: type: error value: 'cant'' unset "var": variable isn''t object' - name: 'Unset array index from nonexistent array' input: type: raw value: 'unset -nocomplain var(2)' output: type: error value: 'cant'' unset "var": variable isn''t array' List: - name: 'Simple' input: type: raw value: 'puts [list hello this is a list]' stdout: type: raw value: "hello this is a list\n" - name: 'With spaces' input: type: raw value: 'puts [list hello this is a list]' stdout: type: raw value: "hello this is a list\n" - name: 'With captured spaces' input: type: raw value: 'puts [list "hello this" is a list]' stdout: type: raw value: "{hello this} is a list\n" Lindex: - name: 'No depth' input: type: raw value: 'set lst "one two three four five"; puts [lindex $lst]' stdout: type: raw value: "one two three four five\n" - name: 'Simple' input: type: raw value: 'set lst "zero one two three four five"; puts [lindex $lst 2]' stdout: type: raw value: "two\n" - name: 'Nested' input: type: raw value: 'set lst "zero one two {three four five} six"; puts [lindex $lst 3 1]' stdout: type: raw value: "four\n" - name: 'Double Nested' input: type: raw value: 'set lst "zero one two {{three four} five} six"; puts [lindex $lst 3 0 1]' stdout: type: raw value: "four\n" - name: 'Error on not number' input: type: raw value: 'set lst "one two three four five"; puts [lindex $lst wow]' output: type: error Eval: - name: 'Simple' input: type: raw value: 'eval {puts -nonewline {Hello World!}}' stdout: type: raw value: 'Hello World!' Wait: - name: 'Simple' input: type: raw value: 'wait 5' - name: 'Error on wrong arg' input: type: raw value: 'wait five' output: type: error Incr: - name: 'Basic increment' input: type: raw value: 'incr i' output: type: raw value: '1' - name: 'Basic increment with increment specified' input: type: raw value: 'incr i 3' output: type: raw value: '3' - name: 'Basic increment with wrong increment specified' input: type: raw value: 'incr i wow' output: type: error value: 'expected integer but got "wow"' - name: 'Basic increment on existing variable' input: type: raw value: 'set i 3; incr i' output: type: raw value: '4' - name: 'Basic increment on existing variable with increment set' input: type: raw value: 'set i 3; incr i 3' output: type: raw value: '6' - name: 'Basic increment on wrong existing variable' input: type: raw value: 'set i wow; incr i' output: type: error value: 'expected integer but got "wow"' Info: - name: 'Simple' input: type: raw value: 'info commands' output: type: raw value: 'commands' - name: 'Empty' input: type: raw value: 'info empty' output: type: raw value: '' - name: Error on wrong arguments input: type: raw value: 'info' output: type: error Switch: 'subtests/switch.yml' Proc: 'subtests/proc.yml' If: 'subtests/if.yml' Loop commands: 'subtests/loops.yml'