terminals/tests/Xtreams__PipeReadingWritingTest.st
author joe
Fri, 15 Mar 2013 19:39:10 -0400
changeset 112 b6b3d8435bb7
parent 71 b5baf23694f3
permissions -rw-r--r--
- Xtreams::FileReadingWritingTest class: Xtreams::FileReadingWritingTest added: #version_HG - stx_goodies_xtreams_terminals_tests class: stx_goodies_xtreams_terminals_tests changed: #classNamesAndAttributes - Xtreams::BlockClosureReadingWritingTest class: Xtreams::BlockClosureReadingWritingTest added: #version_HG - Xtreams::PipeReadingWritingTest class: Xtreams::PipeReadingWritingTest added: #version_HG - Xtreams::BufferReadingWritingTest class: Xtreams::BufferReadingWritingTest added: #version_HG - Xtreams::BlockClosureTest class: Xtreams::BlockClosureTest added: #version_HG - Xtreams::RingBufferReadingWritingTest class: Xtreams::RingBufferReadingWritingTest added: #version_HG - Xtreams::BufferedWriteStreamTest class: Xtreams::BufferedWriteStreamTest added: #version_HG - Xtreams::CollectionReadingWritingTest class: Xtreams::CollectionReadingWritingTest added: #version_HG - Xtreams::SocketReadingWritingTest class: Xtreams::SocketReadingWritingTest added: #version_HG - Xtreams::ElasticBufferReadingWritingTest class: Xtreams::ElasticBufferReadingWritingTest added: #version_HG

"{ Package: 'stx:goodies/xtreams/terminals/tests' }"

"{ NameSpace: Xtreams }"

FiniteReadingWritingTests subclass:#PipeReadingWritingTest
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:'XtreamsPool'
	category:'Xtreams-Terminals-Tests'
!


!PipeReadingWritingTest methodsFor:'initialize-release'!

setUp
        | pipe |
        pipe := PipeStream makePipe.
        input := pipe first reading.
        output := pipe last writing.
!

tearDown
	input close.
	output close.
! !

!PipeReadingWritingTest methodsFor:'utilities'!

timeout: timeoutDuration server: serverBlock client: clientBlock
        "For tests that must be able to write and read at the same time, where they may block on each.
         Sockets, Pipes have an operating system buffer which dictates its bandwidth."

        |       timeout
                serverSuccess serverProcess serverLock
                clientSuccess clientProcess clientLock|

        timeout := false.
        serverLock := Semaphore new.
        clientLock := Semaphore new.
        serverSuccess := clientSuccess := false.
        serverProcess := [serverSuccess := serverBlock value. serverLock signal] fork.
        clientProcess := [clientSuccess := clientBlock value. clientLock signal] fork.

        serverLock wait.
        clientLock wait.

        self assert: serverSuccess.
        self assert: clientSuccess.
        self deny: timeout
! !

!PipeReadingWritingTest class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id$'
! !