TABLE OF CONTENTS


::pwtk::test

SYNOPSIS

proc ::pwtk::test {cmd {expectedResult ""} {expectedError ""}} {

PURPOSE

Produce a nice output for testing scripts/commands and tests that the result matches.

ARGUMENTS

SOURCE

    variable catch_error
    set result {}
    set error  {}
    set pass N/A
    puts "
===============================================================Testing==
SCRIPT:
$cmd
"
    set catch_error 1
    set tmp [file join [::fileutil::tempdir] error.[pid]]
    try {
        if { $expectedError ne {} } {
            ::pwtk::redirect_stderr_to $tmp { uplevel $cmd }
        } else {
            set result [uplevel $cmd]
        }
    } on error err {
        if { [info commands ::tcl::orig_puts] ne {} } {
            # BEWARE: error occured while evaluation script in
            # ::pwtk::redirect_stderr_to, revert "puts" to default Tcl puts
            # (see ::pwtk::redirect_stderr_to)
            rename ::puts {}
            rename ::tcl::orig_puts ::puts
        }
        if { $expectedError ne {} } {
            set result [readFile $tmp]
        }         
        ifnotempty err { set error "\n\nCODING_ERROR: $err" }        
    }
    set catch_error 0

    if { $expectedResult ne {} } {
        set pass [expr { [testProcessResult_ $result] == [testProcessResult_ $expectedResult] ? 1 : 0 } ]
    }
    if { $expectedError ne {} } {
        set pass [expr { [filterQEerror_ [testProcessResult_ $result]] == [filterQEerror_ [testProcessResult_ $expectedError]] ? 1 : 0 } ]
    }
    ifnotempty result {
        puts "RESULT:
[testProcessResult_ $result]"
    }
    if { $pass != 1 && $expectedResult ne {} } {
        puts "EXPECTED RESULT:
[testProcessResult_ $expectedResult]"
    }
    if { $pass != 1 && $expectedError ne {} } {
        puts "EXPECTED ERROR:
[testProcessResult_ $expectedError]"
    }
    puts "
PASSED: $pass$error
========================================================================
"
}