2 // System.ComponentModel.PropertyDescriptorCollection test cases
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // (c) 2005 Novell, Inc. (http://www.ximian.com)
11 using System.Collections;
12 using System.ComponentModel;
13 using System.Globalization;
14 using System.Threading;
16 using NUnit.Framework;
18 namespace MonoTests.System.ComponentModel
21 public class PropertyDescriptorCollectionTests
23 private CultureInfo originalCulture;
28 originalCulture = Thread.CurrentThread.CurrentCulture;
32 public void TearDown ()
34 Thread.CurrentThread.CurrentCulture = originalCulture;
40 PropertyDescriptorCollection descriptors = PropertyDescriptorCollection.Empty;
41 Assert.AreEqual (0, descriptors.Count);
42 AssertReadOnly (descriptors, "Empty");
48 PropertyDescriptor descA = new MockPropertyDescriptor ("hehe_\u0061\u030a", 2);
49 PropertyDescriptor descB = new MockPropertyDescriptor ("heh_\u00e5", 3);
50 PropertyDescriptor descC = new MockPropertyDescriptor ("Foo", 5);
51 PropertyDescriptor descD = new MockPropertyDescriptor ("FOo", 6);
52 PropertyDescriptor descE = new MockPropertyDescriptor ("Aim", 1);
53 PropertyDescriptor descF = new MockPropertyDescriptor ("Bar", 4);
55 PropertyDescriptorCollection col = new PropertyDescriptorCollection (
56 new PropertyDescriptor [] { descA, descB, descC, descD, descE, descF });
58 Assert.IsNull (col.Find ("heh_\u0061\u030a", false), "#1");
59 Assert.IsNull (col.Find ("hehe_\u00e5", false), "#2");
60 Assert.AreSame (descA, col.Find ("hehe_\u0061\u030a", false), "#3");
61 Assert.AreSame (descB, col.Find ("heh_\u00e5", false), "#4");
62 Assert.IsNull (col.Find ("foo", false), "#5");
63 Assert.AreSame (descC, col.Find ("foo", true), "#6");
64 Assert.AreSame (descD, col.Find ("FOo", false), "#7");
65 Assert.AreSame (descC, col.Find ("FOo", true), "#8");
66 Assert.IsNull (col.Find ("fOo", false), "#9");
67 Assert.AreSame (descC, col.Find ("fOo", true), "#10");
68 Assert.IsNull (col.Find ("AIm", false), "#11");
69 Assert.AreSame (descE, col.Find ("AIm", true), "#12");
70 Assert.IsNull (col.Find ("AiM", false), "#13");
71 Assert.AreSame (descE, col.Find ("AiM", true), "#14");
72 Assert.AreSame (descE, col.Find ("Aim", false), "#15");
73 Assert.AreSame (descE, col.Find ("Aim", true), "#16");
77 public void Find_Name_Null ()
79 PropertyDescriptorCollection descriptors;
81 descriptors = new PropertyDescriptorCollection (
82 new PropertyDescriptor[] { new MockPropertyDescriptor ("A", 1),
83 new MockPropertyDescriptor ("b", 2)});
86 descriptors.Find (null, false);
88 } catch (ArgumentNullException ex) {
89 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
90 Assert.IsNull (ex.InnerException, "#A3");
91 Assert.IsNotNull (ex.Message, "#A4");
92 Assert.IsNotNull (ex.ParamName, "#A5");
96 descriptors.Find (null, true);
98 } catch (ArgumentNullException ex) {
99 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
100 Assert.IsNull (ex.InnerException, "#B3");
101 Assert.IsNotNull (ex.Message, "#B4");
102 Assert.IsNotNull (ex.ParamName, "#B5");
105 descriptors = PropertyDescriptorCollection.Empty;
108 descriptors.Find (null, false);
110 } catch (ArgumentNullException ex) {
111 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#C2");
112 Assert.IsNull (ex.InnerException, "#C3");
113 Assert.IsNotNull (ex.Message, "#C4");
114 Assert.IsNotNull (ex.ParamName, "#C5");
118 descriptors.Find (null, true);
120 } catch (ArgumentNullException ex) {
121 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#D2");
122 Assert.IsNull (ex.InnerException, "#D3");
123 Assert.IsNotNull (ex.Message, "#D4");
124 Assert.IsNotNull (ex.ParamName, "#D5");
131 IList list = ((IList) new PropertyDescriptorCollection (null));
133 Assert.AreEqual (0, list.Count, "#1");
135 Assert.IsFalse (list.IsFixedSize, "#2");
137 Assert.IsTrue (list.IsFixedSize, "#2");
139 Assert.IsFalse (list.IsReadOnly, "#3");
140 Assert.IsFalse (list.IsSynchronized, "#4");
141 Assert.IsNull (list.SyncRoot, "#5");
145 public void IList_Add_Null ()
147 IList list = ((IList) new PropertyDescriptorCollection (null));
148 Assert.AreEqual (0, list.Count, "#1");
150 Assert.AreEqual (1, list.Count, "#2");
154 [ExpectedException (typeof (InvalidCastException))]
155 public void IList_Add_NoPropertyDescriptor ()
157 IList list = ((IList) new PropertyDescriptorCollection (null));
162 public void IDictionary ()
164 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
166 Assert.AreEqual (0, dictionary.Count, "#1");
168 Assert.IsFalse (dictionary.IsFixedSize, "#2");
170 Assert.IsTrue (dictionary.IsFixedSize, "#2");
172 Assert.IsFalse (dictionary.IsReadOnly, "#3");
173 Assert.IsFalse (dictionary.IsSynchronized, "#4");
174 Assert.IsNull (dictionary.SyncRoot, "#5");
179 [ExpectedException (typeof(ArgumentException))]
180 public void IDictionary_Add_Null ()
182 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
183 dictionary.Add ("whatever", null);
187 [ExpectedException (typeof (ArgumentException))]
188 public void IDictionary_Add_NoPropertyDescriptor ()
190 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
191 dictionary.Add ("whatever", 5);
194 [Test] // this [String]
195 public void Indexer2 ()
197 PropertyDescriptor descA = new MockPropertyDescriptor ("hehe_\u0061\u030a", 2);
198 PropertyDescriptor descB = new MockPropertyDescriptor ("heh_\u00e5", 3);
199 PropertyDescriptor descC = new MockPropertyDescriptor ("Foo", 5);
200 PropertyDescriptor descD = new MockPropertyDescriptor ("FOo", 6);
201 PropertyDescriptor descE = new MockPropertyDescriptor ("Aim", 1);
202 PropertyDescriptor descF = new MockPropertyDescriptor ("Bar", 4);
204 PropertyDescriptorCollection col = new PropertyDescriptorCollection (
205 new PropertyDescriptor [] { descA, descB, descC, descD, descE, descF });
207 Assert.IsNull (col ["heh_\u0061\u030a"], "#1");
208 Assert.IsNull (col ["hehe_\u00e5"], "#2");
209 Assert.AreSame (descA, col ["hehe_\u0061\u030a"], "#3");
210 Assert.AreSame (descB, col ["heh_\u00e5"], "#4");
211 Assert.IsNull (col ["foo"], "#5");
212 Assert.AreSame (descD, col ["FOo"], "#6");
213 Assert.IsNull (col ["fOo"], "#7");
214 Assert.IsNull (col ["AIm"], "#8");
215 Assert.IsNull (col ["AiM"], "#9");
216 Assert.AreSame (descE, col ["Aim"], "#10");
220 public void Indexer2_Name_Null ()
222 PropertyDescriptorCollection descriptors;
224 descriptors = new PropertyDescriptorCollection (
225 new PropertyDescriptor [] { new MockPropertyDescriptor ("A", 1),
226 new MockPropertyDescriptor ("b", 2)});
229 PropertyDescriptor desc = descriptors [(string) null];
230 Assert.Fail ("#A1:" + desc);
231 } catch (ArgumentNullException ex) {
232 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
233 Assert.IsNull (ex.InnerException, "#A3");
234 Assert.IsNotNull (ex.Message, "#A4");
235 Assert.IsNotNull (ex.ParamName, "#A5");
238 descriptors = PropertyDescriptorCollection.Empty;
241 PropertyDescriptor desc = descriptors [(string) null];
242 Assert.Fail ("#B1:" + desc);
243 } catch (ArgumentNullException ex) {
244 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
245 Assert.IsNull (ex.InnerException, "#B3");
246 Assert.IsNotNull (ex.Message, "#B4");
247 Assert.IsNotNull (ex.ParamName, "#B5");
252 public void ReadOnly ()
254 PropertyDescriptorCollection descriptors = new PropertyDescriptorCollection(null, true);
255 AssertReadOnly (descriptors, "ReadOnly");
262 PropertyDescriptorCollection descriptors;
263 PropertyDescriptorCollection sorted;
265 PropertyDescriptor descA = new MockPropertyDescriptor("Foo", 2);
266 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
267 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
268 PropertyDescriptor descD = new MockPropertyDescriptor("AIm", 5);
269 PropertyDescriptor descE = new MockPropertyDescriptor("Boo", 4);
270 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
272 PropertyDescriptor [] props = new PropertyDescriptor [] {
273 descA, descB, descC, descD, descE, descF };
274 descriptors = new PropertyDescriptorCollection (props);
276 Assert.AreSame (descA, descriptors [0], "#A1");
277 Assert.AreSame (descB, descriptors [1], "#A2");
278 Assert.AreSame (descC, descriptors [2], "#A3");
279 Assert.AreSame (descD, descriptors [3], "#A4");
280 Assert.AreSame (descE, descriptors [4], "#A5");
281 Assert.AreSame (descF, descriptors [5], "#A6");
283 sorted = descriptors.Sort ();
285 Assert.AreSame (descA, descriptors [0], "#B1");
286 Assert.AreSame (descB, descriptors [1], "#B2");
287 Assert.AreSame (descC, descriptors [2], "#B3");
288 Assert.AreSame (descD, descriptors [3], "#B4");
289 Assert.AreSame (descE, descriptors [4], "#B5");
290 Assert.AreSame (descF, descriptors [5], "#B6");
292 Assert.AreSame (descB, sorted [0], "#C1");
293 Assert.AreSame (descD, sorted [1], "#C2");
294 Assert.AreSame (descC, sorted [2], "#C3");
295 Assert.AreSame (descE, sorted [3], "#C4");
296 Assert.AreSame (descA, sorted [4], "#C5");
297 Assert.AreSame (descF, sorted [5], "#C6");
300 [Test] // Sort (String [])
303 PropertyDescriptorCollection descriptors;
304 PropertyDescriptorCollection sorted;
306 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
307 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
308 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
309 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
310 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
311 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
313 PropertyDescriptor [] props = new PropertyDescriptor [] {
314 descA, descB, descC, descD, descE, descF };
315 descriptors = new PropertyDescriptorCollection (props);
317 Assert.AreSame (descA, descriptors [0], "#A1");
318 Assert.AreSame (descB, descriptors [1], "#A2");
319 Assert.AreSame (descC, descriptors [2], "#A3");
320 Assert.AreSame (descD, descriptors [3], "#A4");
321 Assert.AreSame (descE, descriptors [4], "#A5");
322 Assert.AreSame (descF, descriptors [5], "#A5");
324 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" });
326 Assert.AreSame (descA, descriptors [0], "#B1");
327 Assert.AreSame (descB, descriptors [1], "#B2");
328 Assert.AreSame (descC, descriptors [2], "#B3");
329 Assert.AreSame (descD, descriptors [3], "#B4");
330 Assert.AreSame (descE, descriptors [4], "#B5");
331 Assert.AreSame (descF, descriptors [5], "#B6");
333 Assert.AreSame (descA, sorted [0], "#C1");
334 Assert.AreSame (descE, sorted [1], "#C2");
335 Assert.AreSame (descB, sorted [2], "#C3");
336 Assert.AreSame (descD, sorted [3], "#C4");
337 Assert.AreSame (descC, sorted [4], "#C5");
338 Assert.AreSame (descF, sorted [5], "#C6");
340 sorted = descriptors.Sort ((string []) null);
342 Assert.AreSame (descA, descriptors [0], "#D1");
343 Assert.AreSame (descB, descriptors [1], "#D2");
344 Assert.AreSame (descC, descriptors [2], "#D3");
345 Assert.AreSame (descD, descriptors [3], "#D4");
346 Assert.AreSame (descE, descriptors [4], "#D5");
347 Assert.AreSame (descF, descriptors [5], "#D6");
349 Assert.AreSame (descB, sorted [0], "#E1");
350 Assert.AreSame (descD, sorted [1], "#E2");
351 Assert.AreSame (descC, sorted [2], "#E3");
352 Assert.AreSame (descE, sorted [3], "#E4");
353 Assert.AreSame (descA, sorted [4], "#E5");
354 Assert.AreSame (descF, sorted [5], "#E6");
357 [Test] // Sort (IComparer)
360 PropertyDescriptorCollection descriptors;
361 PropertyDescriptorCollection sorted;
363 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
364 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
365 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
366 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
367 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
368 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
370 PropertyDescriptor [] props = new PropertyDescriptor [] {
371 descA, descB, descC, descD, descE, descF };
372 descriptors = new PropertyDescriptorCollection (props);
374 Assert.AreSame (descA, descriptors [0], "#A1");
375 Assert.AreSame (descB, descriptors [1], "#A2");
376 Assert.AreSame (descC, descriptors [2], "#A3");
377 Assert.AreSame (descD, descriptors [3], "#A4");
378 Assert.AreSame (descE, descriptors [4], "#A5");
379 Assert.AreSame (descF, descriptors [5], "#A6");
381 sorted = descriptors.Sort (new ComparableComparer ());
383 Assert.AreSame (descA, descriptors [0], "#B1");
384 Assert.AreSame (descB, descriptors [1], "#B2");
385 Assert.AreSame (descC, descriptors [2], "#B3");
386 Assert.AreSame (descD, descriptors [3], "#B4");
387 Assert.AreSame (descE, descriptors [4], "#B5");
388 Assert.AreSame (descF, descriptors [5], "#B6");
390 Assert.AreSame (descC, sorted [0], "#C1");
391 Assert.AreSame (descA, sorted [1], "#C2");
392 Assert.AreSame (descB, sorted [2], "#C3");
393 Assert.AreSame (descE, sorted [3], "#C4");
394 Assert.AreSame (descD, sorted [4], "#C5");
395 Assert.AreSame (descF, sorted [5], "#C6");
397 sorted = descriptors.Sort ((Comparer) null);
399 Assert.AreSame (descA, descriptors [0], "#D1");
400 Assert.AreSame (descB, descriptors [1], "#D2");
401 Assert.AreSame (descC, descriptors [2], "#D3");
402 Assert.AreSame (descD, descriptors [3], "#D4");
403 Assert.AreSame (descE, descriptors [4], "#D5");
404 Assert.AreSame (descF, descriptors [5], "#D6");
406 Assert.AreSame (descB, sorted [0], "#E1");
407 Assert.AreSame (descD, sorted [1], "#E2");
408 Assert.AreSame (descC, sorted [2], "#E3");
409 Assert.AreSame (descE, sorted [3], "#E4");
410 Assert.AreSame (descA, sorted [4], "#E5");
411 Assert.AreSame (descF, sorted [5], "#E6");
414 [Test] // Sort (String [], IComparer)
417 PropertyDescriptorCollection descriptors;
418 PropertyDescriptorCollection sorted;
420 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
421 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
422 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
423 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
424 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
425 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
427 PropertyDescriptor [] props = new PropertyDescriptor [] {
428 descA, descB, descC, descD, descE, descF };
429 descriptors = new PropertyDescriptorCollection (props);
431 Assert.AreSame (descA, descriptors [0], "#A1");
432 Assert.AreSame (descB, descriptors [1], "#A2");
433 Assert.AreSame (descC, descriptors [2], "#A3");
434 Assert.AreSame (descD, descriptors [3], "#A4");
435 Assert.AreSame (descE, descriptors [4], "#A5");
436 Assert.AreSame (descF, descriptors [5], "#A6");
438 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" },
439 new ComparableComparer ());
441 Assert.AreSame (descA, descriptors [0], "#B1");
442 Assert.AreSame (descB, descriptors [1], "#B2");
443 Assert.AreSame (descC, descriptors [2], "#B3");
444 Assert.AreSame (descD, descriptors [3], "#B4");
445 Assert.AreSame (descE, descriptors [4], "#B5");
446 Assert.AreSame (descF, descriptors [5], "#B6");
448 Assert.AreSame (descA, sorted [0], "#C1");
449 Assert.AreSame (descE, sorted [1], "#C2");
450 Assert.AreSame (descC, sorted [2], "#C3");
451 Assert.AreSame (descB, sorted [3], "#C4");
452 Assert.AreSame (descD, sorted [4], "#C5");
453 Assert.AreSame (descF, sorted [5], "#C6");
455 sorted = descriptors.Sort ((string []) null, new ComparableComparer ());
457 Assert.AreSame (descA, descriptors [0], "#D1");
458 Assert.AreSame (descB, descriptors [1], "#D2");
459 Assert.AreSame (descC, descriptors [2], "#D3");
460 Assert.AreSame (descD, descriptors [3], "#D4");
461 Assert.AreSame (descE, descriptors [4], "#D5");
462 Assert.AreSame (descF, descriptors [5], "#D6");
464 Assert.AreSame (descC, sorted [0], "#E1");
465 Assert.AreSame (descA, sorted [1], "#E2");
466 Assert.AreSame (descB, sorted [2], "#E3");
467 Assert.AreSame (descE, sorted [3], "#E4");
468 Assert.AreSame (descD, sorted [4], "#E5");
469 Assert.AreSame (descF, sorted [5], "#E6");
471 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" },
474 Assert.AreSame (descA, descriptors [0], "#F1");
475 Assert.AreSame (descB, descriptors [1], "#F2");
476 Assert.AreSame (descC, descriptors [2], "#F3");
477 Assert.AreSame (descD, descriptors [3], "#F4");
478 Assert.AreSame (descE, descriptors [4], "#F5");
479 Assert.AreSame (descF, descriptors [5], "#F6");
481 Assert.AreSame (descA, sorted [0], "#G1");
482 Assert.AreSame (descE, sorted [1], "#G2");
483 Assert.AreSame (descB, sorted [2], "#G3");
484 Assert.AreSame (descD, sorted [3], "#G4");
485 Assert.AreSame (descC, sorted [4], "#G5");
486 Assert.AreSame (descF, sorted [5], "#G6");
488 sorted = descriptors.Sort ((string []) null, (Comparer) null);
490 Assert.AreSame (descA, descriptors [0], "#H1");
491 Assert.AreSame (descB, descriptors [1], "#H2");
492 Assert.AreSame (descC, descriptors [2], "#H3");
493 Assert.AreSame (descD, descriptors [3], "#H4");
494 Assert.AreSame (descE, descriptors [4], "#H5");
495 Assert.AreSame (descF, descriptors [5], "#H6");
497 Assert.AreSame (descB, sorted [0], "#I1");
498 Assert.AreSame (descD, sorted [1], "#I2");
499 Assert.AreSame (descC, sorted [2], "#I3");
500 Assert.AreSame (descE, sorted [3], "#I4");
501 Assert.AreSame (descA, sorted [4], "#I5");
502 Assert.AreSame (descF, sorted [5], "#I6");
505 private void AssertReadOnly (PropertyDescriptorCollection descriptors, string testCase)
507 MockPropertyDescriptor mockPropertyDescr = new MockPropertyDescriptor (
508 "Date", DateTime.Now);
511 descriptors.Add (mockPropertyDescr);
512 Assert.Fail (testCase + "#1");
513 } catch (NotSupportedException) {
514 // read-only collection cannot be modified
517 // ensure read-only check if performed before value is checked
519 descriptors.Add (null);
520 Assert.Fail (testCase + "#2");
521 } catch (NotSupportedException) {
522 // read-only collection cannot be modified
526 descriptors.Clear ();
527 Assert.Fail (testCase + "#3");
528 } catch (NotSupportedException) {
529 // read-only collection cannot be modified
533 descriptors.Insert (0, mockPropertyDescr);
534 Assert.Fail (testCase + "#4");
535 } catch (NotSupportedException) {
536 // read-only collection cannot be modified
539 // ensure read-only check if performed before value is checked
541 descriptors.Insert (0, null);
542 Assert.Fail (testCase + "#5");
543 } catch (NotSupportedException) {
544 // read-only collection cannot be modified
548 descriptors.Remove (mockPropertyDescr);
549 Assert.Fail (testCase + "#6");
550 } catch (NotSupportedException) {
551 // read-only collection cannot be modified
554 // ensure read-only check if performed before value is checked
556 descriptors.Remove (null);
557 Assert.Fail (testCase + "#7");
558 } catch (NotSupportedException) {
559 // read-only collection cannot be modified
563 descriptors.RemoveAt (0);
564 Assert.Fail (testCase + "#8");
565 } catch (NotSupportedException) {
566 // read-only collection cannot be modified
569 IList list = (IList) descriptors;
570 Assert.IsTrue (((IList) descriptors).IsReadOnly, testCase + "#9");
572 Assert.IsTrue (((IList) descriptors).IsFixedSize, testCase + "#10");
574 Assert.IsFalse (((IList) descriptors).IsFixedSize, testCase + "#10");
578 list.Add (mockPropertyDescr);
579 Assert.Fail (testCase + "#11");
580 } catch (NotSupportedException) {
581 // read-only collection cannot be modified
584 // ensure read-only check if performed before value is checked
587 Assert.Fail (testCase + "#12");
588 } catch (NotSupportedException) {
589 // read-only collection cannot be modified
594 Assert.Fail (testCase + "#13");
595 } catch (NotSupportedException) {
596 // read-only collection cannot be modified
600 list.Insert (0, mockPropertyDescr);
601 Assert.Fail (testCase + "#14");
602 } catch (NotSupportedException) {
603 // read-only collection cannot be modified
606 // ensure read-only check if performed before value is checked
608 list.Insert (0, null);
609 Assert.Fail (testCase + "#15");
610 } catch (NotSupportedException) {
611 // read-only collection cannot be modified
615 list.Remove (mockPropertyDescr);
616 Assert.Fail (testCase + "#16");
617 } catch (NotSupportedException) {
618 // read-only collection cannot be modified
621 // ensure read-only check if performed before value is checked
624 Assert.Fail (testCase + "#17");
625 } catch (NotSupportedException) {
626 // read-only collection cannot be modified
631 Assert.Fail (testCase + "#18");
632 } catch (NotSupportedException) {
633 // read-only collection cannot be modified
637 list[0] = mockPropertyDescr;
638 Assert.Fail (testCase + "#19");
639 } catch (NotSupportedException) {
640 // read-only collection cannot be modified
643 // ensure read-only check if performed before value is checked
646 Assert.Fail (testCase + "#20");
647 } catch (NotSupportedException) {
648 // read-only collection cannot be modified
651 IDictionary dictionary = (IDictionary) descriptors;
652 Assert.IsTrue (dictionary.IsReadOnly, testCase + "#21");
654 Assert.IsTrue (dictionary.IsFixedSize, testCase + "#22");
656 Assert.IsFalse (dictionary.IsFixedSize, testCase + "#22");
660 dictionary.Add ("test", mockPropertyDescr);
661 Assert.Fail (testCase + "#23");
662 } catch (NotSupportedException) {
663 // read-only collection cannot be modified
666 // value is checked before read-only check
668 dictionary.Add ("test", null);
669 Assert.Fail (testCase + "#24");
670 } catch (ArgumentException) {
671 // read-only collection cannot be modified
676 Assert.Fail (testCase + "#25");
677 } catch (NotSupportedException) {
678 // read-only collection cannot be modified
682 dictionary[0] = mockPropertyDescr;
683 Assert.Fail (testCase + "#26");
684 } catch (NotSupportedException) {
685 // read-only collection cannot be modified
688 // ensure read-only check if performed before value is checked
690 dictionary[0] = null;
691 Assert.Fail (testCase + "#27");
692 } catch (NotSupportedException) {
693 // read-only collection cannot be modified
697 private class MockPropertyDescriptor : PropertyDescriptor
699 private object _value;
701 public MockPropertyDescriptor (string name, object value) : base (name, null)
706 public override bool CanResetValue (object component)
711 public override object GetValue (object component)
716 public override void ResetValue (object component)
721 public override void SetValue (object component, object value)
726 public override bool ShouldSerializeValue (object component)
731 public override Type ComponentType {
733 if (_value != null) {
734 return _value.GetType ();
740 public override bool IsReadOnly {
746 public override Type PropertyType {
748 return ComponentType;
753 class ComparableComparer : IComparer
755 public int Compare (object x, object y)
757 PropertyDescriptor descX = x as PropertyDescriptor;
758 PropertyDescriptor descY = y as PropertyDescriptor;
760 if (descX == null && descY == null)
767 IComparable compX = descX.GetValue (null) as IComparable;
768 IComparable compY = descY.GetValue (null) as IComparable;
770 if (compX == null && compY == null)
776 return compX.CompareTo (compY);