2 // System.ComponentModel.EnumConverter test cases
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // (c) 2007 Gert Driesen
11 using System.ComponentModel;
12 using System.ComponentModel.Design.Serialization;
13 using System.Globalization;
14 using System.Reflection;
16 using NUnit.Framework;
18 namespace MonoTests.System.ComponentModel
21 public class EnumConverterTests
24 public void CanConvertFrom ()
26 EnumConverter converter = new EnumConverter (typeof (E));
27 Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#A1");
28 Assert.IsFalse (converter.CanConvertFrom (typeof (Enum)), "#A2");
29 Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#A3");
30 Assert.IsFalse (converter.CanConvertFrom (typeof (int)), "#A4");
31 Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#A5");
32 Assert.IsFalse (converter.CanConvertFrom (typeof (string [])), "#A6");
34 Assert.IsTrue (converter.CanConvertFrom (typeof (Enum [])), "#A7");
36 Assert.IsFalse (converter.CanConvertFrom (typeof (Enum [])), "#A7");
39 converter = new EnumConverter (typeof (E2));
40 Assert.IsTrue (converter.CanConvertFrom (typeof (string)), "#B1");
41 Assert.IsFalse (converter.CanConvertFrom (typeof (Enum)), "#B2");
42 Assert.IsFalse (converter.CanConvertFrom (typeof (object)), "#B3");
43 Assert.IsFalse (converter.CanConvertFrom (typeof (int)), "#B4");
44 Assert.IsTrue (converter.CanConvertFrom (typeof (InstanceDescriptor)), "#B5");
45 Assert.IsFalse (converter.CanConvertFrom (typeof (string [])), "#B6");
47 Assert.IsTrue (converter.CanConvertFrom (typeof (Enum [])), "#B7");
49 Assert.IsFalse (converter.CanConvertFrom (typeof (Enum [])), "#B7");
54 public void CanConvertTo ()
56 EnumConverter converter = new EnumConverter (typeof (E));
57 Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#A1");
58 Assert.IsFalse (converter.CanConvertTo (typeof (Enum)), "#A2");
59 Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#A3");
60 Assert.IsFalse (converter.CanConvertTo (typeof (int)), "#A4");
61 Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#A5");
62 Assert.IsFalse (converter.CanConvertTo (typeof (string [])), "#A6");
64 Assert.IsTrue (converter.CanConvertTo (typeof (Enum [])), "#A7");
66 Assert.IsFalse (converter.CanConvertTo (typeof (Enum [])), "#A7");
69 converter = new EnumConverter (typeof (E2));
70 Assert.IsTrue (converter.CanConvertTo (typeof (string)), "#B1");
71 Assert.IsFalse (converter.CanConvertTo (typeof (Enum)), "#B2");
72 Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#B3");
73 Assert.IsFalse (converter.CanConvertTo (typeof (object)), "#B4");
74 Assert.IsTrue (converter.CanConvertTo (typeof (InstanceDescriptor)), "#B5");
75 Assert.IsFalse (converter.CanConvertTo (typeof (string [])), "#B6");
77 Assert.IsTrue (converter.CanConvertTo (typeof (Enum [])), "#B7");
79 Assert.IsFalse (converter.CanConvertTo (typeof (Enum [])), "#B7");
84 public void ConvertFrom_Null ()
86 EnumConverter converter = new EnumConverter (typeof (E));
88 converter.ConvertFrom (null, CultureInfo.InvariantCulture, null);
90 } catch (NotSupportedException ex) {
91 // EnumConverter cannot convert from (null)
92 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
93 Assert.IsNull (ex.InnerException, "#3");
94 Assert.IsNotNull (ex.Message, "#4");
95 Assert.IsTrue (ex.Message.IndexOf (typeof (EnumConverter).Name) != -1, "#5");
96 Assert.IsTrue (ex.Message.IndexOf ("(null)") != -1, "#6");
102 public void ConvertFrom_EnumArray ()
104 EnumConverter converter = new EnumConverter (typeof (E));
105 Assert.AreEqual (E.Aa, converter.ConvertFrom (null,
106 CultureInfo.InvariantCulture,
107 (Enum []) new Enum [] { E.Aa }), "#A1");
108 Assert.AreEqual ((E) 8, converter.ConvertFrom (null,
109 CultureInfo.InvariantCulture,
110 (Enum []) new Enum [] { E.Aa, E2.Dd }), "#A2");
111 Assert.AreEqual ((E) 958, converter.ConvertFrom (null,
112 CultureInfo.InvariantCulture,
113 (Enum []) new Enum [] { (E2) 444, (E) 666 }), "#A3");
114 Assert.AreEqual ((E) 0, converter.ConvertFrom (null,
115 CultureInfo.InvariantCulture,
116 (Enum []) new Enum [0]), "#A4");
118 converter = new EnumConverter (typeof (E2));
119 Assert.AreEqual ((E2) 0, converter.ConvertFrom (null,
120 CultureInfo.InvariantCulture,
121 (Enum []) new Enum [] { E.Aa }), "#B1");
122 Assert.AreEqual (E2.Dd, converter.ConvertFrom (null,
123 CultureInfo.InvariantCulture,
124 (Enum []) new Enum [] { E.Aa, E2.Dd }), "#B2");
125 Assert.AreEqual ((E2) 958, converter.ConvertFrom (null,
126 CultureInfo.InvariantCulture,
127 (Enum []) new Enum [] { (E2) 444, (E) 666 }), "#B3");
128 Assert.AreEqual ((E2) 0, converter.ConvertFrom (null,
129 CultureInfo.InvariantCulture,
130 (Enum []) new Enum [0]), "#B4");
131 Assert.AreEqual (E2.Bb | E2.Dd, converter.ConvertFrom (null,
132 CultureInfo.InvariantCulture,
133 (Enum []) new Enum [] { E2.Bb, E2.Dd }), "#B5");
138 public void ConvertFrom_String ()
140 EnumConverter converter = new EnumConverter (typeof (E));
141 Assert.AreEqual (E.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Bb"), "#A1");
142 Assert.AreEqual (E.Cc, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "2"), "#A2");
143 Assert.AreEqual (E.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " Bb "), "#A3");
144 Assert.AreEqual (E.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " 3 "), "#A4");
145 Assert.AreEqual ((E) 666, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "666"), "#A5");
146 Assert.AreEqual (E.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Bb,Dd"), "#A6");
147 Assert.AreEqual (E.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Dd,Bb"), "#A7");
148 Assert.AreEqual (E.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Aa,Bb"), "#A8");
151 converter.ConvertFrom (null, CultureInfo.InvariantCulture, string.Empty);
154 } catch (FormatException ex) {
155 // is not a valid value for E
156 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#B2");
157 Assert.IsNotNull (ex.InnerException, "#B3");
158 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.GetType (), "#B4");
159 Assert.IsNotNull (ex.Message, "#B5");
160 Assert.IsTrue (ex.Message.IndexOf ("E") != -1, "#B6");
162 // Must specify valid information for parsing in the string
163 ArgumentException inner = (ArgumentException) ex.InnerException;
164 Assert.IsNull (inner.InnerException, "#B7");
165 Assert.IsNotNull (inner.Message, "#B8");
168 } catch (ArgumentException ex) {
169 // Must specify valid information for parsing in the string
170 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
171 Assert.IsNull (ex.InnerException, "#B3");
172 Assert.IsNotNull (ex.Message, "#B4");
177 converter.ConvertFrom (null, CultureInfo.InvariantCulture, "YY");
180 } catch (FormatException ex) {
181 // YY is not a valid value for E
182 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#C2");
183 Assert.IsNotNull (ex.InnerException, "#C3");
184 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.GetType (), "#C4");
185 Assert.IsNotNull (ex.Message, "#C5");
186 Assert.IsTrue (ex.Message.IndexOf ("YY") != -1, "#C6");
187 Assert.IsTrue (ex.Message.IndexOf ("E") != -1, "#C7");
189 // Requested value YY was not found
190 ArgumentException inner = (ArgumentException) ex.InnerException;
191 //Assert.IsNull (inner.InnerException, "#C8");
192 Assert.IsNotNull (inner.Message, "#C9");
193 Assert.IsTrue (inner.Message.IndexOf ("YY") != -1, "#C10");
194 Assert.IsNull (inner.ParamName, "#C11");
197 } catch (ArgumentException ex) {
198 // Requested value YY was not found
199 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
200 //Assert.IsNull (ex.InnerException, "#C3");
201 Assert.IsNotNull (ex.Message, "#C4");
202 Assert.IsTrue (ex.Message.IndexOf ("YY") != -1, "#C5");
203 Assert.IsNull (ex.ParamName, "#C6");
210 [NUnit.Framework.Category("NotWorking")]
212 public void ConvertFrom_String_Flags ()
214 EnumConverter converter = new EnumConverter (typeof (E2));
215 Assert.AreEqual (E2.Cc, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Cc"), "#B1");
216 Assert.AreEqual (E2.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "8"), "#B2");
217 Assert.AreEqual (E2.Cc | E2.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Cc,Dd"), "#B3");
218 Assert.AreEqual (E2.Aa | E2.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "3"), "#B4");
219 Assert.AreEqual (E2.Bb | E2.Cc, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "2,4"), "#B5");
220 Assert.AreEqual (E2.Aa | E2.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " 1 , 8 "), "#B5");
221 Assert.AreEqual ((E2) 666, converter.ConvertFrom (null, CultureInfo.InvariantCulture, "666"), "#B6");
222 Assert.AreEqual (E2.Cc | E2.Dd, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " Dd , Cc "), "#B7");
223 Assert.AreEqual (E2.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " Bb "), "#B8");
224 Assert.AreEqual (E2.Aa | E2.Bb, converter.ConvertFrom (null, CultureInfo.InvariantCulture, " 3 "), "#B9");
227 converter.ConvertFrom (null, CultureInfo.InvariantCulture, string.Empty);
230 } catch (FormatException ex) {
231 // is not a valid value for E2
232 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#B2");
233 Assert.IsNotNull (ex.InnerException, "#B3");
234 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.GetType (), "#B4");
235 Assert.IsNotNull (ex.Message, "#B5");
236 Assert.IsTrue (ex.Message.IndexOf ("E2") != -1, "#B6");
238 // Must specify valid information for parsing in the string
239 ArgumentException inner = (ArgumentException) ex.InnerException;
240 Assert.IsNull (inner.InnerException, "#B7");
241 Assert.IsNotNull (inner.Message, "#B8");
244 } catch (ArgumentException ex) {
245 // Must specify valid information for parsing in the string
246 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
247 Assert.IsNull (ex.InnerException, "#B3");
248 Assert.IsNotNull (ex.Message, "#B4");
253 converter.ConvertFrom (null, CultureInfo.InvariantCulture, "Aa Bb");
256 } catch (FormatException ex) {
257 // Aa Bb is not a valid value for E2
258 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#C2");
259 Assert.IsNotNull (ex.InnerException, "#C3");
260 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.GetType (), "#C4");
261 Assert.IsNotNull (ex.Message, "#C5");
262 Assert.IsTrue (ex.Message.IndexOf ("Aa Bb") != -1, "#C6");
263 Assert.IsTrue (ex.Message.IndexOf ("E2") != -1, "#C7");
265 // Requested value Aa Bb was not found
266 ArgumentException inner = (ArgumentException) ex.InnerException;
267 Assert.IsNotNull (inner.Message, "#C9");
268 Assert.IsTrue (inner.Message.IndexOf ("Aa Bb") != -1, "#C10");
269 Assert.IsNull (inner.ParamName, "#C11");
272 } catch (ArgumentException ex) {
273 // Requested value Aa Bb was not found
274 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
275 Assert.IsNotNull (ex.Message, "#C3");
276 Assert.IsTrue (ex.Message.IndexOf ("Aa Bb") != -1, "#C4");
277 Assert.IsNull (ex.ParamName, "#C5");
282 converter.ConvertFrom (null, CultureInfo.InvariantCulture, "2,");
285 } catch (FormatException ex) {
286 // 2, is not a valid value for E2
287 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#D2");
288 Assert.IsNotNull (ex.InnerException, "#D3");
289 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.GetType (), "#D4");
290 Assert.IsNotNull (ex.Message, "#D5");
291 Assert.IsTrue (ex.Message.IndexOf ("2,") != -1, "#D6");
292 Assert.IsTrue (ex.Message.IndexOf ("E2") != -1, "#D7");
294 // Must specify valid information for parsing in the string
295 ArgumentException inner = (ArgumentException) ex.InnerException;
296 Assert.IsNull (inner.InnerException, "#D8");
297 Assert.IsNotNull (inner.Message, "#D9");
298 Assert.IsFalse (inner.Message.IndexOf ("2,") != -1, "#D10");
301 } catch (ArgumentException ex) {
302 // Must specify valid information for parsing in the string
303 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
304 Assert.IsNull (ex.InnerException, "#D3");
305 Assert.IsNotNull (ex.Message, "#D4");
306 Assert.IsFalse (ex.Message.IndexOf ("2,") != -1, "#D5");
313 public void ConvertTo_EnumArray ()
316 EnumConverter converter = new EnumConverter (typeof (E));
318 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
319 E.Bb, typeof (Enum [])) as Enum [];
320 Assert.IsNotNull (enums, "#A1");
321 Assert.AreEqual (1, enums.Length, "#A2");
322 Assert.AreEqual (typeof (E), enums [0].GetType (), "#A3");
323 Assert.AreEqual (E.Bb, enums [0], "#A4");
325 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
326 2, typeof (Enum [])) as Enum [];
327 Assert.IsNotNull (enums, "#B1");
328 Assert.AreEqual (1, enums.Length, "#B2");
329 Assert.AreEqual (typeof (E), enums [0].GetType (), "#B3");
330 Assert.AreEqual (E.Cc, enums [0], "#B4");
333 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
334 "2", typeof (Enum [])) as Enum [];
336 } catch (ArgumentException ex) {
337 // The value passed in must be an enum base or an
338 // underlying type for an enum, such as an Int32
339 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
340 Assert.IsNull (ex.InnerException, "#C3");
341 Assert.IsNotNull (ex.Message, "#C4");
342 Assert.IsNotNull (ex.ParamName, "#C5");
343 Assert.AreEqual ("value", ex.ParamName, "#C6");
347 converter.ConvertTo (null, CultureInfo.InvariantCulture,
348 null, typeof (Enum []));
350 } catch (NotSupportedException ex) {
351 // 'EnumConverter' is unable to convert '(null)'
352 // to 'System.Enum[]'
353 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#D2");
354 Assert.IsNull (ex.InnerException, "#D3");
355 Assert.IsNotNull (ex.Message, "#D4");
356 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (EnumConverter).Name + "'") != -1, "#D5");
357 Assert.IsTrue (ex.Message.IndexOf ("'(null)'") != -1, "#D6");
358 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (Enum []).FullName + "'") != -1, "#D7");
362 converter.ConvertTo (null, CultureInfo.InvariantCulture,
363 "Cc", typeof (Enum []));
365 } catch (ArgumentException ex) {
366 // The value passed in must be an enum base or an
367 // underlying type for an enum, such as an Int32
368 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#E2");
369 Assert.IsNull (ex.InnerException, "#E3");
370 Assert.IsNotNull (ex.Message, "#E4");
371 Assert.IsNotNull (ex.ParamName, "#E5");
372 Assert.AreEqual ("value", ex.ParamName, "#E6");
377 public void ConvertTo_EnumArray_Flags ()
380 EnumConverter converter = new EnumConverter (typeof (E2));
382 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
383 E.Bb, typeof (Enum [])) as Enum [];
384 Assert.IsNotNull (enums, "#A1");
385 Assert.AreEqual (1, enums.Length, "#A2");
386 Assert.AreEqual (typeof (E2), enums [0].GetType (), "#A3");
387 Assert.AreEqual (E2.Aa, enums [0], "#A4");
389 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
390 E2.Bb, typeof (Enum [])) as Enum [];
391 Assert.IsNotNull (enums, "#B1");
392 Assert.AreEqual (1, enums.Length, "#B2");
393 Assert.AreEqual (typeof (E2), enums [0].GetType (), "#B3");
394 Assert.AreEqual (E2.Bb, enums [0], "#B4");
396 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
397 (E2) 0, typeof (Enum [])) as Enum [];
398 Assert.IsNotNull (enums, "#C1");
399 Assert.AreEqual (0, enums.Length, "#C2");
401 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
402 (E2) 18, typeof (Enum [])) as Enum [];
403 Assert.IsNotNull (enums, "#D1");
404 Assert.AreEqual (2, enums.Length, "#D2");
405 Assert.AreEqual (typeof (E2), enums [0].GetType (), "#D3");
406 Assert.AreEqual (E2.Bb, enums [0], "#D4");
407 Assert.AreEqual (typeof (E2), enums [1].GetType (), "#D5");
408 Assert.AreEqual ((E2) 16, enums [1], "#D6");
411 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
412 5, typeof (Enum [])) as Enum [];
414 } catch (InvalidCastException ex) {
415 // Unable to cast object of type 'System.Int32'
416 // to type 'System.Enum'
417 Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#E2");
418 Assert.IsNull (ex.InnerException, "#E3");
419 Assert.IsNotNull (ex.Message, "#E4");
423 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
424 "2", typeof (Enum [])) as Enum [];
426 } catch (InvalidCastException ex) {
427 // Unable to cast object of type 'System.String'
428 // to type 'System.Enum'
429 Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#F2");
430 Assert.IsNull (ex.InnerException, "#F3");
431 Assert.IsNotNull (ex.Message, "#F4");
435 converter.ConvertTo (null, CultureInfo.InvariantCulture,
436 null, typeof (Enum []));
438 } catch (NotSupportedException ex) {
439 // 'EnumConverter' is unable to convert '(null)'
440 // to 'System.Enum[]'
441 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#G2");
442 Assert.IsNull (ex.InnerException, "#G3");
443 Assert.IsNotNull (ex.Message, "#G4");
444 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (EnumConverter).Name + "'") != -1, "#G5");
445 Assert.IsTrue (ex.Message.IndexOf ("'(null)'") != -1, "#G6");
446 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (Enum []).FullName + "'") != -1, "#G7");
450 converter.ConvertTo (null, CultureInfo.InvariantCulture,
451 "Bb,Cc", typeof (Enum []));
453 } catch (InvalidCastException ex) {
454 // Unable to cast object of type 'System.String'
455 // to type 'System.Enum'
456 Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#H2");
457 Assert.IsNull (ex.InnerException, "#H3");
458 Assert.IsNotNull (ex.Message, "#H4");
462 converter.ConvertTo (null, CultureInfo.InvariantCulture,
463 "2,4", typeof (Enum []));
465 } catch (InvalidCastException ex) {
466 // Unable to cast object of type 'System.String'
467 // to type 'System.Enum'
468 Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#I2");
469 Assert.IsNull (ex.InnerException, "#I3");
470 Assert.IsNotNull (ex.Message, "#I4");
473 converter = new EnumConverter (typeof (F2));
475 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
476 (F2) 15, typeof (Enum [])) as Enum [];
477 Assert.IsNotNull (enums, "#J1");
478 Assert.AreEqual (3, enums.Length, "#J2");
479 Assert.AreEqual (typeof (F2), enums [0].GetType (), "#J3");
480 Assert.AreEqual (F2.Bb, enums [0], "#J4");
481 Assert.AreEqual (typeof (F2), enums [1].GetType (), "#J5");
482 Assert.AreEqual (F2.Dd, enums [1], "#J6");
483 Assert.AreEqual (typeof (F2), enums [2].GetType (), "#J5");
484 Assert.AreEqual ((F2) 5, enums [2], "#J6");
486 // Test Flags conversion of enum value 0
487 converter = new EnumConverter (typeof (E3));
488 enums = converter.ConvertTo (null, CultureInfo.InvariantCulture,
489 E3.Aa, typeof (Enum [])) as Enum [];
490 Assert.AreEqual (1, enums.Length, "#H1");
491 Assert.AreEqual (typeof (E3), enums [0].GetType (), "#H2");
492 Assert.AreEqual (E3.Aa, enums[0], "#H3");
497 public void ConvertTo_InstanceDescriptor ()
499 InstanceDescriptor idesc;
501 EnumConverter converter = new EnumConverter (typeof (E));
503 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
504 E.Bb, typeof (InstanceDescriptor)) as InstanceDescriptor;
505 Assert.IsNotNull (idesc, "#A1");
506 Assert.IsNotNull (idesc.Arguments, "#A2");
507 Assert.AreEqual (0, idesc.Arguments.Count, "#A3");
508 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#A4");
509 Assert.IsTrue (idesc.IsComplete, "#A5");
510 fi = idesc.MemberInfo as FieldInfo;
511 Assert.IsNotNull (fi, "#A6");
512 Assert.AreEqual (typeof (E), fi.DeclaringType, "#A7");
513 Assert.AreEqual (typeof (E), fi.FieldType, "#A8");
514 Assert.IsTrue (fi.IsStatic, "#A9");
515 Assert.AreEqual ("Bb", fi.Name, "#A10");
516 Assert.AreEqual (E.Bb, fi.GetValue (null), "#A11");
519 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
520 "2", typeof (InstanceDescriptor)) as InstanceDescriptor;
521 Assert.IsNotNull (idesc, "#B1");
522 Assert.IsNotNull (idesc.Arguments, "#B2");
523 Assert.AreEqual (0, idesc.Arguments.Count, "#B3");
524 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#B4");
525 Assert.IsTrue (idesc.IsComplete, "#B5");
526 fi = idesc.MemberInfo as FieldInfo;
527 Assert.IsNotNull (fi, "#B6");
528 Assert.AreEqual (typeof (E), fi.DeclaringType, "#B7");
529 Assert.AreEqual (typeof (E), fi.FieldType, "#B8");
530 Assert.IsTrue (fi.IsStatic, "#B9");
531 Assert.AreEqual ("Cc", fi.Name, "#B10");
532 Assert.AreEqual (E.Cc, fi.GetValue (null), "#B11");
535 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
536 2, typeof (InstanceDescriptor)) as InstanceDescriptor;
537 Assert.IsNotNull (idesc, "#C1");
538 Assert.IsNotNull (idesc.Arguments, "#C2");
539 Assert.AreEqual (0, idesc.Arguments.Count, "#C3");
540 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#C4");
541 Assert.IsTrue (idesc.IsComplete, "#C5");
542 fi = idesc.MemberInfo as FieldInfo;
543 Assert.IsNotNull (fi, "#C6");
544 Assert.AreEqual (typeof (E), fi.DeclaringType, "#C7");
545 Assert.AreEqual (typeof (E), fi.FieldType, "#C8");
546 Assert.IsTrue (fi.IsStatic, "#C9");
547 Assert.AreEqual ("Cc", fi.Name, "#C10");
548 Assert.AreEqual (E.Cc, fi.GetValue (null), "#C11");
550 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
551 (E) 2, typeof (InstanceDescriptor)) as InstanceDescriptor;
552 Assert.IsNotNull (idesc, "#D1");
553 Assert.IsNotNull (idesc.Arguments, "#D2");
554 Assert.AreEqual (0, idesc.Arguments.Count, "#D3");
555 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#D4");
556 Assert.IsTrue (idesc.IsComplete, "#D5");
557 fi = idesc.MemberInfo as FieldInfo;
558 Assert.IsNotNull (fi, "#D6");
559 Assert.AreEqual (typeof (E), fi.DeclaringType, "#D7");
560 Assert.AreEqual (typeof (E), fi.FieldType, "#D8");
561 Assert.IsTrue (fi.IsStatic, "#D9");
562 Assert.AreEqual ("Cc", fi.Name, "#D10");
563 Assert.AreEqual (E.Cc, fi.GetValue (null), "#D11");
566 converter.ConvertTo (null, CultureInfo.InvariantCulture,
567 null, typeof (InstanceDescriptor));
569 } catch (NotSupportedException ex) {
570 // 'EnumConverter' is unable to convert '(null)'
571 // to 'System.ComponentModel.Design.Serialization.InstanceDescriptor'
572 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#E2");
573 Assert.IsNull (ex.InnerException, "#E3");
574 Assert.IsNotNull (ex.Message, "#E4");
575 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (EnumConverter).Name + "'") != -1, "#E5");
576 Assert.IsTrue (ex.Message.IndexOf ("'(null)'") != -1, "#E6");
577 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (InstanceDescriptor).FullName + "'") != -1, "#E7");
581 converter.ConvertTo (null, CultureInfo.InvariantCulture,
582 "5", typeof (InstanceDescriptor));
584 } catch (ArgumentException ex) {
585 // The value '5' is not a valid value for the enum 'E'
586 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#F2");
587 Assert.IsNull (ex.InnerException, "#F3");
588 Assert.IsNotNull (ex.Message, "#F4");
589 Assert.IsTrue (ex.Message.IndexOf ("'5'") != -1, "#F5");
590 Assert.IsTrue (ex.Message.IndexOf ("'E'") != -1, "#F6");
591 Assert.IsNull (ex.ParamName, "#F7");
595 converter.ConvertTo (null, CultureInfo.InvariantCulture,
596 "Cc", typeof (InstanceDescriptor));
598 } catch (FormatException ex) {
599 // Input string was not in a correct format
600 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#G2");
601 Assert.IsNull (ex.InnerException, "#G3");
602 Assert.IsNotNull (ex.Message, "#G4");
606 converter.ConvertTo (null, CultureInfo.InvariantCulture,
607 (E) 666, typeof (InstanceDescriptor));
609 } catch (ArgumentException ex) {
610 // The value '666' is not a valid value for the enum 'E'
611 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#F2");
612 Assert.IsNull (ex.InnerException, "#F3");
613 Assert.IsNotNull (ex.Message, "#F4");
614 Assert.IsTrue (ex.Message.IndexOf ("'666'") != -1, "#F5");
615 Assert.IsTrue (ex.Message.IndexOf ("'E'") != -1, "#F6");
616 Assert.IsNull (ex.ParamName, "#F7");
621 public void ConvertTo_InstanceDescriptor_Flags ()
623 InstanceDescriptor idesc;
626 ParameterInfo [] parameters;
628 EnumConverter converter = new EnumConverter (typeof (E2));
630 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
631 E2.Bb, typeof (InstanceDescriptor)) as InstanceDescriptor;
632 Assert.IsNotNull (idesc, "#A1");
633 Assert.IsNotNull (idesc.Arguments, "#A2");
634 Assert.AreEqual (0, idesc.Arguments.Count, "#A3");
635 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#A4");
636 Assert.IsTrue (idesc.IsComplete, "#A5");
637 fi = idesc.MemberInfo as FieldInfo;
638 Assert.IsNotNull (fi, "#A6");
639 Assert.AreEqual (typeof (E2), fi.DeclaringType, "#A7");
640 Assert.AreEqual (typeof (E2), fi.FieldType, "#A8");
641 Assert.IsTrue (fi.IsStatic, "#A9");
642 Assert.AreEqual ("Bb", fi.Name, "#A10");
643 Assert.AreEqual (E2.Bb, fi.GetValue (null), "#A11");
645 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
646 E.Bb, typeof (InstanceDescriptor)) as InstanceDescriptor;
647 Assert.IsNotNull (idesc, "#B1");
648 Assert.IsNotNull (idesc.Arguments, "#B2");
649 Assert.AreEqual (0, idesc.Arguments.Count, "#B3");
650 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#B4");
651 Assert.IsTrue (idesc.IsComplete, "#B5");
652 fi = idesc.MemberInfo as FieldInfo;
653 Assert.IsNotNull (fi, "#B6");
654 Assert.AreEqual (typeof (E2), fi.DeclaringType, "#B7");
655 Assert.AreEqual (typeof (E2), fi.FieldType, "#B8");
656 Assert.IsTrue (fi.IsStatic, "#B9");
657 Assert.AreEqual ("Aa", fi.Name, "#B10");
658 Assert.AreEqual (E2.Aa, fi.GetValue (null), "#B11");
660 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
661 E2.Bb | E2.Dd, typeof (InstanceDescriptor))
662 as InstanceDescriptor;
663 Assert.IsNotNull (idesc, "#C1");
664 Assert.IsNotNull (idesc.Arguments, "#C2");
665 Assert.AreEqual (2, idesc.Arguments.Count, "#C3");
666 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#C4");
667 arguments = (object []) idesc.Arguments;
668 Assert.AreEqual (typeof (E2), arguments [0], "#C5");
669 Assert.AreEqual (typeof (int), arguments [1].GetType (), "#C6");
670 Assert.AreEqual (10, arguments [1], "#C7");
671 Assert.IsTrue (idesc.IsComplete, "#C8");
672 mi = idesc.MemberInfo as MethodInfo;
673 Assert.IsNotNull (mi, "#C9");
674 Assert.AreEqual ("ToObject", mi.Name, "#C10");
675 Assert.AreEqual (typeof (Enum), mi.DeclaringType, "#C11");
676 parameters = mi.GetParameters ();
677 Assert.AreEqual (2, parameters.Length, "#C12");
678 Assert.AreEqual (typeof (Type), parameters [0].ParameterType, "#C13");
679 Assert.AreEqual (typeof (int), parameters [1].ParameterType, "#C14");
681 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
682 "5", typeof (InstanceDescriptor)) as InstanceDescriptor;
683 Assert.IsNotNull (idesc, "#D1");
684 Assert.IsNotNull (idesc.Arguments, "#D2");
685 Assert.AreEqual (2, idesc.Arguments.Count, "#D3");
686 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#D4");
687 arguments = (object []) idesc.Arguments;
688 Assert.AreEqual (typeof (E2), arguments [0], "#D5");
689 Assert.AreEqual (typeof (int), arguments [1].GetType (), "#D6");
690 Assert.AreEqual (5, arguments [1], "#D7");
691 Assert.IsTrue (idesc.IsComplete, "#D8");
692 mi = idesc.MemberInfo as MethodInfo;
693 Assert.IsNotNull (mi, "#D9");
694 Assert.AreEqual ("ToObject", mi.Name, "#D10");
695 Assert.AreEqual (typeof (Enum), mi.DeclaringType, "#D11");
696 parameters = mi.GetParameters ();
697 Assert.AreEqual (2, parameters.Length, "#D12");
698 Assert.AreEqual (typeof (Type), parameters [0].ParameterType, "#D13");
699 Assert.AreEqual (typeof (int), parameters [1].ParameterType, "#D14");
701 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
702 3, typeof (InstanceDescriptor)) as InstanceDescriptor;
703 Assert.IsNotNull (idesc, "#E1");
704 Assert.IsNotNull (idesc.Arguments, "#E2");
705 Assert.AreEqual (2, idesc.Arguments.Count, "#E3");
706 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#E4");
707 arguments = (object []) idesc.Arguments;
708 Assert.AreEqual (typeof (E2), arguments [0], "#E5");
709 Assert.AreEqual (typeof (int), arguments [1].GetType (), "#E6");
710 Assert.AreEqual (3, arguments [1], "#E7");
711 Assert.IsTrue (idesc.IsComplete, "#E8");
712 mi = idesc.MemberInfo as MethodInfo;
713 Assert.IsNotNull (mi, "#E9");
714 Assert.AreEqual ("ToObject", mi.Name, "#E10");
715 Assert.AreEqual (typeof (Enum), mi.DeclaringType, "#E11");
716 parameters = mi.GetParameters ();
717 Assert.AreEqual (2, parameters.Length, "#E12");
718 Assert.AreEqual (typeof (Type), parameters [0].ParameterType, "#E13");
719 Assert.AreEqual (typeof (int), parameters [1].ParameterType, "#E14");
722 converter.ConvertTo (null, CultureInfo.InvariantCulture,
723 null, typeof (InstanceDescriptor));
725 } catch (NotSupportedException ex) {
726 // 'EnumConverter' is unable to convert '(null)'
727 // to 'System.ComponentModel.Design.Serialization.InstanceDescriptor'
728 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#F2");
729 Assert.IsNull (ex.InnerException, "#F3");
730 Assert.IsNotNull (ex.Message, "#F4");
731 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (EnumConverter).Name + "'") != -1, "#F5");
732 Assert.IsTrue (ex.Message.IndexOf ("'(null)'") != -1, "#F6");
733 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (InstanceDescriptor).FullName + "'") != -1, "#F7");
737 converter.ConvertTo (null, CultureInfo.InvariantCulture,
738 "2,1", typeof (InstanceDescriptor));
740 } catch (FormatException ex) {
741 // Input string was not in a correct format
742 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#G2");
743 Assert.IsNull (ex.InnerException, "#G3");
744 Assert.IsNotNull (ex.Message, "#G4");
748 converter.ConvertTo (null, CultureInfo.InvariantCulture,
749 "Cc", typeof (InstanceDescriptor));
751 } catch (FormatException ex) {
752 // Input string was not in a correct format
753 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#H2");
754 Assert.IsNull (ex.InnerException, "#H3");
755 Assert.IsNotNull (ex.Message, "#H4");
759 converter.ConvertTo (null, CultureInfo.InvariantCulture,
760 (E2) 666 | (E2) 222, typeof (InstanceDescriptor));
762 } catch (NotSupportedException ex) {
763 // 'EnumConverter' is unable to convert 'MonoTests.System.ComponentModel.EnumConverterTests+E2'
764 // to 'System.ComponentModel.Design.Serialization.InstanceDescriptor'
765 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#I2");
766 Assert.IsNull (ex.InnerException, "#I3");
767 Assert.IsNotNull (ex.Message, "#I4");
768 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (EnumConverter).Name + "'") != -1, "#I5");
769 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (E2).FullName + "'") != -1, "#I6");
770 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (InstanceDescriptor).FullName + "'") != -1, "#I7");
773 converter = new EnumConverter (typeof (F2));
774 idesc = converter.ConvertTo (null, CultureInfo.InvariantCulture,
775 F2.Bb | F2.Dd, typeof (InstanceDescriptor))
776 as InstanceDescriptor;
777 Assert.IsNotNull (idesc, "#J1");
778 Assert.IsNotNull (idesc.Arguments, "#J2");
779 Assert.AreEqual (2, idesc.Arguments.Count, "#J3");
780 Assert.AreEqual (typeof (object []), idesc.Arguments.GetType (), "#J4");
781 arguments = (object []) idesc.Arguments;
782 Assert.AreEqual (typeof (F2), arguments [0], "#J5");
783 Assert.AreEqual (typeof (byte), arguments [1].GetType (), "#J6");
784 Assert.AreEqual (10, arguments [1], "#J7");
785 Assert.IsTrue (idesc.IsComplete, "#J8");
786 mi = idesc.MemberInfo as MethodInfo;
787 Assert.IsNotNull (mi, "#J9");
788 Assert.AreEqual ("ToObject", mi.Name, "#J10");
789 Assert.AreEqual (typeof (Enum), mi.DeclaringType, "#J11");
790 parameters = mi.GetParameters ();
791 Assert.AreEqual (2, parameters.Length, "#J12");
792 Assert.AreEqual (typeof (Type), parameters [0].ParameterType, "#J13");
793 Assert.AreEqual (typeof (byte), parameters [1].ParameterType, "#J14");
797 public void ConvertTo_String ()
799 EnumConverter converter = new EnumConverter (typeof (E));
801 Assert.AreEqual ("Bb", converter.ConvertTo (null,
802 CultureInfo.InvariantCulture, E.Bb,
803 typeof (string)), "#A1");
804 Assert.AreEqual ("Dd", converter.ConvertTo (null,
805 CultureInfo.InvariantCulture, 3,
806 typeof (string)), "#A2");
807 Assert.AreEqual (string.Empty, converter.ConvertTo (
808 null, CultureInfo.InvariantCulture, null,
809 typeof (string)), "#A3");
810 Assert.AreEqual ("Cc", converter.ConvertTo (
811 null, CultureInfo.InvariantCulture, (E) 2,
812 typeof (string)), "#A4");
813 Assert.AreEqual ("Cc", converter.ConvertTo (null,
814 CultureInfo.InvariantCulture, E2.Bb,
815 typeof (string)), "#A5");
816 Assert.AreEqual ("Dd", converter.ConvertTo (null,
817 CultureInfo.InvariantCulture, E.Bb | E.Dd,
818 typeof (string)), "#A6");
821 converter.ConvertTo (null, CultureInfo.InvariantCulture,
822 (E) 666, typeof (string));
824 } catch (ArgumentException ex) {
825 // The value '666' is not a valid value for the enum 'E'
826 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
827 Assert.IsNull (ex.InnerException, "#B3");
828 Assert.IsNotNull (ex.Message, "#B4");
829 Assert.IsTrue (ex.Message.IndexOf ("'666'") != -1, "#B5");
830 Assert.IsTrue (ex.Message.IndexOf ("'E'") != -1, "#B6");
831 Assert.IsNull (ex.ParamName, "#B7");
835 converter.ConvertTo (null, CultureInfo.InvariantCulture,
836 "Cc", typeof (string));
838 } catch (FormatException ex) {
839 // Input string was not in a correct format
840 Assert.AreEqual (typeof (FormatException), ex.GetType (), "#C2");
841 Assert.IsNull (ex.InnerException, "#C3");
842 Assert.IsNotNull (ex.Message, "#C4");
846 converter = new EnumConverter (typeof (E2));
848 Assert.AreEqual ("Bb", converter.ConvertTo (null,
849 CultureInfo.InvariantCulture, E2.Bb,
850 typeof (string)), "#B1");
851 Assert.AreEqual ("Aa, Bb", converter.ConvertTo (null,
852 CultureInfo.InvariantCulture, 3,
853 typeof (string)), "#B2");
854 Assert.AreEqual (string.Empty, converter.ConvertTo (
855 null, CultureInfo.InvariantCulture, null,
856 typeof (string)), "#B3");
857 Assert.AreEqual ("Bb", converter.ConvertTo (
858 null, CultureInfo.InvariantCulture, (E2) 2,
859 typeof (string)), "#B4");
860 Assert.AreEqual ("Aa, Bb", converter.ConvertTo (
861 null, CultureInfo.InvariantCulture, E.Dd,
862 typeof (string)), "#B5");
863 Assert.AreEqual ("Bb, Dd", converter.ConvertTo (null,
864 CultureInfo.InvariantCulture, E2.Bb | E2.Dd,
865 typeof (string)), "#B6");