2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System.Data / Test / System.Data.SqlTypes / SqlGuidTest.cs
1 //\r
2 // SqlGuidTest.cs - NUnit Test Cases for System.Data.SqlTypes.SqlGuid\r
3 //\r
4 // Authors:\r
5 //   Ville Palo (vi64pa@koti.soon.fi)\r
6 //   Martin Willemoes Hansen (mwh@sysrq.dk)\r
7 //\r
8 // (C) 2002 Ville Palo\r
9 // (C) 2003 Martin Willemoes Hansen\r
10 // \r
11 \r
12 //\r
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)\r
14 //\r
15 // Permission is hereby granted, free of charge, to any person obtaining\r
16 // a copy of this software and associated documentation files (the\r
17 // "Software"), to deal in the Software without restriction, including\r
18 // without limitation the rights to use, copy, modify, merge, publish,\r
19 // distribute, sublicense, and/or sell copies of the Software, and to\r
20 // permit persons to whom the Software is furnished to do so, subject to\r
21 // the following conditions:\r
22 // \r
23 // The above copyright notice and this permission notice shall be\r
24 // included in all copies or substantial portions of the Software.\r
25 // \r
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
33 //\r
34 \r
35 using NUnit.Framework;\r
36 using System;\r
37 using System.Xml;\r
38 using System.Data.SqlTypes;\r
39 \r
40 namespace MonoTests.System.Data.SqlTypes\r
41 {\r
42         [TestFixture]\r
43         public class SqlGuidTest {\r
44 \r
45                 // 00000a01-0000-0000-0000-000000000000\r
46                 private SqlGuid Test1;\r
47 \r
48                 // 00000f64-0000-0000-0000-000000000000\r
49                 private SqlGuid Test2;          \r
50                 private SqlGuid Test3;\r
51 \r
52                 // 0000fafa-0000-0000-0000-000000000000\r
53                 private SqlGuid Test4;\r
54                 \r
55                 [SetUp]\r
56                 public void GetReady() \r
57                 {\r
58                         byte [] b1 = new byte [16];\r
59                         byte [] b2 = new byte [16];\r
60                         byte [] b3 = new byte [16];\r
61                         byte [] b4 = new byte [16];\r
62 \r
63                         b1 [0] = 1;\r
64                         b1 [1] = 10;\r
65                         b2 [0] = 100;\r
66                         b2 [1] = 15;\r
67                         b3 [0] = 100;\r
68                         b3 [1] = 15;\r
69                         b4 [0] = 250;\r
70                         b4 [1] = 250;\r
71 \r
72                         Test1 = new SqlGuid (b1);\r
73                         Test2 = new SqlGuid (b2);\r
74                         Test3 = new SqlGuid (b3);\r
75                         Test4 = new SqlGuid (b4);\r
76                 }\r
77 \r
78                 // Test constructor\r
79                 [Test]\r
80                 public void Create()\r
81                 {\r
82                         // SqlGuid (Byte[])\r
83                         byte [] b = new byte [16];\r
84                         b [0] = 100;\r
85                         b [1] = 200;\r
86 \r
87                         try {\r
88                                 SqlGuid Test = new SqlGuid (b);\r
89 \r
90                                 // SqlGuid (Guid)\r
91                                 Guid TestGuid = new Guid (b);\r
92                                 Test = new SqlGuid (TestGuid);\r
93 \r
94                                 // SqlGuid (string)\r
95                                 Test = new SqlGuid ("12345678-1234-1234-1234-123456789012");\r
96 \r
97                                 // SqlGuid (int, short, short, byte, byte, byte, byte, byte, byte, byte, byte)\r
98                                 Test = new SqlGuid (10, 1, 2, 13, 14, 15, 16, 17, 19, 20 ,21);\r
99 \r
100                         } catch (Exception e) {\r
101                                 Assert.Fail ("#A01 " + e);\r
102                         }\r
103                 }\r
104 \r
105                 // Test public fields\r
106                 [Test]\r
107                 public void PublicFields()\r
108                 {\r
109                         Assert.IsTrue (SqlGuid.Null.IsNull, "#B01");\r
110                 }\r
111 \r
112                 // Test properties\r
113                 [Test]\r
114                 public void Properties()\r
115                 {\r
116                         Guid ResultGuid = new Guid ("00000f64-0000-0000-0000-000000000000");                   \r
117                         Assert.IsTrue (!Test1.IsNull, "#C01");\r
118                         Assert.IsTrue (SqlGuid.Null.IsNull, "#C02");\r
119                         Assert.AreEqual (ResultGuid, Test2.Value, "#C03");\r
120                 }\r
121 \r
122                 // PUBLIC METHODS\r
123                 [Test]\r
124                 public void CompareTo()\r
125                 {\r
126                         String TestString = "This is a test string";\r
127                         SqlGuid test1 = new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-3EEEEEEEEEEE");\r
128                         SqlGuid test2 = new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-2EEEEEEEEEEE");\r
129                         SqlGuid test3 = new SqlGuid("1AAAAAAA-BBBB-CCCC-DDDD-1EEEEEEEEEEE");\r
130                         Assert.IsTrue (Test1.CompareTo (Test3) <  0, "#D01");\r
131                         Assert.IsTrue (Test4.CompareTo (Test1) > 0, "#D02");\r
132                         Assert.IsTrue (Test3.CompareTo (Test2) == 0, "#D03");\r
133                         Assert.IsTrue (Test4.CompareTo (SqlGuid.Null) > 0, "#D04");\r
134                         Assert.IsTrue (test1.CompareTo (test2) >  0, "#D05");\r
135                         Assert.IsTrue (test3.CompareTo (test2) <  0, "#D06");\r
136                         \r
137                         try {\r
138                                 Test1.CompareTo (TestString);\r
139                                 Assert.Fail("#D05");\r
140                         } catch(Exception e) {\r
141                                 Assert.AreEqual (typeof (ArgumentException), e.GetType (), "#D06");\r
142                         }\r
143                 }\r
144 \r
145                 [Test]\r
146                 public void EqualsMethods()\r
147                 {\r
148                         Assert.IsTrue (!Test1.Equals (Test2), "#E01");\r
149                         Assert.IsTrue (!Test2.Equals (Test4), "#E02");\r
150                         Assert.IsTrue (!Test2.Equals (new SqlString ("TEST")), "#E03");\r
151                         Assert.IsTrue (Test2.Equals (Test3), "#E04");\r
152 \r
153                         // Static Equals()-method\r
154                         Assert.IsTrue (SqlGuid.Equals (Test2, Test3).Value, "#E05");\r
155                         Assert.IsTrue (!SqlGuid.Equals (Test1, Test2).Value, "#E06");\r
156                 }\r
157 \r
158                 [Test]\r
159                 public void GetHashCodeTest()\r
160                 {\r
161                         Assert.AreEqual (Test1.GetHashCode (), Test1.GetHashCode (), "#F01");\r
162                         Assert.IsTrue (Test1.GetHashCode () != Test2.GetHashCode (), "#F02");\r
163                         Assert.AreEqual (Test3.GetHashCode (), Test2.GetHashCode (), "#F02");\r
164                 }\r
165 \r
166                 [Test]\r
167                 public void GetTypeTest()\r
168                 {\r
169                         Assert.AreEqual ("System.Data.SqlTypes.SqlGuid", Test1.GetType ().ToString (), "#G01");\r
170                         Assert.AreEqual ("System.Guid", Test3.Value.GetType ().ToString (), "#G02");\r
171                 }\r
172 \r
173                 [Test]\r
174                 public void Greaters()\r
175                 {\r
176                         // GreateThan ()\r
177                         Assert.IsTrue (!SqlGuid.GreaterThan (Test1, Test2).Value, "#H01");\r
178                         Assert.IsTrue (SqlGuid.GreaterThan (Test2, Test1).Value, "#H02");\r
179                         Assert.IsTrue (!SqlGuid.GreaterThan (Test2, Test3).Value, "#H03");\r
180                         // GreaterTharOrEqual ()\r
181                         Assert.IsTrue (!SqlGuid.GreaterThanOrEqual (Test1, Test2).Value, "#H04");\r
182                         Assert.IsTrue (SqlGuid.GreaterThanOrEqual (Test2, Test1).Value, "#H05");\r
183                         Assert.IsTrue (SqlGuid.GreaterThanOrEqual (Test2, Test3).Value, "#H06");\r
184                 }\r
185 \r
186                 [Test]\r
187                 public void Lessers()\r
188                 {\r
189                         // LessThan()\r
190                         Assert.IsTrue (!SqlGuid.LessThan (Test2, Test3).Value, "#I01");\r
191                         Assert.IsTrue (!SqlGuid.LessThan (Test2, Test1).Value, "#I02");\r
192                         Assert.IsTrue (SqlGuid.LessThan (Test1, Test2).Value, "#I03");\r
193 \r
194                         // LessThanOrEqual ()\r
195                         Assert.IsTrue (SqlGuid.LessThanOrEqual (Test1, Test2).Value, "#I04");\r
196                         Assert.IsTrue (!SqlGuid.LessThanOrEqual (Test2, Test1).Value, "#I05");\r
197                         Assert.IsTrue (SqlGuid.LessThanOrEqual (Test2, Test3).Value, "#I06");\r
198                         Assert.IsTrue (SqlGuid.LessThanOrEqual (Test4, SqlGuid.Null).IsNull, "#I07");\r
199                 }\r
200 \r
201                 [Test]\r
202                 public void NotEquals()\r
203                 {\r
204                         Assert.IsTrue (SqlGuid.NotEquals (Test1, Test2).Value, "#J01");\r
205                         Assert.IsTrue (SqlGuid.NotEquals (Test2, Test1).Value, "#J02");\r
206                         Assert.IsTrue (SqlGuid.NotEquals (Test3, Test1).Value, "#J03");\r
207                         Assert.IsTrue (!SqlGuid.NotEquals (Test3, Test2).Value, "#J04");\r
208                         Assert.IsTrue (SqlGuid.NotEquals (SqlGuid.Null, Test2).IsNull, "#J05");\r
209                 }\r
210 \r
211                 [Test]\r
212                 public void Parse()\r
213                 {\r
214                         try {\r
215                                 SqlGuid.Parse (null);\r
216                                 Assert.Fail ("#K01");\r
217                         } catch (Exception e) {\r
218                                 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "#K02");\r
219                         }\r
220 \r
221                         try {\r
222                                 SqlGuid.Parse ("not-a-number");\r
223                                 Assert.Fail ("#K03");\r
224                         } catch (Exception e) {\r
225                                 Assert.AreEqual (typeof (FormatException), e.GetType (), "#K04");\r
226                         }\r
227 \r
228                          try {\r
229                                 SqlGuid.Parse ("9e400");\r
230                                 Assert.Fail ("#K05");\r
231                         } catch (Exception e) {\r
232                                 Assert.AreEqual (typeof (FormatException), e.GetType (), "#K06");\r
233                         }\r
234 \r
235                         Assert.AreEqual(new Guid("87654321-0000-0000-0000-000000000000"), SqlGuid.Parse ("87654321-0000-0000-0000-000000000000").Value, "#K07");\r
236                 }\r
237 \r
238                 [Test]\r
239                 public void Conversions()\r
240                 {\r
241                         // ToByteArray ()\r
242                         Assert.AreEqual ((byte)1, Test1.ToByteArray () [0], "#L01");\r
243                         Assert.AreEqual ((byte)15, Test2.ToByteArray () [1], "#L02");\r
244 \r
245                         // ToSqlBinary ()\r
246                         byte [] b = new byte [2]; \r
247                         b [0] = 100;\r
248                         b [1] = 15;\r
249                        \r
250                         Assert.AreEqual (new SqlBinary (b), Test3.ToSqlBinary (), "#L03");\r
251 \r
252                         // ToSqlString ()\r
253                         Assert.AreEqual ("00000a01-0000-0000-0000-000000000000",  Test1.ToSqlString ().Value, "#L04");\r
254                         Assert.AreEqual ("0000fafa-0000-0000-0000-000000000000", Test4.ToSqlString ().Value, "#L05");\r
255 \r
256                         // ToString ()\r
257                         Assert.AreEqual ("00000a01-0000-0000-0000-000000000000", Test1.ToString (), "#L06");\r
258                         Assert.AreEqual ("0000fafa-0000-0000-0000-000000000000", Test4.ToString (), "#L07");\r
259                 }\r
260 \r
261                 // OPERATORS\r
262 \r
263                 [Test]\r
264                 public void ThanOrEqualOperators()\r
265                 {\r
266                         // == -operator\r
267                         Assert.IsTrue ((Test3 == Test2).Value, "#M01");\r
268                         Assert.IsTrue (!(Test1 == Test2).Value, "#M02");\r
269                         Assert.IsTrue ((Test1 == SqlGuid.Null).IsNull, "#M03");\r
270                         \r
271                         // != -operator\r
272                         Assert.IsTrue (!(Test2 != Test3).Value, "#M04");\r
273                         Assert.IsTrue ((Test1 != Test3).Value, "#M05");\r
274                         Assert.IsTrue ((Test1 != SqlGuid.Null).IsNull, "#M06");\r
275 \r
276                         // > -operator\r
277                         Assert.IsTrue ((Test2 > Test1).Value, "#M07");\r
278                         Assert.IsTrue (!(Test1 > Test3).Value, "#M08");\r
279                         Assert.IsTrue (!(Test3 > Test2).Value, "#M09");\r
280                         Assert.IsTrue ((Test1 > SqlGuid.Null).IsNull, "#M10");\r
281 \r
282                         // >=  -operator\r
283                         Assert.IsTrue (!(Test1 >= Test3).Value, "#M12");\r
284                         Assert.IsTrue ((Test3 >= Test1).Value, "#M13");\r
285                         Assert.IsTrue ((Test3 >= Test2).Value, "#M14");\r
286                         Assert.IsTrue ((Test1 >= SqlGuid.Null).IsNull, "#M15");\r
287 \r
288                         // < -operator\r
289                         Assert.IsTrue (!(Test2 < Test1).Value, "#M16");\r
290                         Assert.IsTrue ((Test1 < Test3).Value, "#M17");\r
291                         Assert.IsTrue (!(Test2 < Test3).Value, "#M18");\r
292                         Assert.IsTrue ((Test1 < SqlGuid.Null).IsNull, "#M19");\r
293 \r
294                         // <= -operator\r
295                         Assert.IsTrue ((Test1 <= Test3).Value, "#M20");\r
296                         Assert.IsTrue (!(Test3 <= Test1).Value, "#M21");\r
297                         Assert.IsTrue ((Test2 <= Test3).Value, "#M22");\r
298                         Assert.IsTrue ((Test1 <= SqlGuid.Null).IsNull, "#M23");\r
299                 }\r
300 \r
301                 [Test]\r
302                 public void SqlBinaryToSqlGuid()\r
303                 {\r
304                         byte [] b = new byte [16];\r
305                         b [0] = 100;\r
306                         b [1] = 200;\r
307                         SqlBinary TestBinary = new SqlBinary (b);\r
308                         \r
309                         Assert.AreEqual (new Guid("0000c864-0000-0000-0000-000000000000"), ((SqlGuid)TestBinary).Value, "#N01");\r
310                 }\r
311 \r
312                 [Test]\r
313                 public void SqlGuidToGuid()\r
314                 {\r
315                         Assert.AreEqual (new Guid("00000a01-0000-0000-0000-000000000000"), (Guid)Test1, "#O01");\r
316                         Assert.AreEqual (new Guid("00000f64-0000-0000-0000-000000000000"), (Guid)Test2, "#O02");\r
317                 }               \r
318 \r
319                 [Test]\r
320                 public void SqlStringToSqlGuid()\r
321                 {\r
322                         SqlString TestString = new SqlString ("Test string");\r
323                         SqlString TestString100 = new SqlString ("0000c864-0000-0000-0000-000000000000");\r
324 \r
325                         Assert.AreEqual (new Guid("0000c864-0000-0000-0000-000000000000"), ((SqlGuid)TestString100).Value, "#P01");\r
326 \r
327                         try {\r
328                                 SqlGuid test = (SqlGuid)TestString;\r
329                                 Assert.Fail ("#P02");\r
330                         } catch(Exception e) {\r
331                                 Assert.AreEqual (typeof (FormatException), e.GetType (), "#P03");\r
332                         }\r
333                 }\r
334                 \r
335                 [Test]\r
336                 public void GuidToSqlGuid()\r
337                 {\r
338                         Guid TestGuid = new Guid("0000c864-0000-0000-0000-000007650000");\r
339                         Assert.AreEqual (new SqlGuid("0000c864-0000-0000-0000-000007650000"), (SqlGuid)TestGuid, "#Q01");\r
340                 }\r
341 #if NET_2_0\r
342                 [Test]\r
343                 public void GetXsdTypeTest ()\r
344                 {\r
345                         XmlQualifiedName qualifiedName = SqlGuid.GetXsdType (null);\r
346                         Assert.AreEqual ("string", qualifiedName.Name, "#A01");\r
347                 }\r
348 #endif\r
349         }\r
350 }\r