Commands: 'subtests/commands.yml'

Functionality:
  # Test if TCL is able to load files
  Files:
    - name: 'Hello World example'
      input:
        type: file
        value: 'scripts/HelloWorld.tcl'
      stdout:
        type: file
        value: 'results/HelloWorld.txt'

  # Test if comments are working
  Comments:
    - name: Simple
      input:
        type: raw
        value: '# This is a comment'

    - name: 'Error on missing semicolon'
      input:
        type: raw
        value: 'puts {Bad comment syntax example}   # *Error* - no semicolon!'
      output:
        type: error
        value: ''

  Arguments: 'subtests/arguments.yml'

  # Test backslash substitution
  Backslash Substitution: 'subtests/backslash.yml'

  Square Bracket Substitution:
    - name: Simple
      input:
        type: raw
        value: 'puts -nonewline [expr 3]'
      stdout:
        type: raw
        value: '3'
    - name: Nested
      input:
        type: raw
        value: 'puts -nonewline [expr [expr 3 * 3] * 2]'
      stdout:
        type: raw
        value: '18'
    - name: Backslash
      input:
        type: raw
        value: 'set test [puts [puts hi\nhi]]'
      stdout:
        type: raw
        value: "hi\nhi\n\n"
    - name: Variables
      input:
        type: raw
        value: 'set test 5; puts -nonewline [expr [expr $test * 3] * 2]'
      stdout:
        type: raw
        value: '30'

  Variables: 'subtests/variables.yml'

  Math: 'subtests/math.yml'

  Lists:
    - name: Char after brace
      input:
        type: raw
        value: 'set test "hello {there}general kenobi"; puts [lindex $test 1]'
      output:
        type: error
    - name: Spaces
      input:
        type: raw
        value: 'set test "hello     {there}     general      kenobi"; puts [lindex $test 2]'
      stdout:
        type: raw
        value: "general\n"
    - name: Out of list bounds
      input:
        type: raw
        value: 'set test "hello {there} general kenobi"; puts [lindex $test 5]'
      stdout:
        type: raw
        value: "\n"
    - name: 'Unfindable word'
      input:
        type: raw
        value: 'set lst "hello there    "; lindex $lst 1'
      output:
        type: output
        value: 'there'

  Argument Expansion: 'subtests/expand.yml'

  Types: 'subtests/types.js'

  Scope:
    Special: 'subtests/scope.js'

Errors: 'subtests/errors.yml'

Other Tests: 'subtests/main.js'

#Execute examples from ./scripts
Examples: 'subtests/examples.yml'
