Better error message.
[mono.git] / mcs / class / corlib / Test / System / EnvironmentTest.cs
1 //
2 // EnvironmentTest.cs - NUnit Test Cases for Environment
3 //
4 // Author:
5 //      Sebastien Pouliot <sebastien@ximian.com>
6 //
7 // (C) 2004-2005 Novell (http://www.novell.com)
8 //
9
10 using System;
11 using System.Collections;
12
13 using NUnit.Framework;
14
15 namespace MonoTests.System
16 {
17         [TestFixture]
18         public class EnvironmentTest
19         {
20                 private void ExpandEquals (string toExpand, string toMatch) 
21                 {
22                         string expanded = Environment.ExpandEnvironmentVariables (toExpand);
23                         Assert.AreEqual (toMatch, expanded, "ExpandEnvironmentVariables(" + toExpand + ").Match");
24                 }
25
26                 private void ExpandStartsEnds (string toExpand, string start, string end) 
27                 {
28                         string expanded = Environment.ExpandEnvironmentVariables (toExpand);
29                         Assert.IsTrue (expanded.StartsWith (start), "ExpandEnvironmentVariables(" + toExpand + ").Start");
30                         Assert.IsTrue (expanded.EndsWith (end), "ExpandEnvironmentVariables(" + toExpand + ").End");
31                 }
32
33                 private void ExpandDifferent (string toExpand)
34                 {
35                         string expanded = Environment.ExpandEnvironmentVariables (toExpand);
36                         Assert.IsFalse ((toExpand == expanded), "ExpandEnvironmentVariables(" + toExpand + ").Different");
37                 }
38
39                 [Test]
40                 public void ExpandEnvironmentVariables_UnknownVariable () 
41                 {
42                         ExpandEquals ("Hello %UNKNOWN_ENV_VAR% :-)", "Hello %UNKNOWN_ENV_VAR% :-)");
43                 }
44
45                 [Test]
46                 public void ExpandEnvironmentVariables_KnownVariable () 
47                 {
48                         ExpandStartsEnds ("Path %PATH% :-)", "Path ", " :-)");
49                 }
50
51                 [Test]
52                 public void ExpandEnvironmentVariables_NotVariable () 
53                 {
54                         ExpandEquals ("100% :-)", "100% :-)");
55                 }
56                 
57                 [Test]
58                 public void ExpandEnvironmentVariables_Alone () 
59                 {
60                         ExpandDifferent ("%PATH%");
61                 }
62
63                 [Test]
64                 public void ExpandEnvironmentVariables_End () 
65                 {
66                         ExpandStartsEnds ("Hello %PATH%", "Hello ", "");
67                 }
68
69                 [Test]
70                 public void ExpandEnvironmentVariables_None () 
71                 {
72                         ExpandEquals ("Hello Mono", "Hello Mono");
73                 }
74
75                 [Test]
76                 public void ExpandEnvironmentVariables_EmptyVariable () 
77                 {
78                         ExpandEquals ("Hello %% Mono", "Hello %% Mono");
79                 }
80
81                 [Test]
82                 public void ExpandEnvironmentVariables_Double () 
83                 {
84                         ExpandDifferent ("%PATH%%PATH%");
85                         string path = Environment.GetEnvironmentVariable ("PATH");
86                         if (path != null) {
87                                 string expanded = Environment.ExpandEnvironmentVariables ("%PATH%%PATH%");
88                                 Assert.AreEqual (path + path, expanded, "#01");
89                         }
90                 }
91                 
92                 [Test]
93                 public void ExpandEnvironmentVariables_ComplexExpandable () 
94                 {
95                         ExpandStartsEnds ("Hello %%%PATH%%%", "Hello %%", "%%");
96                 }
97
98                 [Test]
99                 public void ExpandEnvironmentVariables_ExpandableAndNonExpandable () 
100                 {
101                         string path = Environment.GetEnvironmentVariable ("PATH");
102                         string expanded=Environment.ExpandEnvironmentVariables("%PATH% PATH%");
103                         Assert.AreEqual (path + " PATH%", expanded);
104                 }
105
106
107                 [Test]
108                 public void ExpandEnvironmentVariables_ExpandableWithTrailingPercent () 
109                 {
110                         string path = Environment.GetEnvironmentVariable ("PATH");
111                         string expanded=Environment.ExpandEnvironmentVariables("%PATH% %");
112                         Assert.AreEqual (path+" %",expanded);
113                 }
114                 
115                 [Test]
116                 public void ExpandEnvironmentVariables_ComplexExpandable2 () 
117                 {
118                         ExpandStartsEnds ("Hello %%PATH%%%", "Hello %", "%%");
119                 }
120
121                 [Test]
122                 public void GetEnvironmentVariables ()
123                 {
124                         IDictionary d = Environment.GetEnvironmentVariables ();
125                         Assert.IsTrue ((d is Hashtable), "Hashtable");
126                         Assert.IsFalse (d.IsFixedSize, "IsFixedSize");
127                         Assert.IsFalse (d.IsReadOnly, "IsReadOnly");
128                         Assert.IsFalse (d.IsSynchronized, "IsSynchronized");
129                 }
130
131 #if NET_2_0 && !TARGET_JVM
132                 [Test] // bug #333740
133                 [Category ("NotWorking")]
134                 public void GetEnvironmentVariables_NewlySet ()
135                 {
136                         Environment.SetEnvironmentVariable ("MonoTestVariable", "TestValue");
137                         IDictionary d = Environment.GetEnvironmentVariables ();
138                         Assert.AreEqual ("TestValue", d ["MonoTestVariable"], "#1");
139                         Environment.SetEnvironmentVariable ("MonoTestVariable", string.Empty);
140                         Assert.AreEqual ("TestValue", d ["MonoTestVariable"], "#2");
141                         d = Environment.GetEnvironmentVariables ();
142                         Assert.IsNull (d ["MonoTestVariable"], "#3");
143                 }
144 #endif
145
146                 [Test]
147                 public void GetCommandLineArgs ()
148                 {
149                         string[] args = Environment.GetCommandLineArgs ();
150                         Assert.IsNotNull (args, "not null");
151                         Assert.IsTrue (((args.Length > 0) && (args.Length < 256)), "reasonable");
152                         Assert.IsNotNull (args [0], "application");
153                 }
154
155 #if NET_2_0
156                 [Test]
157                 [ExpectedException (typeof (ArgumentException))]
158                 public void GetEnvironmentVariable_Target_Invalid ()
159                 {
160                         Environment.GetEnvironmentVariable ("MONO", (EnvironmentVariableTarget)Int32.MinValue);
161                 }
162
163                 [Test]
164                 [ExpectedException (typeof (ArgumentException))]
165                 public void GetEnvironmentVariables_Target_Invalid ()
166                 {
167                         Environment.GetEnvironmentVariables ((EnvironmentVariableTarget)Int32.MinValue);
168                 }
169
170 #if !TARGET_JVM // Environment.SetEnvironmentVariable not supported under TARGET_JVM
171                 [Test]
172                 [ExpectedException (typeof (ArgumentException))]
173                 public void SetEnvironmentVariable_Target_Invalid ()
174                 {
175                         Environment.SetEnvironmentVariable ("MONO", "GO", (EnvironmentVariableTarget)Int32.MinValue);
176                 }
177
178                 [Test]
179                 [ExpectedException (typeof (ArgumentNullException))]
180                 public void SetEnvironmentVariable_Name_Null ()
181                 {
182                         Environment.SetEnvironmentVariable (null, "A");
183                 }
184
185                 [Test]
186                 [ExpectedException (typeof (ArgumentException))]
187                 public void SetEnvironmentVariable_Name_Empty ()
188                 {
189                         Environment.SetEnvironmentVariable ("", "A");
190                 }
191
192                 [Test]
193                 [ExpectedException (typeof (ArgumentException))]
194                 public void SetEnvironmentVariable_Name_ZeroChar ()
195                 {
196                         Environment.SetEnvironmentVariable ("\0", "A");
197                 }
198
199                 [Test]
200                 public void SetEnvironmentVariable ()
201                 {
202                         // Test set
203                         Environment.SetEnvironmentVariable ("A1", "B1");
204                         Environment.SetEnvironmentVariable ("A2", "B2");
205                         Environment.SetEnvironmentVariable ("A3", "B3");
206                         Assert.AreEqual (Environment.GetEnvironmentVariable ("A1"), "B1");
207                         Assert.AreEqual (Environment.GetEnvironmentVariable ("A2"), "B2");
208                         Assert.AreEqual (Environment.GetEnvironmentVariable ("A3"), "B3");
209
210                         // Test update
211                         Environment.SetEnvironmentVariable ("A3", "B4");
212                         Assert.AreEqual (Environment.GetEnvironmentVariable ("A3"), "B4");
213
214                         // Test delete
215                         Environment.SetEnvironmentVariable ("A1", null);
216                         Assert.IsNull (Environment.GetEnvironmentVariables ()["A1"]);
217                         Environment.SetEnvironmentVariable ("A2", "");
218                         Assert.IsNull (Environment.GetEnvironmentVariables ()["A2"]);
219                         Environment.SetEnvironmentVariable ("A3", "\0");
220                         Assert.IsNull (Environment.GetEnvironmentVariables ()["A3"]);
221                 }
222 #endif // TARGET_JVM
223 #endif
224         }
225 }