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.

346 lines (345 loc) 9.2 kB
Simple: - name: 'Simple' input: type: raw value: 'set var HelloWorld; puts $var;' stdout: type: raw value: "HelloWorld\n" - name: 'Bigger value' input: type: raw value: 'set var "Hello World!"; puts $var;' stdout: type: raw value: "Hello World!\n" - name: 'In middle of sentence' input: type: raw value: 'set var "Hello World"; puts "I like to say $var!";' stdout: type: raw value: "I like to say Hello World!\n" - name: 'In middle of brace sentence' input: type: raw value: 'set var "Hello World"; puts {I like to say $var!};' stdout: type: raw value: "I like to say $var!\n" - name: 'Double in middle of sentence' input: type: raw value: 'set var "Hello World"; puts "I like to say $var$var!";' stdout: type: raw value: "I like to say Hello WorldHello World!\n" - name: 'In front of square bracket' input: type: raw value: 'set var "Hello World"; puts $var[expr 3];' stdout: type: raw value: "Hello World3\n" - name: 'Behind of square bracket' input: type: raw value: 'set var "Hello World"; puts [expr 3]$var;' stdout: type: raw value: "3Hello World\n" - name: 'Error on non-existent' input: type: raw value: 'puts $var;' output: type: error Array: - name: 'Simple' input: type: raw value: 'set var(0) HelloWorld; puts $var(0);' stdout: type: raw value: "HelloWorld\n" - name: 'Double simple' input: type: raw value: 'set var(0) HelloWorld; puts $var(0); set var(0) Wow; puts $var(0);' stdout: type: raw value: "HelloWorld\nWow\n" - name: 'Nested' input: type: raw value: 'set index 2; set var($index) HelloWorld; puts $var($index);' stdout: type: raw value: "HelloWorld\n" - name: 'Double Nested' input: type: raw value: 'set index 2; set double($index) 5; set var($double($index)) HelloWorld; puts $var($double($index));' stdout: type: raw value: "HelloWorld\n" - name: 'Using Square Brackets' input: type: raw value: 'set var([expr 3 * 3]) HelloWorld; puts $var([expr 3 * 3]);' stdout: type: raw value: "HelloWorld\n" - name: 'Using Nested Square Brackets' input: type: raw value: 'set multiplier 3; set var([expr 3 * 3]) HelloWorld; puts $var([expr $multiplier * 3]);' stdout: type: raw value: "HelloWorld\n" - name: 'Unset and reassign' input: type: raw value: 'set var(0) HelloWorld; puts $var(0); unset var; set var hello; puts $var;' stdout: type: raw value: "HelloWorld\nhello\n" - name: 'Error on whole use' input: type: raw value: 'set var(0) HelloWorld; puts $var;' output: type: error - name: 'Error on invalid index' input: type: raw value: 'set var(0) HelloWorld; puts $var(1);' output: type: error - name: 'Error on reassign' input: type: raw value: 'set var(0) HelloWorld; puts $var(0); set var hello' output: type: error - name: 'Error on unfinished bracket' input: type: raw value: 'set var(0) HelloWorld; puts $var(0;' output: type: error - name: 'Error on delete non-existing' input: type: raw value: 'set var(0) HelloWorld; unset var(1);' output: type: error - name: 'Error on object in array' input: type: raw value: 'set var(3) HelloWorld; set var(hello) Hi;' output: type: error - name: 'Error on array in normal' input: type: raw value: 'set var HelloWorld; set var(3) Hi;' output: type: error - name: 'Unset array' input: type: raw value: 'set var(1) HelloWorld; unset var; puts $var' output: type: error value: 'can''t read "var": no such variable' - name: 'Unset array index' input: type: raw value: 'set var(1) one; set var(2) two; unset var(1); puts $var(2)' stdout: type: raw value: "two\n" - name: 'Unset array index error' input: type: raw value: 'set var(1) one; set var(2) two; unset var(1); puts $var(1)' output: type: error value: 'no value found at given index: 1' Object: - name: 'Simple' input: type: raw value: 'set var(test) HelloWorld; puts $var(test);' stdout: type: raw value: "HelloWorld\n" - name: 'Double simple' input: type: raw value: 'set var(hi) HelloWorld; puts $var(hi); set var(hi) Wow; puts $var(hi);' stdout: type: raw value: "HelloWorld\nWow\n" - name: 'Simple Empty' input: type: raw value: 'set var() HelloWorld; puts $var();' stdout: type: raw value: "HelloWorld\n" - name: 'With space' input: type: raw value: 'set "var(test this)" HelloWorld; puts $var(test this);' stdout: type: raw value: "HelloWorld\n" - name: 'With escape' input: type: raw value: 'set "var(test\ this)" HelloWorld; puts $var(test\ this);' stdout: type: raw value: "HelloWorld\n" - name: 'Nested' input: type: raw value: 'set wow akey; set var($wow) HelloWorld; puts $var($wow);' stdout: type: raw value: "HelloWorld\n" - name: 'Double Nested' input: type: raw value: 'set keyholder tired; set addition jup; set "wow($keyholder $addition)" akey; set var($wow($keyholder $addition)) HelloWorld; puts $var($wow($keyholder $addition));' stdout: type: raw value: "HelloWorld\n" - name: 'Using Square Brackets' input: type: raw value: 'set var([list wow hi]) HelloWorld; puts $var(wow hi);' stdout: type: raw value: "HelloWorld\n" - name: 'Using Nested Square Brackets' input: type: raw value: 'set multiplier thing; set var([list thing three]) HelloWorld; puts $var([list $multiplier three]);' stdout: type: raw value: "HelloWorld\n" - name: 'Unset and reassign' input: type: raw value: 'set var(hello) HelloWorld; puts $var(hello); unset var; set var hello; puts $var;' stdout: type: raw value: "HelloWorld\nhello\n" - name: 'Error on whole use' input: type: raw value: 'set var(hello) HelloWorld; puts $var;' output: type: error - name: 'Error on invalid index' input: type: raw value: 'set var(hello) HelloWorld; puts $var(wow);' output: type: error - name: 'Error on reassign' input: type: raw value: 'set var(hello) HelloWorld; puts $var(hello); set var hello' output: type: error - name: 'Error on unfinished bracket' input: type: raw value: 'set var(hello) HelloWorld; puts $var(hello;' output: type: error - name: 'Error on delete non-existing' input: type: raw value: 'set var(hello) HelloWorld; unset var(hi);' output: type: error - name: 'Error on array in object' input: type: raw value: 'set var(hello) HelloWorld; set var(3) Hi;' output: type: error - name: 'Error on object in normal' input: type: raw value: 'set var HelloWorld; set var(hello) Hi;' output: type: error - name: 'Unset object' input: type: raw value: 'set var(one) HelloWorld; unset var; puts $var' output: type: error value: 'can''t read "var": no such variable' - name: 'Unset object key' input: type: raw value: 'set var(one) one; set var(two) two; unset var(one); puts $var(two)' stdout: type: raw value: "two\n" - name: 'Unset object key error' input: type: raw value: 'set var(one) one; set var(two) two; unset var(one); puts $var(one)' output: type: error value: 'no value found at given key: one' Brace Variables: - name: 'Simple' input: type: raw value: 'set var HelloWorld; puts ${var};' stdout: type: raw value: "HelloWorld\n" - name: 'Weird chars' input: type: raw value: 'set {*!@&#^#^@!!*^#} HelloWorld; puts ${*!@&#^#^@!!*^#};' stdout: type: raw value: "HelloWorld\n" - name: 'Weird chars array' input: type: raw value: 'set {*!@&#^#^@!!*^#(3)} HelloWorld; puts ${*!@&#^#^@!!*^#(3)};' stdout: type: raw value: "HelloWorld\n" - name: 'Weird chars object with escape outside' input: type: raw value: 'set {*!@&#^#\^@!!*^#(!@&#^#^@!)} HelloWorld; puts ${*!@&#^#\^@!!*^#(!@&#^#^@!)};' stdout: type: raw value: "HelloWorld\n" - name: 'Weird chars object with escape inside' input: type: raw value: 'set {*!@&#^#^@!!*^#(!@&#\^#^@!)} HelloWorld; puts ${*!@&#^#^@!!*^#(!@&#\^#^@!)};' stdout: type: raw value: "HelloWorld\n" - name: 'Error on unexpected end' input: type: raw value: 'set var HelloWorld; puts ${var' output: type: error