2010-04-15 Jb Evain <jbevain@novell.com>
[mcs.git] / class / corlib / Test / System / GuidTest.cs
blob245ed727877a5b5c3d48ca645848c9a5f8f74fe3
1 //
2 // GuidTest.cs - NUnit Test Cases for the System.Guid struct
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) 2005 Novell, Inc (http://www.novell.com)
12 using NUnit.Framework;
13 using System;
15 namespace MonoTests.System {
17 [TestFixture]
18 public class GuidTest {
20 [Test]
21 [ExpectedException (typeof (ArgumentNullException))]
22 public void Constructor_ByteArray_Null ()
24 new Guid ((byte[]) null);
27 [Test]
28 [ExpectedException (typeof (ArgumentException))]
29 public void Constructor_ByteArray_InvalidLength ()
31 new Guid (new byte[] {0x00, 0x01, 0x02});
34 [Test]
35 public void Constructor_ByteArray ()
37 Guid g = new Guid (new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f});
38 Assert.AreEqual ("03020100-0504-0706-0809-0a0b0c0d0e0f", g.ToString ());
41 [Test]
42 [ExpectedException (typeof (ArgumentNullException))]
43 public void Constructor_String_Null ()
45 new Guid ((string) null);
48 [Test]
49 public void Constructor_String ()
51 Guid g0 = new Guid ("000102030405060708090a0b0c0d0e0f");
52 Guid g1 = new Guid ("00010203-0405-0607-0809-0a0b0c0d0e0f");
53 Guid g2 = new Guid ("{00010203-0405-0607-0809-0A0B0C0D0E0F}");
54 Guid g3 = new Guid ("{0x00010203,0x0405,0x0607,{0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}}");
55 Guid g4 = new Guid ("(00010203-0405-0607-0809-0A0B0C0D0E0F)");
56 Guid g5 = new Guid ("\n \r \n 00010203-0405-0607-0809-0a0b0c0d0e0f \r\n");
57 string expected = "00010203-0405-0607-0809-0a0b0c0d0e0f";
58 Assert.AreEqual (expected, g0.ToString (), "A0");
59 Assert.AreEqual (expected, g1.ToString (), "A1");
60 Assert.AreEqual (expected, g2.ToString (), "A2");
61 Assert.AreEqual (expected, g3.ToString (), "A3");
62 Assert.AreEqual (expected, g4.ToString (), "A4");
63 Assert.AreEqual (expected, g5.ToString (), "A5");
66 [Test]
67 [ExpectedException (typeof (FormatException))]
68 public void Constructor_String_Invalid ()
70 new Guid ("invalid");
73 [Test]
74 [ExpectedException (typeof (FormatException))]
75 public void Constructor_String_MissingAllSeparators ()
77 new Guid ("{000102030405060708090A0B0C0D0E0F}"); // missing all -
80 [Test]
81 [ExpectedException (typeof (FormatException))]
82 public void Constructor_String_MissingSeparator ()
84 new Guid ("000102030405-0607-0809-0a0b0c0d0e0f"); // missing first -
87 [Test]
88 [ExpectedException (typeof (FormatException))]
89 public void Constructor_String_Mismatch ()
91 new Guid ("(000102030405-0607-0809-0a0b0c0d0e0f}"); // open (, close }
94 [Test]
95 public void Constructor_Int32_2xInt16_8xByte ()
97 Guid g1 = new Guid (0x00010203, (short) 0x0405, (short) 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
98 Guid g2 = new Guid (unchecked ((int) 0xffffffff), unchecked ((short) 0xffff), unchecked((short) 0xffff), 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
99 Guid g3 = new Guid (0x00010203u, (ushort) 0x0405u, (ushort) 0x0607u, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
100 Guid g4 = new Guid (0xffffffffu, (ushort) 0xffffu, (ushort) 0xffffu, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
102 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g1.ToString (), "A1");
103 Assert.AreEqual ("ffffffff-ffff-ffff-ffff-ffffffffffff", g2.ToString (), "A2");
104 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g1.ToString (), "A3");
105 Assert.AreEqual ("ffffffff-ffff-ffff-ffff-ffffffffffff", g2.ToString (), "A4");
108 [Test]
109 public void Constructor_UInt32_2xUInt16_8xByte ()
111 Guid g1 = new Guid (0x00010203u, (ushort) 0x0405u, (ushort) 0x0607u, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
112 Guid g2 = new Guid (0xffffffffu, (ushort) 0xffffu, (ushort) 0xffffu, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
114 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g1.ToString (), "A1");
115 Assert.AreEqual ("ffffffff-ffff-ffff-ffff-ffffffffffff", g2.ToString (), "A2");
118 [Test]
119 public void Constructor_Int32_2xInt16_ByteArray ()
121 Guid g1 = new Guid (0x00010203, (short) 0x0405, (short) 0x0607, new byte[] { 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f });
122 Guid g2 = new Guid (unchecked ((int) 0xffffffff), unchecked ((short) 0xffff), unchecked((short) 0xffff), new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff });
124 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g1.ToString (), "A1");
125 Assert.AreEqual ("ffffffff-ffff-ffff-ffff-ffffffffffff", g2.ToString (), "A2");
128 [Test]
129 public void Empty ()
131 Assert.AreEqual ("00000000-0000-0000-0000-000000000000", Guid.Empty.ToString (), "ToString");
132 Assert.AreEqual (new byte [16], Guid.Empty.ToByteArray (), "ToByteArray");
135 [Test]
136 public void NewGuid ()
138 Guid g1 = Guid.NewGuid ();
139 Guid g2 = Guid.NewGuid ();
140 Assert.IsFalse (g1 == g2);
143 #pragma warning disable 1718
144 [Test]
145 public void EqualityOp ()
147 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
148 Guid g2 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
149 Guid g3 = new Guid (0x11223344, 0x5566, 0x6677, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff);
151 Assert.IsTrue (g1 == g1, "A1");
152 Assert.IsTrue (g1 == g2, "A2");
153 Assert.IsFalse (g1 == g3, "A3");
156 [Test]
157 public void InequalityOp ()
159 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
160 Guid g2 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
161 Guid g3 = new Guid (0x11223344, 0x5566, 0x6677, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff);
163 Assert.IsFalse (g1 != g1, "A1");
164 Assert.IsFalse (g1 != g2, "A2");
165 Assert.IsTrue (g1 != g3, "A3");
167 #pragma warning restore 1718
169 [Test]
170 public void EqualsObject ()
172 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
173 Guid g2 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
174 Guid g3 = new Guid (0x11223344, 0x5566, 0x6677, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff);
175 // cast everything to object so the test still works under 2.0
176 Assert.IsTrue (g1.Equals ((object)g1), "A1");
177 Assert.IsTrue (g1.Equals ((object)g2), "A2");
178 Assert.IsFalse (g1.Equals ((object)g3), "A3");
179 Assert.IsFalse (g1.Equals ((object)null), "A4");
180 Assert.IsFalse (g1.Equals ((object)"This is not a Guid!"), "A5");
183 #if NET_2_0
184 [Test]
185 public void EqualsGuid ()
187 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
188 Guid g2 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
189 Guid g3 = new Guid (0x11223344, 0x5566, 0x6677, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff);
191 Assert.IsTrue (g1.Equals (g1), "A1");
192 Assert.IsTrue (g1.Equals (g2), "A2");
193 Assert.IsFalse (g1.Equals (g3), "A3");
194 Assert.IsFalse (g1.Equals (null), "A4");
195 Assert.IsFalse (g1.Equals ("This is not a Guid!"), "A5");
197 #endif
199 [Test]
200 public void CompareToObject ()
202 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
203 Guid g2 = new Guid (0x00010204, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
204 Guid g3 = new Guid (0x00010203, 0x0405, 0x0607, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
205 Guid g4 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f);
206 // cast everything to object so the test still works under 2.0
207 Assert.IsTrue (g1.CompareTo ((object)g2) < 0, "A1");
208 Assert.IsTrue (g1.CompareTo ((object)g3) < 0, "A2");
209 Assert.IsTrue (g1.CompareTo ((object)g4) < 0, "A3");
210 Assert.IsTrue (g2.CompareTo ((object)g1) > 0, "A4");
211 Assert.IsTrue (g3.CompareTo ((object)g1) > 0, "A5");
212 Assert.IsTrue (g4.CompareTo ((object)g1) > 0, "A6");
213 Assert.IsTrue (g1.CompareTo ((object)g1) == 0, "A7");
214 Assert.IsTrue (g1.CompareTo ((object)null) > 0, "A8");
217 [Test]
218 [ExpectedException (typeof (ArgumentException))]
219 public void CompareToObject_Invalid ()
221 Guid.Empty.CompareTo ("Say what?");
224 #if NET_2_0
225 [Test]
226 public void CompareToGuid ()
228 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
229 Guid g2 = new Guid (0x00010204, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
230 Guid g3 = new Guid (0x00010203, 0x0405, 0x0607, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
231 Guid g4 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x1f);
233 Assert.IsTrue (g1.CompareTo (g2) < 0, "A1");
234 Assert.IsTrue (g1.CompareTo (g3) < 0, "A2");
235 Assert.IsTrue (g1.CompareTo (g4) < 0, "A3");
236 Assert.IsTrue (g2.CompareTo (g1) > 0, "A4");
237 Assert.IsTrue (g3.CompareTo (g1) > 0, "A5");
238 Assert.IsTrue (g4.CompareTo (g1) > 0, "A6");
239 Assert.IsTrue (g1.CompareTo (g1) == 0, "A7");
241 #endif
243 [Test]
244 public void GetHashCode_Same ()
246 Guid copy = new Guid (Guid.Empty.ToString ());
247 Assert.AreEqual (Guid.Empty.GetHashCode (), copy.GetHashCode (), "GetHashCode");
250 [Test]
251 public void GetHashCode_Different ()
253 Guid g = Guid.NewGuid ();
254 Assert.IsFalse (Guid.Empty.GetHashCode () == g.GetHashCode (), "GetHashCode");
257 [Test]
258 public void ToByteArray ()
260 Guid g1 = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
261 byte[] expected = new byte[] { 0x03, 0x02, 0x01, 0x00, 0x05, 0x04, 0x07, 0x06, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
262 Assert.AreEqual (expected, g1.ToByteArray (), "ToByteArray");
265 [Test]
266 public void ToString_AllFormats ()
268 Guid g = new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
269 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g.ToString (), "A1");
270 Assert.AreEqual ("000102030405060708090a0b0c0d0e0f", g.ToString ("N"), "A2");
271 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g.ToString ("D"), "A3");
272 Assert.AreEqual ("{00010203-0405-0607-0809-0a0b0c0d0e0f}", g.ToString ("B"), "A4");
273 Assert.AreEqual ("(00010203-0405-0607-0809-0a0b0c0d0e0f)", g.ToString ("P"), "A5");
274 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g.ToString (""), "A6");
275 Assert.AreEqual ("00010203-0405-0607-0809-0a0b0c0d0e0f", g.ToString ((string)null), "A7");
276 Assert.AreEqual ("{00010203-0405-0607-0809-0a0b0c0d0e0f}", g.ToString ("B", null), "A10");
279 [Test]
280 [ExpectedException (typeof (FormatException))]
281 public void ToString_UnsupportedFormat ()
283 new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f).ToString ("X");
286 [Test]
287 [ExpectedException (typeof (FormatException))]
288 public void ToString_InvalidFormat ()
290 new Guid (0x00010203, 0x0405, 0x0607, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f).ToString ("This is invalid");
293 #if NET_4_0
296 N = new Guid ("000102030405060708090a0b0c0d0e0f");
297 D = new Guid ("00010203-0405-0607-0809-0a0b0c0d0e0f");
298 B = new Guid ("{00010203-0405-0607-0809-0A0B0C0D0E0F}");
299 P = new Guid ("(00010203-0405-0607-0809-0A0B0C0D0E0F)");
300 X = new Guid ("{0x00010203,0x0405,0x0607,{0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}}");
302 string expected = "00010203-0405-0607-0809-0a0b0c0d0e0f";
305 [Test]
306 public void ParseExact ()
308 const string expected = "00010203-0405-0607-0809-0a0b0c0d0e0f";
310 var guid = Guid.ParseExact ("000102030405060708090a0b0c0d0e0f", "N");
311 Assert.AreEqual (expected, guid.ToString ());
313 guid = Guid.ParseExact ("00010203-0405-0607-0809-0a0b0c0d0e0f", "D");
314 Assert.AreEqual (expected, guid.ToString ());
316 guid = Guid.ParseExact ("{00010203-0405-0607-0809-0A0B0C0D0E0F}", "B");
317 Assert.AreEqual (expected, guid.ToString ());
319 guid = Guid.ParseExact ("(00010203-0405-0607-0809-0A0B0C0D0E0F)", "P");
320 Assert.AreEqual (expected, guid.ToString ());
322 guid = Guid.ParseExact ("{0x00010203,0x0405,0x0607,{0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}}", "X");
323 Assert.AreEqual (expected, guid.ToString ());
326 [Test]
327 [ExpectedException (typeof (FormatException))]
328 public void ParseExactN ()
330 Guid.ParseExact ("00010203-0405-0607-0809-0a0b0c0d0e0f", "N");
333 [Test]
334 [ExpectedException (typeof (FormatException))]
335 public void ParseExactD ()
337 Guid.ParseExact ("{0x00010203,0x0405,0x0607,{0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}}", "D");
339 #endif