Added tests for (UNIX) TTY / PTY attribute support. jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 31 May 2017 10:16:42 +0100
branchjv
changeset 1605 5ff1befbd463
parent 1604 550ad2d68e2a
child 1612 972b34959a7b
Added tests for (UNIX) TTY / PTY attribute support.
RegressionTests__FileStreamTest.st
RegressionTests__PTYTest.st
RegressionTests__PipeStreamTest.st
stx_goodies_regression.st
--- a/RegressionTests__FileStreamTest.st	Wed May 31 07:27:55 2017 +0100
+++ b/RegressionTests__FileStreamTest.st	Wed May 31 10:16:42 2017 +0100
@@ -352,6 +352,20 @@
     "
 !
 
+testTTYa
+    | stream |
+
+    self createTestFile.
+    stream := testFilename readStream.
+    [
+        self deny: stream isTTY.
+    ] ensure:[ 
+        stream close.
+    ].
+
+    "Created: / 31-05-2017 / 07:30:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 testWrite1
     "basic writing in various block sizes"
 
--- a/RegressionTests__PTYTest.st	Wed May 31 07:27:55 2017 +0100
+++ b/RegressionTests__PTYTest.st	Wed May 31 10:16:42 2017 +0100
@@ -5,13 +5,150 @@
 TestCase subclass:#PTYTest
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'TTYConstants'
 	category:'tests-Regression-Streams'
 !
 
 
+!PTYTest methodsFor:'running'!
+
+setUp
+    self skipIf: OperatingSystem supportsTTYs not description: 'No TTY / PTY support'
+
+    "Created: / 01-06-2017 / 21:25:55 / jv"
+! !
+
 !PTYTest methodsFor:'tests'!
 
+testEOLMode01
+    |ptyPair master slave data |
+
+    ptyPair := NonPositionableExternalStream makePTYPair.
+    master := ptyPair at:1.
+    slave := ptyPair at:2.
+
+    master nextPutLine:'1234'.
+    master nextPutLine:'ABCD'.  
+
+    self assert:(data := slave  nextLine) = '1234'.      
+    self assert:(data := master nextLine) = '1234'.      
+
+    self assert:(data := slave  nextLine) = 'ABCD'.      
+    self assert:(data := master nextLine) = 'ABCD'.      
+
+    master close.
+    slave close.
+
+    "Created: / 31-05-2017 / 09:52:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 31-05-2017 / 11:35:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+testEOLMode02
+    "
+    Turn off CR-LF on PTY (i.e., make sure lines are NL only)
+    "
+    |ptyPair master slave data attrs |
+
+    ptyPair := NonPositionableExternalStream makePTYPair.
+    master := ptyPair at:1.
+    slave := ptyPair at:2.
+
+    attrs := master getTTYAttributes.
+    attrs c_oflag: (attrs c_oflag bitClear: ONLCR).
+    master setTTYAttributes: attrs.
+
+
+    master nextPutLine:'1234'.
+    master nextPutLine:'ABCD'.  
+
+    self assert:(data := slave  next:4) = '1234'.      
+    self assert:(data := master next:4) = '1234'.      
+
+    self assert: (data := slave next) == Character linefeed.
+    self assert: (data := master next) == Character linefeed.
+
+    self assert: (data := slave next: 4) = 'ABCD'.
+    self assert: (data := master next: 4) = 'ABCD'.
+
+    master close.
+    slave close.
+
+    "Created: / 31-05-2017 / 09:53:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-05-2017 / 15:29:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-06-2017 / 21:23:35 / jv"
+!
+
+testEchoOff
+    |ptyPair master slave attrs data |
+
+    ptyPair := NonPositionableExternalStream makePTYPair.
+    master := ptyPair at:1.
+    slave := ptyPair at:2.
+
+    attrs := master getTTYAttributes.
+    attrs c_lflag: attrs c_lflag | ECHO.
+    master setTTYAttributes: attrs.
+
+    master nextPutLine:'1234567890'.
+    self assert:(data := slave  nextLine) = '1234567890'.      
+    self assert:(data := master nextAvailable:10+1"CR"+1"NL") notEmpty.
+
+    attrs := master getTTYAttributes.
+    attrs c_lflag: (attrs c_lflag bitClear: ECHO).
+    master setTTYAttributes: attrs.
+
+    master nextPutLine:'1234567890'.
+    self assert:(data := slave  nextLine) = '1234567890'.      
+    self assert:(data := master nextAvailable: 11) isEmpty.      
+    
+
+
+
+    master close.
+    slave close.
+
+    "Created: / 31-05-2017 / 07:41:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 31-05-2017 / 08:46:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-06-2017 / 21:23:55 / jv"
+!
+
+testGetSetAttributes
+    |ptyPair master slave attrs |
+
+    ptyPair := NonPositionableExternalStream makePTYPair.
+    master := ptyPair at:1.
+    slave := ptyPair at:2.
+
+    attrs := master getTTYAttributes.
+    master setTTYAttributes: attrs.
+
+    attrs := slave getTTYAttributes.
+    slave setTTYAttributes: attrs. 
+
+
+    master close.
+    slave close.
+
+    "Created: / 31-05-2017 / 07:39:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-06-2017 / 21:24:09 / jv"
+!
+
+testIsTTY
+    |ptyPair master slave|
+
+    ptyPair := NonPositionableExternalStream makePTYPair.
+    master := ptyPair at:1.
+    slave := ptyPair at:2.
+
+    self assert: master isTTY.
+    self assert: slave isTTY.
+
+    master close.
+    slave close.
+
+    "Created: / 31-05-2017 / 07:38:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 testPTY1
     |ptyPair master slave|
 
@@ -58,5 +195,10 @@
 
 version
     ^ '$Header$'
+!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
 ! !
 
--- a/RegressionTests__PipeStreamTest.st	Wed May 31 07:27:55 2017 +0100
+++ b/RegressionTests__PipeStreamTest.st	Wed May 31 10:16:42 2017 +0100
@@ -218,6 +218,24 @@
     "
 
     "Modified: / 12.8.1998 / 13:42:13 / cg"
+!
+
+testTTY
+    "Test TTY / PTY related methods on pipes (should throw error)"
+
+    | s |
+
+    s := PipeStream readingFrom:'echo hello'.
+    [ 
+        self deny: s isTTY.
+        self should: [ s getTTYAttributes ] raise: OsError.
+        s nextLine
+    ] ensure:[
+        s close.
+    ]
+
+    "Created: / 31-05-2017 / 07:35:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-06-2017 / 21:27:13 / jv"
 ! !
 
 !PipeStreamTest class methodsFor:'documentation'!
--- a/stx_goodies_regression.st	Wed May 31 07:27:55 2017 +0100
+++ b/stx_goodies_regression.st	Wed May 31 10:16:42 2017 +0100
@@ -76,6 +76,7 @@
     'BehaviorLookupObjectTests'
     'SelectorNamespacesTests'
     'Win32OperatingSystemTest'
+    'PTYTest'
     )
 
     "Modified: / 18-11-2014 / 11:54:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"