New test.
[mono.git] / mcs / class / System.Drawing / Test / System.Drawing / ColorConverter.cs
1 //
2 // ColorConverter class testing unit
3 //
4 // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining
7 // a copy of this software and associated documentation files (the
8 // "Software"), to deal in the Software without restriction, including
9 // without limitation the rights to use, copy, modify, merge, publish,
10 // distribute, sublicense, and/or sell copies of the Software, and to
11 // permit persons to whom the Software is furnished to do so, subject to
12 // the following conditions:
13 // 
14 // The above copyright notice and this permission notice shall be
15 // included in all copies or substantial portions of the Software.
16 // 
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 //
25
26 using System;
27 using System.Collections;
28 using System.ComponentModel;
29 using System.ComponentModel.Design.Serialization;
30 using System.Drawing;
31 using System.Globalization;
32 using System.Security.Permissions;
33
34 using NUnit.Framework;
35
36 namespace MonoTests.System.Drawing {
37
38         [TestFixture]
39         [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)]
40         public class ColorConverterFixture
41         {
42                 Color col;
43                 Color colnamed;
44                 ColorConverter colconv;
45                 String colStr;
46                 String colStrInvariant;
47                 String colnamedStr;
48
49                 [SetUp]
50                 public void SetUp () {
51                         col = Color.FromArgb (10, 20, 30);
52                         colStr = string.Format ("10{0} 20{0} 30", CultureInfo.CurrentCulture.TextInfo.ListSeparator);
53                         colStrInvariant = string.Format ("10{0} 20{0} 30", CultureInfo.InvariantCulture.TextInfo.ListSeparator);
54
55                         colnamed = Color.ForestGreen;
56                         colnamedStr = "ForestGreen";
57
58                         colconv = (ColorConverter) TypeDescriptor.GetConverter (col);
59                 }
60
61                 [Test]
62 #if TARGET_JVM
63                 [NUnit.Framework.Category ("NotWorking")]
64 #endif
65                 public void CanConvertFrom () {
66                         Assert.IsTrue (colconv.CanConvertFrom (typeof (String)), "CCF#1");
67                         Assert.IsTrue (colconv.CanConvertFrom (null, typeof (String)), "CCF#1a");
68                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (Rectangle)), "CCF#2");
69                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (RectangleF)), "CCF#3");
70                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (Point)), "CCF#4");
71                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (PointF)), "CCF#5");
72                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (Color)), "CCF#6");
73                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (SizeF)), "CCF#7");
74                         Assert.IsFalse (colconv.CanConvertFrom (null, typeof (Object)), "CCF#8");
75                         Assert.IsFalse ( colconv.CanConvertFrom (null, typeof (int)), "CCF#9");
76                         Assert.IsTrue (colconv.CanConvertFrom (null, typeof (InstanceDescriptor)), "CCF#10");
77                 }
78
79                 [Test]
80                 public void CanConvertTo () {
81                         Assert.IsTrue (colconv.CanConvertTo (typeof (String)), "CCT#1");
82                         Assert.IsTrue (colconv.CanConvertTo (null, typeof (String)), "CCT#1a");
83                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (Rectangle)), "CCT#2");
84                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (RectangleF)), "CCT#3");
85                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (Point)), "CCT#4");
86                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (PointF)), "CCT#5");
87                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (Color)), "CCT#6");
88                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (SizeF)), "CCT#7");
89                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (Object)), "CCT#8");
90                         Assert.IsFalse (colconv.CanConvertTo (null, typeof (int)), "CCT#9");
91                         Assert.IsTrue (colconv.CanConvertTo (typeof (InstanceDescriptor)), "CCT#10");
92                 }
93
94                 [Test]
95 #if TARGET_JVM
96                 [NUnit.Framework.Category ("NotWorking")]
97 #endif
98                 public void ConvertFrom ()
99                 {
100                         Color color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
101                                 "#0x23190A44");
102                         Assert.AreEqual (35, color.A, "CF1#1");
103                         Assert.AreEqual (25, color.R, "CF1#2");
104                         Assert.AreEqual (10, color.G, "CF1#3");
105                         Assert.AreEqual (68, color.B, "CF1#4");
106
107                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
108                                 "#0X190A44");
109                         Assert.AreEqual (0, color.A, "CF2#1");
110                         Assert.AreEqual (25, color.R, "CF2#2");
111                         Assert.AreEqual (10, color.G, "CF2#3");
112                         Assert.AreEqual (68, color.B, "CF2#4");
113
114                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
115                                 "0x190A44");
116                         Assert.AreEqual (255, color.A, "CF3#1");
117                         Assert.AreEqual (25, color.R, "CF3#2");
118                         Assert.AreEqual (10, color.G, "CF3#3");
119                         Assert.AreEqual (68, color.B, "CF3#4");
120
121                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
122                                 "0X190A44");
123                         Assert.AreEqual (255, color.A, "CF4#1");
124                         Assert.AreEqual (25, color.R, "CF4#2");
125                         Assert.AreEqual (10, color.G, "CF4#3");
126                         Assert.AreEqual (68, color.B, "CF4#4");
127
128                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
129                                 "111111");
130                         Assert.AreEqual (0, color.A, "CF5#1");
131                         Assert.AreEqual (1, color.R, "CF5#2");
132                         Assert.AreEqual (178, color.G, "CF5#3");
133                         Assert.AreEqual (7, color.B, "CF5#4");
134
135                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
136                                 "10");
137                         Assert.AreEqual (0, color.A, "CF6#1");
138                         Assert.AreEqual (0, color.R, "CF6#2");
139                         Assert.AreEqual (0, color.G, "CF6#3");
140                         Assert.AreEqual (10, color.B, "CF6#4");
141
142                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
143                                 "0");
144                         Assert.AreEqual (0, color.A, "CF7#1");
145                         Assert.AreEqual (0, color.R, "CF7#2");
146                         Assert.AreEqual (0, color.G, "CF7#3");
147                         Assert.AreEqual (0, color.B, "CF7#4");
148
149
150                         Assert.AreEqual (col, (Color) colconv.ConvertFrom (null,
151                                 CultureInfo.InvariantCulture, colStrInvariant), "CF#1");
152                         Assert.AreEqual (colnamed, (Color) colconv.ConvertFrom (null,
153                                 CultureInfo.InvariantCulture, colnamedStr), "CF#2");
154
155                         Assert.AreEqual (Color.Empty, colconv.ConvertFrom (string.Empty), "CF#3");
156                         Assert.AreEqual (Color.Empty, colconv.ConvertFrom (" "), "CF#4");
157                         Assert.AreEqual (Color.Red, colconv.ConvertFrom ("Red"), "CF#5");
158                         Assert.AreEqual (Color.Red, colconv.ConvertFrom (" Red "), "CF#6");
159                 }
160
161                 [Test]
162                 [NUnit.Framework.Category ("NotWorking")]
163                 public void ConvertFrom_NotWorking ()
164                 {
165                         Color color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
166                                 "0x123");
167                         Assert.AreEqual (0, color.A, "CF8#1");
168                         Assert.AreEqual (0, color.R, "CF8#2");
169                         Assert.AreEqual (1, color.G, "CF8#3");
170                         Assert.AreEqual (35, color.B, "CF8#4");
171
172                         color = (Color) colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
173                                 "#123");
174                         Assert.AreEqual (0, color.A, "CF9#1");
175                         Assert.AreEqual (0, color.R, "CF9#2");
176                         Assert.AreEqual (1, color.G, "CF9#3");
177                         Assert.AreEqual (35, color.B, "CF9#4");
178                 }
179
180                 [Test]
181                 [ExpectedException (typeof (ArgumentException))]
182                 public void ConvertFrom_x1 ()
183                 {
184                                 colconv.ConvertFrom (null, CultureInfo.InvariantCulture, "10, 20");
185                 }
186
187                 [Test]
188                 [ExpectedException (typeof (ArgumentException))]
189                 public void ConvertFrom_x2 ()
190                 {
191                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture, "-10, 20, 30");
192                 }
193
194                 [Test]
195                 [ExpectedException (typeof (ArgumentException))]
196                 public void ConvertFrom_x3 ()
197                 {
198                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
199                                         "1, 1, 1, 1, 1");
200                 }
201
202                 [Test]
203                 [ExpectedException (typeof (Exception))]
204 #if TARGET_JVM
205                 [NUnit.Framework.Category ("NotWorking")]
206 #endif
207                 public void ConvertFrom_x4 ()
208                 {
209                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
210                                 "*1, 1");
211                 }
212
213                 [Test]
214                 [ExpectedException (typeof (NotSupportedException))]
215                 public void ConvertFrom_x5 ()
216                 {
217                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
218                                         new Point (10, 10));
219                 }
220
221                 [Test]
222                 [ExpectedException (typeof (NotSupportedException))]
223                 public void ConvertFrom_x6 ()
224                 {
225                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
226                                         new PointF (10, 10));
227                 }
228
229                 [Test]
230                 [ExpectedException (typeof (NotSupportedException))]
231                 public void ConvertFrom_x7 ()
232                 {
233                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
234                                         new Size (10, 10));
235                 }
236
237                 [Test]
238                 [ExpectedException (typeof (NotSupportedException))]
239                 public void ConvertFrom_x8 ()
240                 {
241                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture,
242                                         new SizeF (10, 10));
243                 }
244
245                 [Test]
246                 [ExpectedException (typeof (NotSupportedException))]
247                 public void ConvertFrom_x9 ()
248                 {
249                         colconv.ConvertFrom (null, CultureInfo.InvariantCulture, 0x10);
250                 }
251
252                 [Test]
253                 public void ConvertTo ()
254                 {
255                         Assert.AreEqual (colStrInvariant, colconv.ConvertTo (null, CultureInfo.InvariantCulture,
256                                 Color.FromArgb (10, 20, 30), typeof (String)), "CT#1");
257                         Assert.AreEqual (colStrInvariant, colconv.ConvertTo (null, CultureInfo.InvariantCulture,
258                                 Color.FromArgb (255, 10, 20, 30), typeof (String)), "CT#2");
259                         Assert.AreEqual ("10, 20, 30, 40", colconv.ConvertTo (null, CultureInfo.InvariantCulture,
260                                 Color.FromArgb (10, 20, 30, 40), typeof (String)), "CT#3");
261                         Assert.AreEqual (colnamedStr, colconv.ConvertTo (null, CultureInfo.InvariantCulture,
262                                 colnamed, typeof (String)), "CT#4");
263
264                         Assert.AreEqual (string.Empty, colconv.ConvertTo (Color.Empty, typeof (string)), "CT#5");
265                         Assert.AreEqual ("Red", colconv.ConvertTo (Color.Red, typeof (string)), "CT#6");
266                         Assert.AreEqual (string.Empty, colconv.ConvertTo (null, typeof (string)), "CT#7");
267                         Assert.AreEqual ("test", colconv.ConvertTo ("test", typeof (string)), "CT#8");
268                 }
269
270                 [Test]
271                 [ExpectedException (typeof (NotSupportedException))]
272                 public void ConvertTo_x1 ()
273                 {
274                         colconv.ConvertTo (null, CultureInfo.InvariantCulture, col,
275                                         typeof (Color));
276                 }
277
278                 [Test]
279                 [ExpectedException (typeof (NotSupportedException))]
280                 public void ConvertTo_x2 ()
281                 {
282                         colconv.ConvertTo (null, CultureInfo.InvariantCulture, col,
283                                         typeof (SizeF));
284                 }
285
286                 [Test]
287                 [ExpectedException (typeof (NotSupportedException))]
288                 public void ConvertTo_x3 ()
289                 {
290                         colconv.ConvertTo (null, CultureInfo.InvariantCulture, col,
291                                         typeof (Point));
292                 }
293
294                 [Test]
295                 [ExpectedException (typeof (NotSupportedException))]
296                 public void ConvertTo_x4 ()
297                 {
298                         colconv.ConvertTo (null, CultureInfo.InvariantCulture, col,
299                                         typeof (PointF));
300                 }
301
302                 [Test]
303                 [ExpectedException (typeof (NotSupportedException))]
304                 public void ConvertTo_x5 ()
305                 {
306                         colconv.ConvertTo (null, CultureInfo.InvariantCulture, col,
307                                         typeof (int));
308                 }
309
310                 [Test]
311                 public void GetCreateInstanceSupported ()
312                 {
313                         Assert.IsTrue (!colconv.GetCreateInstanceSupported (), "GCIS#1");
314                         Assert.IsTrue (!colconv.GetCreateInstanceSupported (null), "GCIS#2");
315                 }
316
317                 [Test]
318                 public void CreateInstance ()
319                 {
320                         Hashtable ht = new Hashtable ();
321                         ht.Add ("R", 10); ht.Add ("G", 20); ht.Add ("B", 30);
322
323                         Assert.AreEqual (null, colconv.CreateInstance (ht), "CI#1");
324
325                         ht.Add ("Name", "ForestGreen");
326
327                         Assert.AreEqual (null, colconv.CreateInstance (null, ht), "CI#2");
328                 }
329
330                 [Test]
331                 public void GetPropertiesSupported ()
332                 {
333                         Assert.IsTrue (!colconv.GetPropertiesSupported (), "GPS#1");
334                         Assert.IsTrue (!colconv.GetPropertiesSupported (null), "GPS#2");
335                 }
336
337                 [Test]
338                 public void GetProperties ()
339                 {
340                         Attribute [] attrs;
341
342                         Assert.AreEqual (null, colconv.GetProperties (col), "GP1#1");
343
344                         Assert.AreEqual (null, colconv.GetProperties (null, col, null), "GP2#1");
345
346                         attrs = Attribute.GetCustomAttributes (typeof (Color), true);
347                         Assert.AreEqual (null, colconv.GetProperties (null, col, attrs), "GP3#5");
348                 }
349
350                 [Test]
351                 public void ConvertFromInvariantString_string ()
352                 {
353                         Assert.AreEqual (col, colconv.ConvertFromInvariantString (colStrInvariant), "CFISS#1");
354                         Assert.AreEqual (colnamed, colconv.ConvertFromInvariantString (colnamedStr), "CFISS#2");
355                 }
356
357                 [Test]
358                 [ExpectedException (typeof (ArgumentException))]
359                 public void ConvertFromInvariantString_InvalidComponentCount ()
360                 {
361                         colconv.ConvertFromInvariantString ("1, 2, 3, 4, 5");
362                 }
363
364                 [Test]
365 #if TARGET_JVM
366                 [NUnit.Framework.Category ("NotWorking")]
367 #endif
368                 public void ConvertFromInvariantString_InvalidNumber ()
369                 {
370                         try {
371                                 colconv.ConvertFromInvariantString ("hello");
372                                 Assert.Fail ("#1");
373                         } catch (Exception ex) {
374                                 Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
375                                 Assert.IsNotNull (ex.InnerException, "#3");
376                                 Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
377                         }
378                 }
379
380                 [Test]
381                 public void ConvertFromString_string ()
382                 {
383                         Assert.AreEqual (col, colconv.ConvertFromString (colStr), "CFSS#1");
384                         Assert.AreEqual (colnamed, colconv.ConvertFromString (colnamedStr), "CFSS#2");
385                 }
386
387                 [Test]
388                 [ExpectedException (typeof (ArgumentException))]
389                 public void ConvertFromString_InvalidComponentCount ()
390                 {
391                         CultureInfo culture = CultureInfo.CurrentCulture;
392                         colconv.ConvertFromString (string.Format (culture,
393                                 "1{0} 2{0} 3{0} 4{0} 5", culture.TextInfo.ListSeparator[0]));
394                 }
395
396                 [Test]
397 #if TARGET_JVM
398                 [NUnit.Framework.Category ("NotWorking")]
399 #endif
400                 public void ConvertFromString_InvalidNumber ()
401                 {
402                         try {
403                                 colconv.ConvertFromString ("hello");
404                                 Assert.Fail ("#1");
405                         } catch (Exception ex) {
406                                 Assert.AreEqual (typeof (Exception), ex.GetType (), "#2");
407                                 Assert.IsNotNull (ex.InnerException, "#3");
408                                 Assert.AreEqual (typeof (FormatException), ex.InnerException.GetType (), "#3");
409                         }
410                 }
411
412                 [Test]
413                 public void ConvertToInvariantString_string () {
414                         Assert.AreEqual (colStrInvariant, colconv.ConvertToInvariantString (col), "CFISS#1");
415                         Assert.AreEqual (colnamedStr, colconv.ConvertToInvariantString (colnamed), "CFISS#2");
416                 }
417
418                 [Test]
419                 public void ConvertToString_string () {
420                         Assert.AreEqual (colStr, colconv.ConvertToString (col), "CFISS#1");
421                         Assert.AreEqual (colnamedStr, colconv.ConvertToString (colnamed), "CFISS#3");
422                 }
423
424                 [Test]
425                 public void GetStandardValuesSupported () {
426                         Assert.IsTrue (colconv.GetStandardValuesSupported ());
427                 }
428
429                 [Test]
430                 public void GetStandardValues () {
431 #if NET_2_0
432                         Assert.AreEqual ((int)KnownColor.MenuHighlight, colconv.GetStandardValues ().Count);
433                         Assert.AreEqual ((int)KnownColor.MenuHighlight, colconv.GetStandardValues (null).Count);                        
434 #else
435                         Assert.AreEqual ((int)KnownColor.YellowGreen, colconv.GetStandardValues ().Count);
436                         Assert.AreEqual ((int)KnownColor.YellowGreen, colconv.GetStandardValues (null).Count);  
437 #endif
438                 }
439
440                 [Test]
441                 public void GetStandardValuesExclusive () {
442                         Assert.AreEqual (false, colconv.GetStandardValuesExclusive ());
443                 }
444
445                 [Test]
446                 [ExpectedException (typeof (Exception))]
447                 public void ConvertFromString_FromHtml_PoundTooLarge ()
448                 {
449                         colconv.ConvertFromString ("#100000000");
450                 }
451         }
452 }
453