2 // VersionTest.cs - NUnit Test Cases for the System.Version class
5 // Duco Fijma (duco@lorentz.xs4all.nl)
6 // Sebastien Pouliot <sebastien@ximian.com>
9 // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
14 using NUnit.Framework;
16 namespace MonoTests.System
19 public class VersionTest
22 public void TestCtors ()
24 Version v1 = new Version ();
25 Assert.AreEqual (0, v1.Major, "#A1");
26 Assert.AreEqual (0, v1.Minor, "#A2");
27 Assert.AreEqual (-1, v1.Build, "#A3");
28 Assert.AreEqual (-1, v1.Revision, "#A4");
30 v1 = new Version (23, 7);
31 Assert.AreEqual (23, v1.Major, "#B1");
32 Assert.AreEqual (7, v1.Minor, "#B2");
33 Assert.AreEqual (-1, v1.Build, "#B3");
34 Assert.AreEqual (-1, v1.Revision, "#B4");
36 v1 = new Version (23, 7, 99);
37 Assert.AreEqual (23, v1.Major, "#C1");
38 Assert.AreEqual (7, v1.Minor, "#C2");
39 Assert.AreEqual (99, v1.Build, "#C3");
40 Assert.AreEqual (-1, v1.Revision, "#C4");
42 v1 = new Version (23, 7, 99, 42);
43 Assert.AreEqual (23, v1.Major, "#D1");
44 Assert.AreEqual (7, v1.Minor, "#D2");
45 Assert.AreEqual (99, v1.Build, "#D3");
46 Assert.AreEqual (42, v1.Revision, "#D4");
49 v1 = new Version (23, -1);
51 } catch (ArgumentOutOfRangeException) {
55 v1 = new Version (23, 7, -1);
57 } catch (ArgumentOutOfRangeException) {
61 v1 = new Version (23, 7, 99, -1);
63 } catch (ArgumentOutOfRangeException) {
68 public void TestStringCtor ()
70 Version v1 = new Version ("1.42");
71 Assert.AreEqual (1, v1.Major, "#A1");
72 Assert.AreEqual (42, v1.Minor, "#A2");
73 Assert.AreEqual (-1, v1.Build, "#A3");
74 Assert.AreEqual (-1, v1.Revision, "#A4");
76 v1 = new Version ("1.42.79");
77 Assert.AreEqual (1, v1.Major, "#B1");
78 Assert.AreEqual (42, v1.Minor, "#B2");
79 Assert.AreEqual (79, v1.Build, "#B3");
80 Assert.AreEqual (-1, v1.Revision, "#B4");
82 v1 = new Version ("1.42.79.66");
83 Assert.AreEqual (1, v1.Major, "#C1");
84 Assert.AreEqual (42, v1.Minor, "#C2");
85 Assert.AreEqual (79, v1.Build, "#C3");
86 Assert.AreEqual (66, v1.Revision, "#C4");
89 v1 = new Version ("1.42.-79");
91 } catch (ArgumentOutOfRangeException) {
95 v1 = new Version ("1");
97 } catch (ArgumentException) {
101 v1 = new Version ("1.2.3.4.5");
103 } catch (ArgumentException) {
107 v1 = new Version ((string) null);
109 } catch (ArgumentNullException) {
114 public void TestClone ()
116 Version v1 = new Version (1, 2, 3, 4);
117 Version v2 = (Version) v1.Clone ();
119 Assert.IsTrue (v1.Equals (v2), "#A1");
120 Assert.IsFalse (object.ReferenceEquals (v1, v2), "#A2");
122 Version v3 = new Version (); // 0.0
123 v2 = (Version) v3.Clone ();
125 Assert.IsTrue (v3.Equals (v2), "#B1");
126 Assert.IsFalse (object.ReferenceEquals (v3, v2), "#B2");
130 public void TestCompareTo ()
132 Assert.AreEqual (1, new Version (1, 2).CompareTo (new Version (1, 1)), "#A1");
133 Assert.AreEqual (-1, new Version (1, 2, 3).CompareTo (new Version (2, 2, 3)), "#A2");
134 Assert.AreEqual (1, new Version (1, 2, 3, 4).CompareTo (new Version (1, 2, 2, 1)), "#A3");
135 Assert.AreEqual (1, new Version (1, 3).CompareTo (new Version (1, 2, 2, 1)), "#A4");
136 Assert.AreEqual (-1, new Version (1, 2, 2).CompareTo (new Version (1, 2, 2, 1)), "#A5");
137 Assert.AreEqual (0, new Version (1, 2).CompareTo (new Version (1, 2)), "#A6");
138 Assert.AreEqual (0, new Version (1, 2, 3).CompareTo (new Version (1, 2, 3)), "#A7");
139 Assert.IsTrue (new Version (1, 1) < new Version (1, 2), "#A8");
140 Assert.IsTrue (new Version (1, 2) <= new Version (1, 2), "#A9");
141 Assert.IsTrue (new Version (1, 2) <= new Version (1, 3), "#A10");
142 Assert.IsTrue (new Version (1, 2) >= new Version (1, 2), "#A11");
143 Assert.IsTrue (new Version (1, 3) >= new Version (1, 2), "#A12");
144 Assert.IsTrue (new Version (1, 3) > new Version (1, 2), "#A13");
146 Version v1 = new Version(1, 2);
149 Assert.AreEqual (1, v1.CompareTo (null), "#B");
152 v1.CompareTo ("A string is not a version");
154 } catch (ArgumentException) {
159 public void TestEquals ()
161 Version v1 = new Version (1, 2);
162 Version v2 = new Version (1, 2, 3, 4);
163 Version v3 = new Version (1, 2, 3, 4);
165 Assert.IsTrue (v2.Equals (v3), "#A1");
166 Assert.IsTrue (v2.Equals (v2), "#A2");
167 Assert.IsFalse (v1.Equals (v3), "#A3");
169 Assert.IsTrue (v2 == v3, "#B1");
170 #pragma warning disable 1718
171 Assert.IsTrue (v2 == v2, "#B2");
172 #pragma warning restore 1718
173 Assert.IsFalse (v1 == v3, "#B3");
175 Assert.IsFalse (v2.Equals ((Version) null), "#C1");
176 Assert.IsFalse (v2.Equals ("A string"), "#C2");
180 public void TestToString ()
182 Version v1 = new Version (1,2);
183 Version v2 = new Version (1,2,3);
184 Version v3 = new Version (1,2,3,4);
186 Assert.AreEqual ("1.2", v1.ToString (), "#A1");
187 Assert.AreEqual ("1.2.3", v2.ToString (), "#A2");
188 Assert.AreEqual ("1.2.3.4", v3.ToString (), "#A3");
189 Assert.AreEqual (string.Empty, v3.ToString (0), "#A4");
190 Assert.AreEqual ("1", v3.ToString (1), "#A5");
191 Assert.AreEqual ("1.2", v3.ToString (2), "#A6");
192 Assert.AreEqual ("1.2.3", v3.ToString (3), "#A7");
193 Assert.AreEqual ("1.2.3.4", v3.ToString (4), "#A8");
198 } catch (ArgumentException) {
204 } catch (ArgumentException) {
209 public void HashCode ()
211 Version v1 = new Version ("1.2.3.4");
212 Version v2 = new Version (1, 2, 3, 4);
213 Assert.AreEqual (v1.GetHashCode (), v2.GetHashCode (), "HashCode");
216 public void MajorMinorRevisions ()
218 Version v = new Version ();
219 Assert.AreEqual (-1, v.MajorRevision, "MajorRevision/Empty");
220 Assert.AreEqual (-1, v.MinorRevision, "MinorRevision/Empty");
221 v = new Version ("1.2.3.4");
222 Assert.AreEqual (0, v.MajorRevision, "MajorRevision/string");
223 Assert.AreEqual (4, v.MinorRevision, "MinorRevision/string");
224 v = new Version (1, 2);
225 Assert.AreEqual (-1, v.MajorRevision, "MajorRevision/int,int");
226 Assert.AreEqual (-1, v.MinorRevision, "MinorRevision/int,int");
227 v = new Version (10, 20, 30);
228 Assert.AreEqual (-1, v.MajorRevision, "MajorRevision/int,int,int");
229 Assert.AreEqual (-1, v.MinorRevision, "MinorRevision/int,int,int");
230 v = new Version (100, 200, 300, 400);
231 Assert.AreEqual (0, v.MajorRevision, "MajorRevision/int,int,int,int");
232 Assert.AreEqual (400, v.MinorRevision, "MinorRevision/int,int,int,int");
233 v = new Version (100, 200, 300, (256 << 16) | 384);
234 Assert.AreEqual (256, v.MajorRevision, "MajorRevision/int,int,int,bint");
235 Assert.AreEqual (384, v.MinorRevision, "MinorRevision/int,int,int,bint");
239 public void CompareTo ()
241 Version v1234 = new Version (1, 2, 3, 4);
242 Version vnull = null;
243 Assert.AreEqual (1, v1234.CompareTo (vnull), "1234-null");
244 Version v2234 = new Version (2, 2, 3, 4);
245 Assert.AreEqual (1, v2234.CompareTo (v1234), "2234-1234");
246 Version v1224 = new Version (1, 2, 2, 4);
247 Assert.AreEqual (-1, v1224.CompareTo (v1234), "1224-1234");
248 Version v1235 = new Version (1, 2, 3, 5);
249 Assert.AreEqual (1, v1235.CompareTo (v1234), "1235-1234");
255 Assert.AreEqual (new Version (1, 7), Version.Parse ("1.7"), "#A1");
256 Assert.AreEqual (new Version (1, 7, 3), Version.Parse ("1.7.3"), "#A2");
257 Assert.AreEqual (new Version (1, 7, 3, 4001), Version.Parse ("1.7.3.4001"), "#A3");
258 Assert.AreEqual (new Version (2, 9), Version.Parse (" 2.9 "), "#A4");
259 Assert.AreEqual (new Version (2, 9, 3), Version.Parse ("2. 9. 3"), "#A5");
262 Version.Parse (null);
263 Assert.Fail ("#EXC1");
264 } catch (ArgumentNullException) {
269 Assert.Fail ("#EXC2");
270 } catch (ArgumentException) {
274 Version.Parse ("1.4.7.8.9");
275 Assert.Fail ("#EXC3");
276 } catch (ArgumentException) {
280 Version.Parse ("1.2.a.7");
281 Assert.Fail ("#EXC4");
282 } catch (FormatException) {
286 Version.Parse ("1.2.");
287 Assert.Fail ("#EXC5");
288 } catch (FormatException) {
292 Version.Parse ("1.2.0." + ((long)Int32.MaxValue + 1).ToString ());
293 Assert.Fail ("#EXC6");
294 } catch (OverflowException) {
298 Version.Parse ("1.3.-6.0");
299 Assert.Fail ("#EXC7");
300 } catch (ArgumentOutOfRangeException) {
305 public void TryParse ()
310 success = Version.TryParse ("1.7", out result);
311 Assert.AreEqual (new Version (1, 7), result, "#A1");
312 Assert.AreEqual (true, success, "#A2");
314 success = Version.TryParse ("1.7.3", out result);
315 Assert.AreEqual (new Version (1, 7, 3), result, "#B1");
316 Assert.AreEqual (true, success, "#B2");
318 success = Version.TryParse ("1.7.0.4001", out result);
319 Assert.AreEqual (new Version (1, 7, 0, 4001), result, "#C1");
320 Assert.AreEqual (true, success, "#C2");
322 success = Version.TryParse (" 2.9 ", out result);
323 Assert.AreEqual (new Version (2, 9), result, "#D1");
324 Assert.AreEqual (true, success, "#D2");
326 success = Version.TryParse ("2. 9. 3", out result);
327 Assert.AreEqual (new Version (2, 9, 3), result, "#E1");
328 Assert.AreEqual (true, success, "#E2");
333 success = Version.TryParse (null, out result);
334 Assert.AreEqual (null, result, "#F1");
335 Assert.AreEqual (false, success, "#F2");
337 success = Version.TryParse ("1", out result);
338 Assert.AreEqual (null, result, "#G1");
339 Assert.AreEqual (false, success, "#G2");
341 success = Version.TryParse ("1.4.7.8.9", out result);
342 Assert.AreEqual (null, result, "#H1");
343 Assert.AreEqual (false, success, "#H2");
345 success = Version.TryParse ("1.2.a.7", out result);
346 Assert.AreEqual (null, result, "#I1");
347 Assert.AreEqual (false, success, "#I2");
349 success = Version.TryParse ("1.2.", out result);
350 Assert.AreEqual (null, result, "#J1");
351 Assert.AreEqual (false, success, "#J2");
353 success = Version.TryParse ("1.2.0." + ((long)Int32.MaxValue + 1).ToString (), out result);
354 Assert.AreEqual (null, result, "#K1");
355 Assert.AreEqual (false, success, "#K2");
357 success = Version.TryParse ("1.-6", out result);
358 Assert.AreEqual (null, result, "#L1");
359 Assert.AreEqual (false, success, "#L2");