1 // 2 // VersionTest.cs - NUnit Test Cases for the System.Version class 3 // 4 // Authors: 5 // Duco Fijma (duco@lorentz.xs4all.nl) 6 // Sebastien Pouliot <sebastien@ximian.com> 7 // 8 // (C) 2002 Duco Fijma 9 // Copyright (C) 2006 Novell, Inc (http://www.novell.com) 10 // 11 12 using System; 13 14 using NUnit.Framework; 15 16 namespace MonoTests.System 17 { 18 [TestFixture] 19 public class VersionTest 20 { 21 [Test] TestCtors()22 public void TestCtors () 23 { 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"); 29 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"); 35 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"); 41 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"); 47 48 try { 49 v1 = new Version (23, -1); 50 Assert.Fail ("#E"); 51 } catch (ArgumentOutOfRangeException) { 52 } 53 54 try { 55 v1 = new Version (23, 7, -1); 56 Assert.Fail ("#F"); 57 } catch (ArgumentOutOfRangeException) { 58 } 59 60 try { 61 v1 = new Version (23, 7, 99, -1); 62 Assert.Fail ("#G"); 63 } catch (ArgumentOutOfRangeException) { 64 } 65 } 66 67 [Test] TestStringCtor()68 public void TestStringCtor () 69 { 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"); 75 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"); 81 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"); 87 88 try { 89 v1 = new Version ("1.42.-79"); 90 Assert.Fail ("#D"); 91 } catch (ArgumentOutOfRangeException) { 92 } 93 94 try { 95 v1 = new Version ("1"); 96 Assert.Fail ("#E"); 97 } catch (ArgumentException) { 98 } 99 100 try { 101 v1 = new Version ("1.2.3.4.5"); 102 Assert.Fail ("#F"); 103 } catch (ArgumentException) { 104 } 105 106 try { 107 v1 = new Version ((string) null); 108 Assert.Fail ("#G"); 109 } catch (ArgumentNullException) { 110 } 111 } 112 113 [Test] TestClone()114 public void TestClone () 115 { 116 Version v1 = new Version (1, 2, 3, 4); 117 Version v2 = (Version) v1.Clone (); 118 119 Assert.IsTrue (v1.Equals (v2), "#A1"); 120 Assert.IsFalse (object.ReferenceEquals (v1, v2), "#A2"); 121 122 Version v3 = new Version (); // 0.0 123 v2 = (Version) v3.Clone (); 124 125 Assert.IsTrue (v3.Equals (v2), "#B1"); 126 Assert.IsFalse (object.ReferenceEquals (v3, v2), "#B2"); 127 } 128 129 [Test] TestCompareTo()130 public void TestCompareTo () 131 { 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"); 145 146 Version v1 = new Version(1, 2); 147 bool exception; 148 149 Assert.AreEqual (1, v1.CompareTo (null), "#B"); 150 151 try { 152 v1.CompareTo ("A string is not a version"); 153 Assert.Fail ("#C"); 154 } catch (ArgumentException) { 155 } 156 } 157 158 [Test] TestEquals()159 public void TestEquals () 160 { 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); 164 165 Assert.IsTrue (v2.Equals (v3), "#A1"); 166 Assert.IsTrue (v2.Equals (v2), "#A2"); 167 Assert.IsFalse (v1.Equals (v3), "#A3"); 168 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"); 174 175 Assert.IsFalse (v2.Equals ((Version) null), "#C1"); 176 Assert.IsFalse (v2.Equals ("A string"), "#C2"); 177 } 178 179 [Test] TestToString()180 public void TestToString () 181 { 182 Version v1 = new Version (1,2); 183 Version v2 = new Version (1,2,3); 184 Version v3 = new Version (1,2,3,4); 185 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"); 194 195 try { 196 v2.ToString (4); 197 Assert.Fail ("#B"); 198 } catch (ArgumentException) { 199 } 200 201 try { 202 v3.ToString (42); 203 Assert.Fail ("#C"); 204 } catch (ArgumentException) { 205 } 206 } 207 208 [Test] HashCode()209 public void HashCode () 210 { 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"); 214 } 215 [Test] MajorMinorRevisions()216 public void MajorMinorRevisions () 217 { 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"); 236 } 237 238 [Test] CompareTo()239 public void CompareTo () 240 { 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"); 250 } 251 252 [Test] Parse()253 public void Parse () 254 { 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"); 260 261 try { 262 Version.Parse (null); 263 Assert.Fail ("#EXC1"); 264 } catch (ArgumentNullException) { 265 } 266 267 try { 268 Version.Parse ("1"); 269 Assert.Fail ("#EXC2"); 270 } catch (ArgumentException) { 271 } 272 273 try { 274 Version.Parse ("1.4.7.8.9"); 275 Assert.Fail ("#EXC3"); 276 } catch (ArgumentException) { 277 } 278 279 try { 280 Version.Parse ("1.2.a.7"); 281 Assert.Fail ("#EXC4"); 282 } catch (FormatException) { 283 } 284 285 try { 286 Version.Parse ("1.2."); 287 Assert.Fail ("#EXC5"); 288 } catch (FormatException) { 289 } 290 291 try { 292 Version.Parse ("1.2.0." + ((long)Int32.MaxValue + 1).ToString ()); 293 Assert.Fail ("#EXC6"); 294 } catch (OverflowException) { 295 } 296 297 try { 298 Version.Parse ("1.3.-6.0"); 299 Assert.Fail ("#EXC7"); 300 } catch (ArgumentOutOfRangeException) { 301 } 302 } 303 304 [Test] TryParse()305 public void TryParse () 306 { 307 Version result; 308 bool success; 309 310 success = Version.TryParse ("1.7", out result); 311 Assert.AreEqual (new Version (1, 7), result, "#A1"); 312 Assert.AreEqual (true, success, "#A2"); 313 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"); 317 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"); 321 322 success = Version.TryParse (" 2.9 ", out result); 323 Assert.AreEqual (new Version (2, 9), result, "#D1"); 324 Assert.AreEqual (true, success, "#D2"); 325 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"); 329 330 // 331 // Errors 332 // 333 success = Version.TryParse (null, out result); 334 Assert.AreEqual (null, result, "#F1"); 335 Assert.AreEqual (false, success, "#F2"); 336 337 success = Version.TryParse ("1", out result); 338 Assert.AreEqual (null, result, "#G1"); 339 Assert.AreEqual (false, success, "#G2"); 340 341 success = Version.TryParse ("1.4.7.8.9", out result); 342 Assert.AreEqual (null, result, "#H1"); 343 Assert.AreEqual (false, success, "#H2"); 344 345 success = Version.TryParse ("1.2.a.7", out result); 346 Assert.AreEqual (null, result, "#I1"); 347 Assert.AreEqual (false, success, "#I2"); 348 349 success = Version.TryParse ("1.2.", out result); 350 Assert.AreEqual (null, result, "#J1"); 351 Assert.AreEqual (false, success, "#J2"); 352 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"); 356 357 success = Version.TryParse ("1.-6", out result); 358 Assert.AreEqual (null, result, "#L1"); 359 Assert.AreEqual (false, success, "#L2"); 360 } 361 } 362 } 363