#
# pipe.test
#
# Tests for the pipe command.
#---------------------------------------------------------------------------
# Copyright 1992-1999 Karl Lehenbauer and Mark Diekhans.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
# that the above copyright notice appear in all copies.  Karl Lehenbauer and
# Mark Diekhans make no representations about the suitability of this
# software for any purpose.  It is provided "as is" without express or
# implied warranty.
#------------------------------------------------------------------------------
# $Id: pipe.test,v 1.1.1.1 1999/06/28 20:35:28 damon Exp $
#------------------------------------------------------------------------------
#

if [cequal [info procs Test] {}] {source testlib.tcl}

#
# Fork without exec will not work under Tk, skip this test
#
if ![lempty [info commands button]] {
    puts "*************************************************************"
    puts "The pipe commands test are constructed in a way that does not"
    puts "work under Tk.  Test skipped."
    puts "*************************************************************"
    puts ""
    return
}
# FIX: Need win95 tests for pipe.

#
# Create child process to read from the pipe and write a message
# back.
#
proc PipeChild {id numRecs readChan} {
    flush stdout  ;# Not going to exec, must clean up the buffers.
    flush stderr
    set pid [fork]
    if {$pid != 0} {
        return $pid
    }
    for {set cnt 0} {$cnt < $numRecs} {incr cnt} {
        Test filecmds-4.1 {pipe tests} {
            if {![gets $readChan msgBuf]} {
                set msgBuf "Premature eof on pipe"
                set cnt $numRecs
            }
            set msgBuf
        } 0 [GenRec $cnt]
    }
    close $readChan
    exit 0
}

Test pipe-1.1 {pipe tests} {
    pipe x y z
} 1 {wrong # args: pipe ?fileId_var_r fileId_var_w?}

Test pipe-1.2 {pipe tests} {
    pipe readChan writeChan

    set pid [PipeChild pipe-1.3 50 $readChan]
    for {set cnt 0} {$cnt < 50} {incr cnt} {
        puts $writeChan [GenRec $cnt]
    }
    flush $writeChan
    Test pipe-1.32 {pipe tests} {
        wait $pid
    } 0 [list $pid EXIT 0]
        
    close $readChan
    close $writeChan
} 0 {} {unixOnly}





