RegressionTests__ExternalStreamTest.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 18:53:03 +0200
changeset 2327 bf482d49aeaf
parent 2194 61cd491dd402
permissions -rw-r--r--
#QUALITY by exept class: RegressionTests::StringTests added: #test82c_expanding

"{ Encoding: utf8 }"

"{ Package: 'stx:goodies/regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#ExternalStreamTest
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Streams'
!

!ExternalStreamTest class methodsFor:'documentation'!

documentation
"
    tests functions of the new stream package (which is not yet deployed)
"
! !

!ExternalStreamTest methodsFor:'test-helpers'!

createWithSize10:fileName
    "helper"

    (fileName asFilename exists) ifTrue:[
	fileName asFilename delete
    ].
    fileName asFilename writeStream
	nextPutAll:'1234567890';
	close.
    self assert:(fileName asFilename exists).
    self assert:(fileName asFilename fileSize == 10).

    "
     self new createWithSize10:'xxx1'
    "
! !

!ExternalStreamTest methodsFor:'tests'!

testCopyFile1
    |stxDirectory pathName1 pathName2|

    stxDirectory := Helper smalltalkDirectory.
    pathName1 := (stxDirectory / 'smalltalk.rc') pathName.
    pathName2 := (stxDirectory / 'smalltalk.rc2') pathName.
    self assert:(pathName1 asFilename exists).
        
    pathName1 asFilename copyTo:pathName2.

    self assert:(pathName1 asFilename fileSize = pathName2 asFilename fileSize).
    self assert:(pathName1 asFilename contentsOfEntireFile = pathName2 asFilename contentsOfEntireFile).
    pathName2 asFilename delete.

    "
     self new testCopyFile1
    "
! !

!ExternalStreamTest methodsFor:'tests - future (skipped)'!

testPosition1
    |h s ch externalReadStream|
        
    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not" 
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.

    self assert:( s atEnd not ).
    self assert:( s position == 0 ).

    ch := s next.
    self assert:( ch = $1 ).
    self assert:( s position == 1 ).

    s skip:1.
    self assert:( s position == 2 ).
    self assert:( s peek = $3 ).
    self assert:( s position == 2 ).
    s skip:1.
    self assert:( s position == 3 ).
    self assert:( s peek = $4 ).
    self assert:( s position == 3 ).

    s close.

    'xxx3' asFilename delete.

    "
     self new testPosition1
    "

    "Modified: / 16-02-2017 / 18:06:38 / stefan"
    "Modified (format): / 28-03-2019 / 12:18:37 / Claus Gittinger"
!

testPosition2
    |h s externalReadStream|

    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not" 
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.

    self assert:( s atEnd not ).
    self assert:( s position == 0 ).

    s setToEnd.

    self assert:( s position == 10 ).
    self assert:( s atEnd ).

    s close.

    'xxx3' asFilename delete.

    "
     self new testPosition2
    "

    "Modified: / 16-02-2017 / 18:07:01 / stefan"
    "Modified (format): / 28-03-2019 / 12:18:44 / Claus Gittinger"
!

testRead1
    "open an existing file for reading; should read 10 chars"

    |h s externalReadStream|

    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not" 
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.

    '1234567890' do:[:eachExpected |
        self assert:( s next == eachExpected ).
    ].

    s close.

    'xxx3' asFilename delete.

    "
     self new testRead1
    "

    "Modified: / 16-02-2017 / 18:07:08 / stefan"
    "Modified (format): / 28-03-2019 / 12:18:51 / Claus Gittinger"
!

testRead2
    "open an existing file for reading; should read 10 chars"

    |h s externalReadStream|

    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not"        
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.
    s binary.

    '1234567890' do:[:eachExpected |
        |eachRead|

        eachRead := s next.
        self assert:( eachRead == eachExpected asciiValue ).
    ].

    s close.

    'xxx3' asFilename delete.

    "
     self new testRead2
    "

    "Modified: / 16-02-2017 / 18:07:16 / stefan"
    "Modified (format): / 28-03-2019 / 12:18:56 / Claus Gittinger"
!

testRead3
    "open an existing file for reading; should read 10 chars"

    |h s bytesRead externalReadStream|

    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not" 
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.

    self assert:( s atEnd not ).

    bytesRead := s next:10.
    self assert:( bytesRead = '1234567890' ).
    self assert:( s atEnd ).

    s close.

    'xxx3' asFilename delete.

    "
     self new testRead3
    "

    "Modified: / 16-02-2017 / 18:07:21 / stefan"
    "Modified (format): / 28-03-2019 / 12:19:02 / Claus Gittinger"
!

testReadWait1
    |h s ok externalReadStream|

    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalReadStream isBehavior not" 
         description:'skipped until new stream package is used'.

    self createWithSize10:'xxx3'.

    h := OperatingSystem openFileForRead:'xxx3'.
    s := externalReadStream on:h.

    ok := (s readWaitWithTimeout:1) == false.

    self assert:( ok ).

    s close.

    'xxx3' asFilename delete.

    "
     self new testReadWait1
    "

    "Modified: / 16-02-2017 / 18:07:26 / stefan"
    "Modified (format): / 28-03-2019 / 12:19:05 / Claus Gittinger"
