-
Notifications
You must be signed in to change notification settings - Fork 0
244 lines (189 loc) · 7.89 KB
/
test-stdio.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# NOTICE: This test uses windows CMD.EXE and (almost no) PowerShell.
#
# With PowerShell "Core", a cross-platform focus got them away from UTF-16
# redirection plus a Byte-Order-Mark to actually using UTF-8 with no BOM.
# Yet even as the Linux version supports plain LF in files, the Windows version
# uses CR LF in redirects.
#
# The tides of logic pushed them to forced acceptance of UTF-8 with no BOM.
# While it may be slower, those tides will hopefully lead to providing an
# *option* to not inject CR LF into redirects (which corrupts binary data)...
# then that option will also become the default.
#
# Until then...
name: Test Stdio and Redirection
on:
push:
branches: [
main
]
pull_request:
branches: [
main
]
workflow_dispatch: # Allows running this workflow manually from Actions tab
jobs:
test-stdio:
# Define release and debug builds on the main desktop platforms.
#
# (Rather than use the automatic-matrix'ing, we go ahead and list them
# manually, because that makes it easier to tweak specifics if desired.)
#
strategy:
matrix:
include: # put in order of visibility importance (shown in UI)
- os: macos-latest
checked: false
- os: windows-latest
checked: false
- os: ubuntu-latest
checked: false
- os: macos-latest
checked: true
- os: windows-latest
checked: true
- os: ubuntu-latest
checked: true
# https://github.com/actions/virtual-environments#available-environments
#
runs-on: ${{ matrix.os }}
steps:
#====# CHECKOUT STEPS #=====================================================#
# GitHub CI checkout on Windows auto translates LF to CR/LF in files:
#
# https://github.com/actions/checkout/issues/135
#
# However, Ren-C is taking the long view on this and prohibiting CR/LF in
# source by default.
#
# https://forum.rebol.info/t/newlina-non-grata/1207
# https://forum.rebol.info/t/1264
#
- name: Disable LF to CRLF Auto Translation In Git
if: matrix.os == 'windows-latest'
run: |
git config --global core.autocrlf false
git config --global core.eol lf
# https://github.com/actions/checkout
#
- uses: actions/checkout@v3
#====# INSTALL R3 INTERPRETER #=============================================#
- name: Download and Cache the Interpreter
uses: metaeducation/ren-c-action@release
with:
checked: ${{ matrix.checked }}
#====# NORMAL OUTPUT REDIRECTION #==========================================#
- name: (UNIX) Simple PRINT Output Redirect
if: matrix.os != 'windows-latest'
run: |
r3 --do "print {Hello} print {World}" > hello.txt
r3 tests/filecompare.r hello.txt tests/hello.out
- name: (CMD.EXE) Simple PRINT Output Redirect
if: matrix.os == 'windows-latest'
shell: cmd
run: |
r3 --do "print {Hello} print {World}" > hello.txt
r3 tests/filecompare.r hello.txt tests/hello.out
- name: (Powershell) Simple PRINT Output Redirect
if: false # !!! PowerShell corrupts output (LF -> CR LF) on Windows
shell: cmd
run: |
r3 --do "print {Hello} print {World}" > hello.txt
r3 tests/filecompare.r hello.txt tests/hello.out
#====# NULL OUTPUT REDIRECTION #============================================#
- name: (UNIX) Redirect PRINT to /dev/null
if: matrix.os != 'windows-latest'
run: |
r3 --do "print {Hello} print {World}" > /dev/null
- name: (CMD.EXE) Redirect PRINT to NUL
if: matrix.os == 'windows-latest'
shell: cmd
run: |
r3 --do "print {Hello} print {World}" > NUL
- name: (PowerShell) Redirect PRINT to $NULL
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
r3 --do "print {Hello} print {World}" > $NULL
#====# NORMAL READ-LINE REDIRECTION (READ-LINE -> TEXT!) #==================#
- name: (UNIX) Simple Input Redirect to "tac" implementation
if: matrix.os != 'windows-latest'
run: |
r3 tests/tac.r < tests/hello.in > hello-tac-unix.txt
r3 tests/filecompare.r hello-tac-unix.txt tests/hello-tac.out
- name: (PowerShell) Simple Input Redirect to "tac" on Windows
if: false # !!! PowerShell corrupts output (LF -> CR LF) on Windows
shell: pwsh
run: |
Get-Content tests/hello.in | r3 tests/tac.r > hello-tac.txt
r3 tests/filecompare.r hello-tac.txt tests/hello-tac.out
- name: (CMD.EXE) Simple Input Redirect to "tac" on Windows
if: matrix.os == 'windows-latest'
shell: cmd # Note: PowerShell is default
run: |
r3 tests/tac.r < tests/hello.in > hello-tac-cmd.txt
r3 tests/filecompare.r hello-tac-cmd.txt tests/hello-tac.out
#====# NULL READ-LINE REDIRECTION #=========================================#
- name: (UNIX) Try redirecting /dev/null as input
if: matrix.os != 'windows-latest' # Windows does not have /dev/null
run: |
r3 tests/tac.r < /dev/null > tac-dev-null-in-unix.txt
r3 tests/filecompare.r tac-dev-null-in-unix.txt tests/empty-file.out
# !!! PowerShell does not have a `<` operator to feed input leftwards, you
# put the input on the left and pipe it rightwards with `|`. Doing that
# and substituting $NULL gives a different behavior from `< NUL` in CMD.EXE
# which is an error raised: "The pipe has been ended."
#
# Test disabled until more information is gathered about what response this
# should have.
#
- name: (PowerShell) Try redirecting $NULL as input
if: false # !!! commented out
shell: pwsh
run: |
$NULL | r3 tests/tac.r > tac-dev-null-in-win.txt
r3 tests/filecompare.r tac-dev-null-in-win.txt tests/empty-file.out
- name: (CMD.EXE) Try redirecting NUL as input
if: matrix.os == 'windows-latest'
shell: cmd
run: |
r3 tests/tac.r < NUL > tac-dev-null-in-cmd.txt
r3 tests/filecompare.r tac-dev-null-in-cmd.txt tests/empty-file.out
#====# NORMAL READ-CHAR REDIRECTION (READ-CHAR -> ISSUE!) #=================#
- name: (UNIX) Character-Based Reversal
if: matrix.os != 'windows-latest'
run: |
r3 tests/revchars.r < tests/hello.in > hello-revchars-unix.txt
r3 tests/filecompare.r hello-revchars-unix.txt tests/hello-revchars.out
- name: (PowerShell) Character-Based Reversal
if: false # !!! PowerShell corrupts output (LF -> CR LF) on Windows
shell: pwsh
run: |
Get-Content tests/hello.in | r3 tests/revchars.r > hello-revchars.txt
r3 tests/filecompare.r hello-revchars.txt tests/hello-revchars.out
- name: (CMD.EXE) Character-Based Reversal
if: matrix.os == 'windows-latest'
shell: cmd
run: |
r3 tests/revchars.r < tests/hello.in > hello-revchars-cmd.txt
r3 tests/filecompare.r hello-revchars-cmd.txt tests/hello-revchars.out
#====# NULL READ-CHAR REDIRECTION #=========================================#
- name: (UNIX) Try redirecting /dev/null as input
if: matrix.os != 'windows-latest' # Windows does not have /dev/null
run: |
r3 tests/revchars.r < /dev/null > revchars-dev-null-in-unix.txt
r3 tests/filecompare.r revchars-dev-null-in-unix.txt tests/empty-file.out
# !!! See notes above on Powershell and $NULL input
#
- name: (PowerShell) Try redirecting $NULL as input
if: false # !!! commented out
shell: pwsh
run: |
$NULL | r3 tests/revchars.r > revchars-dev-null-in-win.txt
r3 tests/filecompare.r revchars-dev-null-in-win.txt tests/empty-file.out
- name: (CMD.EXE) Try redirecting NUL as input
if: matrix.os == 'windows-latest'
shell: cmd
run: |
r3 tests/revchars.r < NUL > revchars-dev-null-in-cmd.txt
r3 tests/filecompare.r revchars-dev-null-in-cmd.txt tests/empty-file.out