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