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

set rcsId {$Id: runtests,v 1.8 1996/10/09 20:27:27 jfontain Exp $}

# first gather valid files and sort them
set numbers {}
foreach file [glob *.tcl] {
    set number [file rootname $file]
    if {![catch {expr $number+0}]} {
        lappend numbers $number
    }
}

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

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

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

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


