2 // CaseInsensitiveHashCodeProviderTest
4 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 using System.Collections;
9 using System.Globalization;
11 using System.Runtime.Serialization;
12 using System.Runtime.Serialization.Formatters;
13 using System.Runtime.Serialization.Formatters.Binary;
14 using System.Threading;
16 using NUnit.Framework;
18 namespace MonoTests.System.Collections
21 public class CaseInsensitiveHashCodeProviderTest
23 private CultureInfo old_culture;
28 old_culture = Thread.CurrentThread.CurrentCulture;
32 public void TearDown ()
34 Thread.CurrentThread.CurrentCulture = old_culture;
38 public void Default ()
40 CaseInsensitiveHashCodeProvider cih = new CaseInsensitiveHashCodeProvider (
41 CultureInfo.CurrentCulture);
42 int h1 = cih.GetHashCode ("Test String");
44 cih = CaseInsensitiveHashCodeProvider.Default;
45 int h2 = cih.GetHashCode ("Test String");
47 Assert.AreEqual (h1, h2, "#1");
49 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
50 CaseInsensitiveHashCodeProvider cih1 = CaseInsensitiveHashCodeProvider.Default;
51 Thread.CurrentThread.CurrentCulture = new CultureInfo ("nl-BE");
52 CaseInsensitiveHashCodeProvider cih2 = CaseInsensitiveHashCodeProvider.Default;
53 Assert.IsFalse (object.ReferenceEquals (cih1, cih2), "#2");
57 public void Default_MS ()
59 // MS always returns new instance
60 CaseInsensitiveHashCodeProvider cih1 = CaseInsensitiveHashCodeProvider.Default;
61 CaseInsensitiveHashCodeProvider cih2 = CaseInsensitiveHashCodeProvider.Default;
62 Assert.IsFalse (object.ReferenceEquals (cih1, cih2));
66 public void DefaultInvariant ()
68 CaseInsensitiveHashCodeProvider cih = new CaseInsensitiveHashCodeProvider (
69 CultureInfo.InvariantCulture);
70 int h1 = cih.GetHashCode ("Test String");
72 cih = CaseInsensitiveHashCodeProvider.DefaultInvariant;
73 int h2 = cih.GetHashCode ("Test String");
75 Assert.AreEqual (h1, h2, "#1");
77 CaseInsensitiveHashCodeProvider cih1 = CaseInsensitiveHashCodeProvider.DefaultInvariant;
78 CaseInsensitiveHashCodeProvider cih2 = CaseInsensitiveHashCodeProvider.DefaultInvariant;
79 Assert.IsTrue (object.ReferenceEquals (cih1, cih2));
83 public void HashCode ()
85 CaseInsensitiveHashCodeProvider cih = new CaseInsensitiveHashCodeProvider ();
86 int h1 = cih.GetHashCode ("Test String");
87 int h2 = cih.GetHashCode ("test string");
88 int h3 = cih.GetHashCode ("TEST STRING");
90 Assert.IsTrue (h1 == h2, "Mixed Case != lower case");
91 Assert.IsTrue (h1 == h3, "Mixed Case != UPPER CASE");
93 h1 = cih.GetHashCode ("one");
94 h2 = cih.GetHashCode ("another");
95 // Actually this is quite possible.
96 Assert.IsFalse (h1 == h2);
100 public void Constructor0_Serialization ()
102 CaseInsensitiveHashCodeProvider cihcp = new CaseInsensitiveHashCodeProvider ();
103 BinaryFormatter bf = new BinaryFormatter ();
104 MemoryStream ms = new MemoryStream ();
105 bf.Serialize (ms, cihcp);
106 byte[] ser1 = ms.ToArray ();
108 cihcp = new CaseInsensitiveHashCodeProvider (CultureInfo.CurrentCulture);
109 ms = new MemoryStream ();
110 bf.Serialize (ms, cihcp);
111 byte[] ser2 = ms.ToArray ();
113 cihcp = CaseInsensitiveHashCodeProvider.Default;
114 ms = new MemoryStream ();
115 bf.Serialize (ms, cihcp);
116 byte[] ser3 = ms.ToArray ();
118 Assert.AreEqual (ser1, ser2, "#1");
119 Assert.AreEqual (ser2, ser3, "#2");
123 public void Constructor1_Culture_Null ()
126 new CaseInsensitiveHashCodeProvider ((CultureInfo) null);
128 } catch (ArgumentNullException ex) {
129 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
130 Assert.IsNull (ex.InnerException, "#3");
131 Assert.IsNotNull (ex.Message, "#4");
132 Assert.IsNotNull (ex.ParamName, "#5");
133 Assert.AreEqual ("culture", ex.ParamName, "#6");
138 public void Constructor1_Serialization ()
140 CaseInsensitiveHashCodeProvider cihcp = new CaseInsensitiveHashCodeProvider (CultureInfo.InvariantCulture);
141 BinaryFormatter bf = new BinaryFormatter ();
142 MemoryStream ms = new MemoryStream ();
143 bf.Serialize (ms, cihcp);
144 byte[] ser1 = ms.ToArray ();
146 cihcp = CaseInsensitiveHashCodeProvider.DefaultInvariant;
147 ms = new MemoryStream ();
148 bf.Serialize (ms, cihcp);
149 byte[] ser2 = ms.ToArray ();
151 Assert.AreEqual (ser1, ser2, "#1");
155 public void SerializationRoundtrip ()
157 CaseInsensitiveHashCodeProvider enus = new CaseInsensitiveHashCodeProvider (new CultureInfo ("en-US"));
158 BinaryFormatter bf = new BinaryFormatter ();
159 MemoryStream ms = new MemoryStream ();
160 bf.Serialize (ms, enus);
163 CaseInsensitiveHashCodeProvider clone = (CaseInsensitiveHashCodeProvider) bf.Deserialize (ms);
164 Assert.AreEqual (enus.GetHashCode (String.Empty), clone.GetHashCode (String.Empty), "GetHashCode(string)");
165 Assert.AreEqual (enus.GetHashCode (Int32.MinValue), clone.GetHashCode (Int32.MinValue), "GetHashCode(int)");
169 public void Deserialize ()
171 BinaryFormatter bf = new BinaryFormatter ();
173 MemoryStream ms = new MemoryStream (serialized_en_us);
174 CaseInsensitiveHashCodeProvider enus = (CaseInsensitiveHashCodeProvider) bf.Deserialize (ms);
175 Assert.IsNotNull (enus, "en-US");
177 ms = new MemoryStream (serialized_fr_ca);
178 CaseInsensitiveHashCodeProvider frca = (CaseInsensitiveHashCodeProvider) bf.Deserialize (ms);
179 Assert.IsNotNull (frca, "fr-CA");
182 private static byte [] serialized_en_us = new byte [] {
183 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x32, 0x53, 0x79, 0x73,
185 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E,
186 0x43, 0x61, 0x73, 0x65, 0x49, 0x6E, 0x73, 0x65, 0x6E, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x48,
187 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x01,
188 0x00, 0x00, 0x00, 0x06, 0x6D, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x03, 0x1D, 0x53, 0x79, 0x73, 0x74,
189 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E,
190 0x2E, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x66, 0x6F, 0x09, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02,
191 0x00, 0x00, 0x00, 0x1D, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61,
192 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x66,
193 0x6F, 0x06, 0x00, 0x00, 0x00, 0x0F, 0x6D, 0x5F, 0x6C, 0x69, 0x73, 0x74, 0x53, 0x65, 0x70, 0x61,
194 0x72, 0x61, 0x74, 0x6F, 0x72, 0x0C, 0x6D, 0x5F, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x4F, 0x6E,
195 0x6C, 0x79, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6F, 0x6D, 0x43, 0x75, 0x6C, 0x74, 0x75, 0x72, 0x65,
196 0x4E, 0x61, 0x6D, 0x65, 0x0B, 0x6D, 0x5F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6D,
197 0x11, 0x6D, 0x5F, 0x75, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4F, 0x76, 0x65, 0x72, 0x72, 0x69,
198 0x64, 0x65, 0x0D, 0x6D, 0x5F, 0x77, 0x69, 0x6E, 0x33, 0x32, 0x4C, 0x61, 0x6E, 0x67, 0x49, 0x44,
199 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x01, 0x08, 0x0A, 0x00, 0x0A, 0x29, 0x00, 0x00,
200 0x00, 0x01, 0x09, 0x04, 0x00, 0x00, 0x0B
203 private static byte [] serialized_fr_ca = new byte [] {
204 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x32, 0x53, 0x79, 0x73,
206 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E,
207 0x43, 0x61, 0x73, 0x65, 0x49, 0x6E, 0x73, 0x65, 0x6E, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x48,
208 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x01,
209 0x00, 0x00, 0x00, 0x06, 0x6D, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x03, 0x1D, 0x53, 0x79, 0x73, 0x74,
210 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E,
211 0x2E, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x66, 0x6F, 0x09, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02,
212 0x00, 0x00, 0x00, 0x1D, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61,
213 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6E, 0x66,
214 0x6F, 0x06, 0x00, 0x00, 0x00, 0x0F, 0x6D, 0x5F, 0x6C, 0x69, 0x73, 0x74, 0x53, 0x65, 0x70, 0x61,
215 0x72, 0x61, 0x74, 0x6F, 0x72, 0x0C, 0x6D, 0x5F, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x4F, 0x6E,
216 0x6C, 0x79, 0x11, 0x63, 0x75, 0x73, 0x74, 0x6F, 0x6D, 0x43, 0x75, 0x6C, 0x74, 0x75, 0x72, 0x65,
217 0x4E, 0x61, 0x6D, 0x65, 0x0B, 0x6D, 0x5F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6D,
218 0x11, 0x6D, 0x5F, 0x75, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4F, 0x76, 0x65, 0x72, 0x72, 0x69,
219 0x64, 0x65, 0x0D, 0x6D, 0x5F, 0x77, 0x69, 0x6E, 0x33, 0x32, 0x4C, 0x61, 0x6E, 0x67, 0x49, 0x44,
220 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x01, 0x08, 0x0A, 0x00, 0x0A, 0x50, 0x00, 0x00,
221 0x00, 0x01, 0x0C, 0x0C, 0x00, 0x00, 0x0B