Adding tests for System.Console. Write (and WriteLine) are not exhautively tested.
[mono.git] / mcs / class / corlib / Test / System / ConsoleTest.cs
1 // ConsoleTest.cs - NUnit Test Cases for the System.Console class\r
2 //\r
3 // David Brandt (bucky@keystreams.com)\r
4 //\r
5 // (C) Ximian, Inc.  http://www.ximian.com\r
6 // \r
7 \r
8 using NUnit.Framework;\r
9 using System;\r
10 using System.IO;\r
11 \r
12 \r
13 namespace MonoTests.System\r
14 {\r
15 \r
16 public class ConsoleTest : TestCase\r
17 {\r
18         public ConsoleTest() : base ("MonoTests.System.ConsoleTest testsuite") {}\r
19         public ConsoleTest(string name) : base(name) {}\r
20 \r
21         protected override void SetUp() \r
22         {\r
23         }\r
24 \r
25         protected override void TearDown() \r
26         {\r
27         }\r
28 \r
29         public static ITest Suite {\r
30                 get { \r
31                         return new TestSuite(typeof(ConsoleTest)); \r
32                 }\r
33         }\r
34 \r
35         public void TestError() {\r
36                 AssertNotNull("No error", Console.Error);\r
37         }\r
38 \r
39         public void TestIn() {\r
40                 AssertNotNull("No in", Console.In);\r
41         }\r
42 \r
43         public void TestOut() {\r
44                 AssertNotNull("No out", Console.Out);\r
45         }\r
46 \r
47         public void TestOpenStandardError() {\r
48                 {\r
49                         Stream err = Console.OpenStandardError();\r
50                         AssertNotNull("Can't open error", err);\r
51                 }\r
52                 {\r
53                         Stream err = Console.OpenStandardError(512);\r
54                         AssertNotNull("Can't open error", err);\r
55                 }\r
56                 // Spec says these are here, MS implementation says no.\r
57                 //{\r
58                 //bool errorThrown = false;\r
59                 //try {\r
60                 //Stream err = Console.OpenStandardError(-1);\r
61                 //} catch (ArgumentOutOfRangeException) {\r
62                 //errorThrown = true;\r
63                 //}\r
64                 //Assert("negative buffer error not thrown", \r
65                 //errorThrown);\r
66                 //}\r
67                 //{\r
68                 //bool errorThrown = false;\r
69                 //try {\r
70                 //Stream err = Console.OpenStandardError(0);\r
71                 //} catch (ArgumentOutOfRangeException) {\r
72                 //errorThrown = true;\r
73                 //}\r
74                 //Assert("zero buffer error not thrown", errorThrown);\r
75                 //}\r
76         }\r
77 \r
78         public void TestOpenStandardInput() {\r
79                 {\r
80                         Stream in1 = Console.OpenStandardInput();\r
81                         AssertNotNull("Can't open input", in1);\r
82                 }\r
83                 {\r
84                         Stream in1 = Console.OpenStandardInput(512);\r
85                         AssertNotNull("Can't open input", in1);\r
86                 }\r
87                 // see commented-out tests in TestOpenStandardError\r
88         }\r
89         \r
90         public void TestOpenStandardOutput() {\r
91                 {\r
92                         Stream out1 = Console.OpenStandardOutput();\r
93                         AssertNotNull("Can't open output", out1);\r
94                 }\r
95                 {\r
96                         Stream out1 = Console.OpenStandardOutput(512);\r
97                         AssertNotNull("Can't open output", out1);\r
98                 }\r
99                 // see commented-out tests in TestOpenStandardError\r
100         }\r
101         \r
102         public void TestRead() {\r
103                 String testStr = "This is a readline test";\r
104                 Stream s = new MemoryStream();\r
105                 TextWriter w = new StreamWriter(s);\r
106                 ((StreamWriter)w).AutoFlush = true;\r
107                 TextReader r = new StreamReader(s);\r
108                 Console.SetIn(r);\r
109                 w.WriteLine(testStr);\r
110                 s.Position = 0;\r
111                 char val = (char) Console.Read();\r
112                 AssertEquals("Wrong read", 'T', val);\r
113         }\r
114 \r
115         public void TestReadLine() {\r
116                 String testStr = "This is a readline test";\r
117                 Stream s = new MemoryStream();\r
118                 TextWriter w = new StreamWriter(s);\r
119                 ((StreamWriter)w).AutoFlush = true;\r
120                 TextReader r = new StreamReader(s);\r
121                 Console.SetIn(r);\r
122                 w.WriteLine(testStr);\r
123                 s.Position = 0;\r
124                 String line = Console.ReadLine();\r
125                 AssertEquals("Wrong line", testStr, line);\r
126         }\r
127 \r
128         public void TestSetError() {\r
129                 {\r
130                         bool errorThrown = false;\r
131                         try {\r
132                                 Console.SetError(null);\r
133                         } catch (ArgumentNullException) {\r
134                                 errorThrown = true;\r
135                         }\r
136                         Assert("null error error not thrown", errorThrown);\r
137                 }\r
138                 {\r
139                         String testStr = "This is a stderr test";\r
140                         Stream s = new MemoryStream();\r
141                         TextWriter w = new StreamWriter(s);\r
142                         ((StreamWriter)w).AutoFlush = true;\r
143                         TextReader r = new StreamReader(s);\r
144                         Console.SetError(w);\r
145                         Console.Error.WriteLine(testStr);\r
146                         s.Position = 0;\r
147                         String line = r.ReadLine();\r
148                         AssertEquals("Wrong line", testStr, line);\r
149                 }\r
150         }\r
151 \r
152         public void TestSetIn() {\r
153                 {\r
154                         bool errorThrown = false;\r
155                         try {\r
156                                 Console.SetIn(null);\r
157                         } catch (ArgumentNullException) {\r
158                                 errorThrown = true;\r
159                         }\r
160                         Assert("null in error not thrown", errorThrown);\r
161                 }\r
162                 {\r
163                         String testStr = "This is a stdin test";\r
164                         Stream s = new MemoryStream();\r
165                         TextWriter w = new StreamWriter(s);\r
166                         ((StreamWriter)w).AutoFlush = true;\r
167                         TextReader r = new StreamReader(s);\r
168                         Console.SetIn(r);\r
169                         w.WriteLine(testStr);\r
170                         s.Position = 0;\r
171                         String line = Console.In.ReadLine();\r
172                         AssertEquals("Wrong line", testStr, line);\r
173                 }\r
174         }\r
175 \r
176         public void TestSetOut() {\r
177                 {\r
178                         bool errorThrown = false;\r
179                         try {\r
180                                 Console.SetOut(null);\r
181                         } catch (ArgumentNullException) {\r
182                                 errorThrown = true;\r
183                         }\r
184                         Assert("null out error not thrown", errorThrown);\r
185                 }\r
186                 {\r
187                         String testStr = "This is a stdout test";\r
188                         Stream s = new MemoryStream();\r
189                         TextWriter w = new StreamWriter(s);\r
190                         ((StreamWriter)w).AutoFlush = true;\r
191                         TextReader r = new StreamReader(s);\r
192                         Console.SetOut(w);\r
193                         Console.Out.WriteLine(testStr);\r
194                         s.Position = 0;\r
195                         String line = r.ReadLine();\r
196                         AssertEquals("Wrong line", testStr, line);\r
197                 }\r
198         }\r
199 \r
200         public void TestWrite() {\r
201                 Stream s = new MemoryStream();\r
202                 TextWriter w = new StreamWriter(s);\r
203                 ((StreamWriter)w).AutoFlush = true;\r
204                 TextReader r = new StreamReader(s);\r
205                 Console.SetOut(w);\r
206 \r
207                 long endPos = 0;\r
208 \r
209                 String testStr = "This is a stdout write test";\r
210                 Console.Write(testStr);\r
211                 s.Position = endPos;\r
212                 String line = r.ReadToEnd();\r
213                 AssertEquals("Wrong line", testStr, line);\r
214                 endPos = s.Position;\r
215 \r
216                 Boolean[] booleans = {true, false};\r
217                 foreach (bool b in booleans ) {\r
218                         Console.Write(b);\r
219                         s.Position = endPos;\r
220                         line = r.ReadToEnd();\r
221                         AssertEquals("Wrong boolean", b.ToString(), line);\r
222                         endPos = s.Position;\r
223                 }\r
224 \r
225                 Char[] chars = {'a', ';', '?'};\r
226                 foreach (Char c in chars ) {\r
227                         Console.Write(c);\r
228                         s.Position = endPos;\r
229                         line = r.ReadToEnd();\r
230                         AssertEquals("Wrong char", c.ToString(), line);\r
231                         endPos = s.Position;\r
232                 }\r
233 \r
234                 // TODO - Likewise for char[], decimal, double, int, long, object, single, uint32, uint64\r
235                 // TODO - write with format string\r
236         }\r
237 \r
238         public void TestWriteLine() {\r
239                 Stream s = new MemoryStream();\r
240                 TextWriter w = new StreamWriter(s);\r
241                 ((StreamWriter)w).AutoFlush = true;\r
242                 TextReader r = new StreamReader(s);\r
243                 Console.SetOut(w);\r
244 \r
245                 long endPos = 0;\r
246 \r
247                 String testStr = "This is a stdout writeline test";\r
248                 Console.WriteLine(testStr);\r
249                 s.Position = endPos;\r
250                 String line = r.ReadLine();\r
251                 AssertEquals("Wrong line", testStr, line);\r
252                 endPos = s.Position;\r
253 \r
254                 Boolean[] booleans = {true, false};\r
255                 foreach (bool b in booleans ) {\r
256                         Console.WriteLine(b);\r
257                         s.Position = endPos;\r
258                         line = r.ReadLine();\r
259                         AssertEquals("Wrong boolean", b.ToString(), line);\r
260                         endPos = s.Position;\r
261                 }\r
262 \r
263                 Char[] chars = {'a', ';', '?'};\r
264                 foreach (Char c in chars ) {\r
265                         Console.WriteLine(c);\r
266                         s.Position = endPos;\r
267                         line = r.ReadLine();\r
268                         AssertEquals("Wrong char", c.ToString(), line);\r
269                         endPos = s.Position;\r
270                 }\r
271 \r
272                 // TODO - Likewise for char[], decimal, double, int, long, object, single, uint32, uint64\r
273                 // TODO - write with format string\r
274         }\r
275 \r
276 }\r
277 }\r