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
YAML
# 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'