!

testTiming1
    |h s t externalWriteStream externalReadStream|

    externalWriteStream := (Smalltalk at:#ExternalWriteStream).
    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalWriteStream isBehavior not" 
         description:'skipped until new stream package is used'.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    h := OperatingSystem createFileForReadWrite:'xxx1'.
    s := externalWriteStream on:h.

    t := Time millisecondsToRun:[
        1000000 timesRepeat:[
            s nextPut:$a.
        ].
    ].
    s close.
    Transcript showCR:'Time to write: ' , t printString.

    self assert:( 'xxx1' asFilename exists ).
    self assert:( 'xxx1' asFilename fileSize == 1000000 ).

    h := OperatingSystem openFileForRead:'xxx1'.
    s := externalReadStream on:h.

    t := Time millisecondsToRun:[
        1000000 timesRepeat:[
            self assert:(s next == $a).
        ].
    ].
    s close.
    Transcript showCR:'Time to read: ' , t printString.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    "
     self new testTiming1
    "

    "Modified: / 16-02-2017 / 18:07:43 / stefan"
    "Modified (format): / 28-03-2019 / 12:19:09 / Claus Gittinger"
!

testTiming2
    |h s t externalWriteStream externalReadStream|

    externalWriteStream := (Smalltalk at:#ExternalWriteStream).
    externalReadStream := (Smalltalk at:#ExternalReadStream).
    self skipIf:true "externalWriteStream isBehavior not" 
         description:'skipped until new stream package is used'.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    h := OperatingSystem createFileForReadWrite:'xxx1'.
    s := externalWriteStream on:h.

    t := Time millisecondsToRun:[
        100000 timesRepeat:[
            s nextPutAll:'0123456789'.
        ].
    ].
    s close.
    Transcript showCR:'Time to write: ' , t printString.

    self assert:( 'xxx1' asFilename exists ).
    self assert:( 'xxx1' asFilename fileSize == 1000000 ).

    h := OperatingSystem openFileForRead:'xxx1'.
    s := externalReadStream on:h.

    t := Time millisecondsToRun:[
        100000 timesRepeat:[
            self assert:((s next:10) = '0123456789').
        ].
    ].
    s close.
    Transcript showCR:'Time to read: ' , t printString.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    "
     self new testTiming2
    "

    "Modified: / 16-02-2017 / 18:07:56 / stefan"
    "Modified (format): / 28-03-2019 / 12:19:13 / Claus Gittinger"
!

testWriteNewStreams1
    "new streams (from sv) - as yet unfinished"
    
    |h s externalWriteStream|

    externalWriteStream := (Smalltalk at:#ExternalWriteStream).
    self skipIf:true "externalWriteStream isBehavior not" 
         description:'skipped until new stream package is used'.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    h := OperatingSystem createFileForReadWrite:'xxx1'.
    s := externalWriteStream on:h.

    s nextPutAll:'1234567890'.
    s close.

    self assert:( 'xxx1' asFilename exists ).
    self assert:( 'xxx1' asFilename fileSize == 10 ).
    self assert:( 'xxx1' asFilename contentsOfEntireFile = '1234567890' ).

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    "
     self new testWrite1
    "

    "Created: / 28-03-2019 / 11:02:34 / Claus Gittinger"
!

testWriteNewStreams2
    "new streams (from sv) - as yet unfinished"

    |h s externalWriteStream|

    externalWriteStream := (Smalltalk at:#ExternalWriteStream).
    self skipIf:true "externalWriteStream isBehavior not" 
         description:'skipped until new stream package is used'.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    h := OperatingSystem createFileForReadWrite:'xxx1'.
    s := externalWriteStream on:h.

    self assert:( s position == 0 ).
    s nextPutAll:'1234567890'.
    self assert:( s position == 10 ).


    s close.

    self assert:( 'xxx1' asFilename exists ).
    self assert:( 'xxx1' asFilename fileSize == 10 ).
    self assert:( 'xxx1' asFilename contentsOfEntireFile = '1234567890' ).

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    "
     self new testWrite2
    "

    "Created: / 28-03-2019 / 11:02:41 / Claus Gittinger"
!

testWriteNewStreams3
    "new streams (from sv) - as yet unfinished"

    |h s externalWriteStream|

    externalWriteStream := (Smalltalk at:#ExternalWriteStream).
    self skipIf:true "externalWriteStream isBehavior not" 
         description:'skipped until new stream package is used'.

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    h := OperatingSystem createFileForReadWrite:'xxx1'.
    s := externalWriteStream on:h.

    s nextPutAll:'1234567890'.
    self assert:( s position == 10 ).
    s position:5.
    s nextPutAll:'abcdefghij'.
    self assert:( s position == 15 ).

    s close.

    self assert:( 'xxx1' asFilename exists ).
    self assert:( 'xxx1' asFilename fileSize == 15 ).
    self assert:( 'xxx1' asFilename contentsOfEntireFile = '12345abcdefghij' ).

    ('xxx1' asFilename exists) ifTrue:[
        'xxx1' asFilename delete
    ].

    "
     self new testWrite3
    "

    "Created: / 28-03-2019 / 11:02:43 / Claus Gittinger"
! !

!ExternalStreamTest class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !