Added tests for (UNIX) TTY / PTY attribute support.
--- 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>"