#!/bin/sh
# the next line restarts using the interpreter \
exec tclsh "$0" "$@"

set rcsId {$Id: runtests,v 2.3 1999/12/27 16:10:02 jfontain Exp $}

set debug [string equal [lindex $argv 0] -d]                                                                   ;# debug switch is -d
if {$debug} {
    set env(STOOOPCHECKALL) 1
}

proc appendWithNewLine {variableName string} {                                               ;# puts emulation for slave interpreter
    upvar $variableName variable
    append variable $string\n
}

set numbers {}                                                                             ;# first gather valid files and sort them
foreach file [glob {[0-9].tcl} {[1-9][0-9].tcl} {1[0-9][0-9].tcl}] {
    lappend numbers [file rootname $file]
}

foreach number [lsort -integer $numbers] {
    puts -nonewline "test $number ... "
    set testFile $number.tcl
    set expect {}                                                                                           ;# store expected output
    set file [open $testFile]
    while {[gets $file line]>=0} {
        if {[regexp {^## (.+)$} $line dummy line]} {
            append expect $line\n
        }
    }
    close $file

    set output {}
    set interpreter [interp create]       ;# use as a slave interpreter if available for exec may not be available on some platforms
    $interpreter alias puts appendWithNewLine output                           ;# alias puts to be able to collect slave stdout data
    if {[catch {$interpreter eval source $testFile} error]} {
        set output $error\n$output                 ;# error messages always appear first through exec because stderr is not buffered
    }
    interp delete $interpreter

    if {[string equal $expect $output]} {
        puts passed
    } else {
        puts failed
        puts "### with output:"
        puts $output
        puts "### expected:"
        puts $expect
    }
}
