[corlib] Use ManualResetEvent.WaitOne instead of Thread.Sleep to test Thread.Interrupt
[mono.git] / mcs / class / System / Test / System.Runtime.Versioning / FrameworkNameTest.cs
1 //
2 // System.Runtime.Versioning.FrameworkNameTest class
3 //
4 // Authors
5 //      Marek Habersack <mhabersack@novell.com>
6 //
7 // Copyright (C) 2009 Novell, Inc (http://novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 #if NET_4_0 && !MOBILE
30
31 using System;
32 using System.Runtime.Versioning;
33 using System.Text;
34
35 using NUnit.Framework;
36
37 namespace MonoTests.System.Runtime.Versioning
38 {
39         [TestFixture]
40         public class FrameworkNameTest
41         {
42                 void Throws<TEx> (string message, Action code)
43                 {
44                         bool failed = false;
45                         Exception exception = null;
46                         try {
47                                 code ();
48                                 failed = true;
49                         } catch (Exception ex) {
50                                 if (ex.GetType () != typeof (TEx)) {
51                                         failed = true;
52                                         exception = ex;
53                                 }
54                         }
55
56                         if (failed) {
57                                 if (exception != null)
58                                         Assert.Fail ("{0}{1}Expected exception {2}, got {3}",
59                                                         message, Environment.NewLine, typeof (TEx), exception.GetType ());
60                                 else
61                                         Assert.Fail ("{0}{1}Expected exception {2}",
62                                                 message, Environment.NewLine, typeof (TEx));
63                         }
64                 }
65                 
66                 [Test]
67                 public void Constructor_String ()
68                 {
69                         FrameworkName fn;
70
71                         Throws <ArgumentNullException> ("#A1", () => {
72                                         fn = new FrameworkName (null);
73                                 });
74
75                         Throws<ArgumentException> ("#A1-1", () => {
76                                         fn = new FrameworkName (String.Empty);
77                                 });
78
79                         Throws <ArgumentException> ("#A1-2", () => {
80                                         fn = new FrameworkName (".NETFramework");
81                                 });
82
83                         Throws <ArgumentException> ("#A1-3", () => {
84                                         fn = new FrameworkName (".NETFramework,Ver=test");
85                                 });
86
87                         Throws <ArgumentException> ("#A1-4", () => {
88                                         fn = new FrameworkName (".NETFramework,Version=A");
89                                 });
90
91                         Throws <ArgumentException> ("#A1-5", () => {
92                                         fn = new FrameworkName ("Version=1.2,.NETFramework");
93                                 });
94
95                         Throws <ArgumentException> ("#A1-6", () => {
96                                         fn = new FrameworkName (".NETFramework,Version=vA");
97                                 });
98
99                         Throws <ArgumentException> ("#A1-7", () => {
100                                         fn = new FrameworkName (".NETFramework,Version=A.B");
101                                 });
102
103                         Throws <ArgumentException> ("#A1-8", () => {
104                                         fn = new FrameworkName (".NETFramework,Version=vA.B");
105                                 });
106
107                         Throws <ArgumentException> ("#A1-9", () => {
108                                         fn = new FrameworkName (".NETFramework,Version=VA.B");
109                                 });
110
111                         Throws <ArgumentException> ("#A1-10", () => {
112                                         fn = new FrameworkName (".NETFramework,Version=vA.B.C");
113                                 });
114
115                         Throws <ArgumentException> ("#A1-11", () => {
116                                         fn = new FrameworkName (".NETFramework,Version=vA.B.C.D");
117                                 });
118
119                         Throws <ArgumentException> ("#A1-12", () => {
120                                         fn = new FrameworkName (".NETFramework,Version=2");
121                                 });
122
123                         Throws <ArgumentException> ("#A1-13", () => {
124                                         fn = new FrameworkName (".NETFramework,Version=v2");
125                                 });
126
127                         Throws <ArgumentException> ("#A1-14", () => {
128                                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.A");
129                                 });
130
131                         Throws <ArgumentException> ("#A1-15", () => {
132                                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.0,Some=value");
133                                 });
134
135                         Throws <ArgumentException> ("#A1-16", () => {
136                                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.0,Profile=profile name, Extra=value");
137                                 });
138
139                         Throws <ArgumentException> ("#A1-17", () => {
140                                         fn = new FrameworkName (".NETFramework,Profile=profile name");
141                                 });
142
143                         Throws <ArgumentException> ("#A1-18", () => {
144                                         fn = new FrameworkName ("Profile=profile name,.NETFramework,Version=v2.0.1.0");
145                                 });
146
147                         Throws <ArgumentException> ("#A1-19", () => {
148                                         var n = new FrameworkName (".NETFramework, ,Version=v2.0.1.0");
149                                 });
150
151                         Throws <ArgumentException> ("#A1-20", () => {
152                                         fn = new FrameworkName (".NETFramework,Version=v2..0.1.0");
153                                 });
154
155                         Throws <ArgumentException> ("#A1-21", () => {
156                                         fn = new FrameworkName (".NETFramework,Version=v.0.1.0");
157                                 });
158
159                         Throws <ArgumentException> ("#A1-22", () => {
160                                         fn = new FrameworkName (".NETFramework,Version=v1.-2.1.0");
161                                 });
162
163                         Throws <ArgumentException> ("#A1-23", () => {
164                                         fn = new FrameworkName (".NETFramework,Version=v0.0.0.0.0");
165                                 });
166
167                         Throws <ArgumentException> ("#A1-24", () => {
168                                         fn = new FrameworkName (".NETFramework,Version=vA.0.0.0,Version=v1.2.3.4");
169                                 });
170
171                         Throws <ArgumentException> ("#A1-25", () => {
172                                         fn = new FrameworkName (".NETFramework,Version=v0.0.0.0,Version=vA.2.3.4");
173                                 });
174
175                         Throws <ArgumentException> ("#A1-26", () => {
176                                         fn = new FrameworkName ("Version=1.2,profile=test profile");
177                                 });
178
179                         Throws<ArgumentException> ("#A1-27", () => {
180                                         fn = new FrameworkName (".NETFramework,Version=");
181                                 });
182
183                         fn = new FrameworkName (".NETFramework=test,Version=3.5");
184                         Assert.AreEqual (".NETFramework=test", fn.Identifier, "#A2-1");
185                         Assert.IsTrue (fn.Version == new Version (3, 5), "#A2-2");
186                         Assert.AreEqual (String.Empty, fn.Profile, "#A2-3");
187                         Assert.AreEqual (".NETFramework=test,Version=v3.5", fn.FullName, "#A3-4");
188                         
189                         fn = new FrameworkName (".NETFramework,Version=2.0");
190                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A3-1");
191                         Assert.IsTrue (fn.Version == new Version (2, 0), "#A3-2");
192                         Assert.AreEqual (String.Empty, fn.Profile, "#A3-3");
193                         Assert.AreEqual (".NETFramework,Version=v2.0", fn.FullName, "#A3-4");
194
195                         fn = new FrameworkName (".NETFramework,Version=v2.0");
196                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A4-1");
197                         Assert.IsTrue (fn.Version == new Version (2, 0), "#A4-2");
198                         Assert.AreEqual (String.Empty, fn.Profile, "#A4-3");
199                         Assert.AreEqual (".NETFramework,Version=v2.0", fn.FullName, "#A4-4");
200
201                         fn = new FrameworkName (".NETFramework,Version=v0.1");
202                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A5-1");
203                         Assert.IsTrue (fn.Version == new Version (0, 1), "#A5-2");
204                         Assert.AreEqual (String.Empty, fn.Profile, "#A5-3");
205                         Assert.AreEqual (".NETFramework,Version=v0.1", fn.FullName, "#A5-4");
206
207                         fn = new FrameworkName (".NETFramework,Version=v10.1");
208                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A6-1");
209                         Assert.IsTrue (fn.Version == new Version (10, 1), "#A6-2");
210                         Assert.AreEqual (String.Empty, fn.Profile, "#A6-3");
211                         Assert.AreEqual (".NETFramework,Version=v10.1", fn.FullName, "#A6-4");
212
213                         fn = new FrameworkName (".NETFramework,Version=V2.0");
214                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A7-1");
215                         Assert.IsTrue (fn.Version == new Version (2, 0), "#A7-2");
216                         Assert.AreEqual (String.Empty, fn.Profile, "#A7-3");
217                         Assert.AreEqual (".NETFramework,Version=v2.0", fn.FullName, "#A7-4");
218
219                         fn = new FrameworkName (".NETFramework,Version=v2.0.1");
220                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A8-1");
221                         Assert.IsTrue (fn.Version == new Version (2, 0, 1), "#A8-2");
222                         Assert.AreEqual (String.Empty, fn.Profile, "#A8-3");
223                         Assert.AreEqual (".NETFramework,Version=v2.0.1", fn.FullName, "#A8-4");
224
225                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.0");
226                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A9-1");
227                         Assert.IsTrue (fn.Version == new Version (2, 0, 1, 0), "#A9-2");
228                         Assert.AreEqual (String.Empty, fn.Profile, "#A9-3");
229                         Assert.AreEqual (".NETFramework,Version=v2.0.1.0", fn.FullName, "#A9-4");
230
231                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.0,Profile=profile name");
232                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A10-1");
233                         Assert.IsTrue (fn.Version == new Version (2, 0, 1, 0), "#A10-2");
234                         Assert.AreEqual ("profile name", fn.Profile, "#A10-3");
235                         Assert.AreEqual (".NETFramework,Version=v2.0.1.0,Profile=profile name", fn.FullName, "#A10-4");
236
237                         fn = new FrameworkName (".NETFramework,Version=v2. 0.1.0");
238                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A11-1");
239                         Assert.IsTrue (fn.Version == new Version (2, 0, 1, 0), "#A11-2");
240                         Assert.AreEqual (String.Empty, fn.Profile, "#A11-3");
241                         Assert.AreEqual (".NETFramework,Version=v2.0.1.0", fn.FullName, "#A11-4");
242
243                         fn = new FrameworkName (".NETFramework,Version=v0.0.0.0");
244                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A12-1");
245                         Assert.IsTrue (fn.Version == new Version (0, 0, 0, 0), "#A12-2");
246                         Assert.AreEqual (String.Empty, fn.Profile, "#A12-3");
247                         Assert.AreEqual (".NETFramework,Version=v0.0.0.0", fn.FullName, "#A12-4");
248
249                         fn = new FrameworkName (".NETFramework,Version=v0.0.0.0,Version=v1.2.3.4");
250                         Assert.AreEqual (".NETFramework", fn.Identifier, "#A13-1");
251                         Assert.IsTrue (fn.Version == new Version (1, 2, 3, 4), "#A13-2");
252                         Assert.AreEqual (String.Empty, fn.Profile, "#A13-3");
253                         Assert.AreEqual (".NETFramework,Version=v1.2.3.4", fn.FullName, "#A13-4");
254
255                         fn = new FrameworkName ("identifier,verSION=1.2,PRofiLE=test profile");
256                         Assert.AreEqual ("identifier", fn.Identifier, "#A14-1");
257                         Assert.IsTrue (fn.Version == new Version (1, 2), "#A14-2");
258                         Assert.AreEqual ("test profile", fn.Profile, "#A14-3");
259                         Assert.AreEqual ("identifier,Version=v1.2,Profile=test profile", fn.FullName, "#A14-4");
260
261                         fn = new FrameworkName ("identifier,Version=2.0,Profile=");
262                         Assert.AreEqual ("identifier", fn.Identifier, "#A15-1");
263                         Assert.IsTrue (fn.Version == new Version (2, 0), "#A15-2");
264                         Assert.AreEqual (String.Empty, fn.Profile, "#A15-3");
265                         Assert.AreEqual ("identifier,Version=v2.0", fn.FullName, "#A15-4");
266                 }
267
268                 [Test]
269                 public void Constructor_String_Version ()
270                 {
271                         FrameworkName fn;
272
273                         Throws <ArgumentNullException> ("#A1-1", () => {
274                                         fn = new FrameworkName (null, new Version (2, 0));
275                                 });
276
277                         Throws <ArgumentNullException> ("#A1-2", () => {
278                                         fn = new FrameworkName ("identifier", null);
279                                 });
280
281                         Throws <ArgumentException> ("#A1-3", () => {
282                                         fn = new FrameworkName (String.Empty, new Version (2, 0));
283                                 });
284
285                         var v = new Version (1,2,3,4);
286                         fn = new FrameworkName ("identifier", v);
287                         Assert.AreEqual ("identifier", fn.Identifier, "#A2-1");
288                         Assert.IsTrue (fn.Version == v, "#A2-2");
289                         Assert.AreEqual (String.Empty, fn.Profile, "#A2-3");
290                         Assert.AreEqual ("identifier,Version=v1.2.3.4", fn.FullName, "#A2-4");
291
292                         fn = new FrameworkName ("identifier,v2.0", v);
293                         Assert.AreEqual ("identifier,v2.0", fn.Identifier, "#A3-1");
294                         Assert.IsTrue (fn.Version == v, "#A3-2");
295                         Assert.AreEqual (String.Empty, fn.Profile, "#A3-3");
296                         Assert.AreEqual ("identifier,v2.0,Version=v1.2.3.4", fn.FullName, "#A3-4");
297
298                         fn = new FrameworkName ("identifier,Version=v2.0", v);
299                         Assert.AreEqual ("identifier,Version=v2.0", fn.Identifier, "#A4-1");
300                         Assert.IsTrue (fn.Version == v, "#A4-2");
301                         Assert.AreEqual (String.Empty, fn.Profile, "#A4-3");
302                         Assert.AreEqual ("identifier,Version=v2.0,Version=v1.2.3.4", fn.FullName, "#A4-4");
303                 }
304
305                 [Test]
306                 public void Constructor_String_Version_String ()
307                 {
308                         FrameworkName fn;
309                         var v = new Version (1, 2, 3, 4);
310
311                         Throws <ArgumentNullException> ("#A1-1", () => {
312                                         fn = new FrameworkName (null, new Version (2, 0), "profile");
313                                 });
314
315                         Throws <ArgumentNullException> ("#A1-2", () => {
316                                         fn = new FrameworkName ("identifier", null, "profile");
317                                 });
318
319                         Throws <ArgumentException> ("#A1-3", () => {
320                                         fn = new FrameworkName (String.Empty, new Version (2, 0), "profile");
321                                 });
322
323                         fn = new FrameworkName ("identifier,Version=v2.0", v, "Profile name");
324                         Assert.AreEqual ("identifier,Version=v2.0", fn.Identifier, "#A2-1");
325                         Assert.IsTrue (fn.Version == v, "#A2-2");
326                         Assert.AreEqual ("Profile name", fn.Profile, "#A2-3");
327                         Assert.AreEqual ("identifier,Version=v2.0,Version=v1.2.3.4,Profile=Profile name", fn.FullName, "#A2-4");
328
329                         fn = new FrameworkName ("identifier,v2.0,profile=test", v, "Profile name");
330                         Assert.AreEqual ("identifier,v2.0,profile=test", fn.Identifier, "#A3-1");
331                         Assert.IsTrue (fn.Version == v, "#A3-2");
332                         Assert.AreEqual ("Profile name", fn.Profile, "#A3-3");
333                         Assert.AreEqual ("identifier,v2.0,profile=test,Version=v1.2.3.4,Profile=Profile name", fn.FullName, "#A3-4");
334
335                         fn = new FrameworkName ("identifier,v2.0,profile=test", v, null);
336                         Assert.AreEqual ("identifier,v2.0,profile=test", fn.Identifier, "#A4-1");
337                         Assert.IsTrue (fn.Version == v, "#A4-2");
338                         Assert.AreEqual (String.Empty, fn.Profile, "#A4-3");
339                         Assert.AreEqual ("identifier,v2.0,profile=test,Version=v1.2.3.4", fn.FullName, "#A4-4");
340
341                         fn = new FrameworkName ("identifier,v2.0,profile=test", v, String.Empty);
342                         Assert.AreEqual ("identifier,v2.0,profile=test", fn.Identifier, "#A5-1");
343                         Assert.IsTrue (fn.Version == v, "#A5-2");
344                         Assert.AreEqual (String.Empty, fn.Profile, "#A5-3");
345                         Assert.AreEqual ("identifier,v2.0,profile=test,Version=v1.2.3.4", fn.FullName, "#A5-4");
346                 }
347
348                 [Test]
349                 public void EqualityOperator ()
350                 {
351                         var fn = new FrameworkName ("identifier,Version=v2.0");
352
353                         Assert.IsTrue (fn == new FrameworkName ("identifier,Version=v2.0"), "#A1");
354
355                         FrameworkName fn1 = null;
356                         FrameworkName fn2 = null;
357
358                         Assert.IsTrue (fn1 == fn2, "#A2");
359                         Assert.IsFalse (fn == new FrameworkName ("identifier,Version=v2.1"), "#A3");
360                         Assert.IsFalse (fn == null, "#A4");
361                 }
362
363                 [Test]
364                 public void InequalityOperator ()
365                 {
366                         var fn = new FrameworkName ("identifier,Version=v2.0");
367
368                         Assert.IsFalse (fn != new FrameworkName ("identifier,Version=v2.0"), "#A1");
369
370                         FrameworkName fn1 = null;
371                         FrameworkName fn2 = null;
372
373                         Assert.IsFalse (fn1 != fn2, "#A2");
374                         Assert.IsTrue (fn != new FrameworkName ("identifier,Version=v2.1"), "#A3");
375                         Assert.IsTrue (fn != null, "#A4");
376                 }
377
378                 [Test]
379                 public void ToStringTest ()
380                 {
381                         var fn = new FrameworkName (".NETFramework,Version=v2.0.1");
382                         Assert.AreEqual (".NETFramework,Version=v2.0.1", fn.FullName, "#A1-1");
383                         Assert.AreEqual (fn.FullName, fn.ToString (), "#A1-2");
384
385                         fn = new FrameworkName (".NETFramework,Version=v2.0.1.0");
386                         Assert.AreEqual (".NETFramework,Version=v2.0.1.0", fn.FullName, "#A2-1");
387                         Assert.AreEqual (fn.FullName, fn.ToString (), "#A2-2");
388                 }
389         }
390 }
391 #endif