...
1 package ritesting
2
3 import (
4 "bytes"
5 "io"
6 "os"
7 "testing"
8
9 "github.com/dsoprea/go-logging"
10 )
11
12 func TestRedirectTty(t *testing.T) {
13 if rtty != nil {
14 t.Fatalf("rtty global is not nil")
15 }
16
17 originalStdin := os.Stdin
18 originalStdout := os.Stdout
19 originalStderr := os.Stderr
20
21 RedirectTty()
22
23 if rtty == nil {
24 t.Fatalf("rtty is nil after redirect.")
25 }
26
27 if rtty.originalStdin != originalStdin {
28 t.Fatalf("Captured STDIN is not correct.")
29 } else if rtty.originalStdout != originalStdout {
30 t.Fatalf("Captured STDOUT is not correct.")
31 } else if rtty.originalStderr != originalStderr {
32 t.Fatalf("Captured STDERR is not correct.")
33 }
34
35
36
37 testStdinData := []byte("test input")
38
39 _, err := rtty.newStdinWriter.Write(testStdinData)
40 log.PanicIf(err)
41
42 testStdoutData := []byte("test stdout output")
43
44 _, err = os.Stdout.Write(testStdoutData)
45 log.PanicIf(err)
46
47 testStderrData := []byte("test stderr output")
48
49 _, err = os.Stderr.Write(testStderrData)
50 log.PanicIf(err)
51
52
53
54 stdinBuffer := make([]byte, len(testStdinData))
55 _, err = io.ReadFull(os.Stdin, stdinBuffer)
56 log.PanicIf(err)
57
58 if bytes.Equal(stdinBuffer, testStdinData) != true {
59 t.Fatalf("STDIN data not correct.")
60 }
61
62 stdoutBuffer := make([]byte, len(testStdoutData))
63 _, err = io.ReadFull(rtty.newStdoutReader, stdoutBuffer)
64 log.PanicIf(err)
65
66 if bytes.Equal(stdoutBuffer, testStdoutData) != true {
67 t.Fatalf("STDOUT data not correct.")
68 }
69
70 stderrBuffer := make([]byte, len(testStderrData))
71 _, err = io.ReadFull(rtty.newStderrReader, stderrBuffer)
72 log.PanicIf(err)
73
74 if bytes.Equal(stderrBuffer, testStderrData) != true {
75 t.Fatalf("STDERR data not correct.")
76 }
77
78 RestoreTty()
79
80 if os.Stdin != originalStdin {
81 t.Fatalf("Restored STDIN is not correct.")
82 } else if os.Stdout != originalStdout {
83 t.Fatalf("Restored STDOUT is not correct.")
84 } else if os.Stderr != originalStderr {
85 t.Fatalf("Restored STDERR is not correct.")
86 }
87 }
88
89 func TestRestoreTty(t *testing.T) {
90 if rtty != nil {
91 t.Fatalf("rtty global is not nil")
92 }
93
94 originalStdin := os.Stdin
95 originalStdout := os.Stdout
96 originalStderr := os.Stderr
97
98 RedirectTty()
99
100 if rtty == nil {
101 t.Fatalf("rtty is nil after redirect.")
102 }
103
104 if rtty.originalStdin != originalStdin {
105 t.Fatalf("Captured STDIN is not correct.")
106 } else if rtty.originalStdout != originalStdout {
107 t.Fatalf("Captured STDOUT is not correct.")
108 } else if rtty.originalStderr != originalStderr {
109 t.Fatalf("Captured STDERR is not correct.")
110 }
111
112 RestoreTty()
113
114 if os.Stdin != originalStdin {
115 t.Fatalf("Restored STDIN is not correct.")
116 } else if os.Stdout != originalStdout {
117 t.Fatalf("Restored STDOUT is not correct.")
118 } else if os.Stderr != originalStderr {
119 t.Fatalf("Restored STDERR is not correct.")
120 }
121 }
122
123 func TestRestoreAndDumpTty(t *testing.T) {
124 if rtty != nil {
125 t.Fatalf("rtty global is not nil")
126 }
127
128 originalStdin := os.Stdin
129 originalStdout := os.Stdout
130 originalStderr := os.Stderr
131
132 RedirectTty()
133
134 if rtty == nil {
135 t.Fatalf("rtty is nil after redirect.")
136 }
137
138 if rtty.originalStdin != originalStdin {
139 t.Fatalf("Captured STDIN is not correct.")
140 } else if rtty.originalStdout != originalStdout {
141 t.Fatalf("Captured STDOUT is not correct.")
142 } else if rtty.originalStderr != originalStderr {
143 t.Fatalf("Captured STDERR is not correct.")
144 }
145
146 RestoreAndDumpTty()
147
148 if os.Stdin != originalStdin {
149 t.Fatalf("Restored STDIN is not correct.")
150 } else if os.Stdout != originalStdout {
151 t.Fatalf("Restored STDOUT is not correct.")
152 } else if os.Stderr != originalStderr {
153 t.Fatalf("Restored STDERR is not correct.")
154 }
155 }
156
157 func TestStdinWriter(t *testing.T) {
158 RedirectTty()
159
160 defer RestoreTty()
161
162 if StdinWriter() != rtty.newStdinWriter {
163 t.Fatalf("Not correct resource.")
164 }
165 }
166
167 func TestStdoutReader(t *testing.T) {
168 RedirectTty()
169
170 defer RestoreTty()
171
172 if StdoutReader() != rtty.newStdoutReader {
173 t.Fatalf("Not correct resource.")
174 }
175 }
176
177 func TestStderrReader(t *testing.T) {
178 RedirectTty()
179
180 defer RestoreTty()
181
182 if StderrReader() != rtty.newStderrReader {
183 t.Fatalf("Not correct resource.")
184 }
185 }
186
187 func TestIsTtyRedirected(t *testing.T) {
188 if IsTtyRedirected() != false {
189 t.Fatalf("Incorrect initial state.")
190 }
191
192 RedirectTty()
193
194 if IsTtyRedirected() != true {
195 t.Fatalf("Incorrect redirected state.")
196 }
197
198 RestoreTty()
199
200 if IsTtyRedirected() != false {
201 t.Fatalf("Incorrect final state.")
202 }
203 }
204
View as plain text