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");
134 Assert.IsFalse (list.IsFixedSize, "#2");
135 Assert.IsFalse (list.IsReadOnly, "#3");
136 Assert.IsFalse (list.IsSynchronized, "#4");
137 Assert.IsNull (list.SyncRoot, "#5");
141 public void IList_Add_Null ()
143 IList list = ((IList) new PropertyDescriptorCollection (null));
144 Assert.AreEqual (0, list.Count, "#1");
146 Assert.AreEqual (1, list.Count, "#2");
150 [ExpectedException (typeof (InvalidCastException))]
151 public void IList_Add_NoPropertyDescriptor ()
153 IList list = ((IList) new PropertyDescriptorCollection (null));
158 public void IDictionary ()
160 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
162 Assert.AreEqual (0, dictionary.Count, "#1");
163 Assert.IsFalse (dictionary.IsFixedSize, "#2");
164 Assert.IsFalse (dictionary.IsReadOnly, "#3");
165 Assert.IsFalse (dictionary.IsSynchronized, "#4");
166 Assert.IsNull (dictionary.SyncRoot, "#5");
171 [ExpectedException (typeof(ArgumentException))]
172 public void IDictionary_Add_Null ()
174 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
175 dictionary.Add ("whatever", null);
179 [ExpectedException (typeof (ArgumentException))]
180 public void IDictionary_Add_NoPropertyDescriptor ()
182 IDictionary dictionary = ((IDictionary) new PropertyDescriptorCollection (null));
183 dictionary.Add ("whatever", 5);
186 [Test] // this [String]
187 public void Indexer2 ()
189 PropertyDescriptor descA = new MockPropertyDescriptor ("hehe_\u0061\u030a", 2);
190 PropertyDescriptor descB = new MockPropertyDescriptor ("heh_\u00e5", 3);
191 PropertyDescriptor descC = new MockPropertyDescriptor ("Foo", 5);
192 PropertyDescriptor descD = new MockPropertyDescriptor ("FOo", 6);
193 PropertyDescriptor descE = new MockPropertyDescriptor ("Aim", 1);
194 PropertyDescriptor descF = new MockPropertyDescriptor ("Bar", 4);
196 PropertyDescriptorCollection col = new PropertyDescriptorCollection (
197 new PropertyDescriptor [] { descA, descB, descC, descD, descE, descF });
199 Assert.IsNull (col ["heh_\u0061\u030a"], "#1");
200 Assert.IsNull (col ["hehe_\u00e5"], "#2");
201 Assert.AreSame (descA, col ["hehe_\u0061\u030a"], "#3");
202 Assert.AreSame (descB, col ["heh_\u00e5"], "#4");
203 Assert.IsNull (col ["foo"], "#5");
204 Assert.AreSame (descD, col ["FOo"], "#6");
205 Assert.IsNull (col ["fOo"], "#7");
206 Assert.IsNull (col ["AIm"], "#8");
207 Assert.IsNull (col ["AiM"], "#9");
208 Assert.AreSame (descE, col ["Aim"], "#10");
212 public void Indexer2_Name_Null ()
214 PropertyDescriptorCollection descriptors;
216 descriptors = new PropertyDescriptorCollection (
217 new PropertyDescriptor [] { new MockPropertyDescriptor ("A", 1),
218 new MockPropertyDescriptor ("b", 2)});
221 PropertyDescriptor desc = descriptors [(string) null];
222 Assert.Fail ("#A1:" + desc);
223 } catch (ArgumentNullException ex) {
224 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
225 Assert.IsNull (ex.InnerException, "#A3");
226 Assert.IsNotNull (ex.Message, "#A4");
227 Assert.IsNotNull (ex.ParamName, "#A5");
230 descriptors = PropertyDescriptorCollection.Empty;
233 PropertyDescriptor desc = descriptors [(string) null];
234 Assert.Fail ("#B1:" + desc);
235 } catch (ArgumentNullException ex) {
236 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
237 Assert.IsNull (ex.InnerException, "#B3");
238 Assert.IsNotNull (ex.Message, "#B4");
239 Assert.IsNotNull (ex.ParamName, "#B5");
243 public void ReadOnly ()
245 PropertyDescriptorCollection descriptors = new PropertyDescriptorCollection(null, true);
246 AssertReadOnly (descriptors, "ReadOnly");
252 PropertyDescriptorCollection descriptors;
253 PropertyDescriptorCollection sorted;
255 PropertyDescriptor descA = new MockPropertyDescriptor("Foo", 2);
256 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
257 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
258 PropertyDescriptor descD = new MockPropertyDescriptor("AIm", 5);
259 PropertyDescriptor descE = new MockPropertyDescriptor("Boo", 4);
260 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
262 PropertyDescriptor [] props = new PropertyDescriptor [] {
263 descA, descB, descC, descD, descE, descF };
264 descriptors = new PropertyDescriptorCollection (props);
266 Assert.AreSame (descA, descriptors [0], "#A1");
267 Assert.AreSame (descB, descriptors [1], "#A2");
268 Assert.AreSame (descC, descriptors [2], "#A3");
269 Assert.AreSame (descD, descriptors [3], "#A4");
270 Assert.AreSame (descE, descriptors [4], "#A5");
271 Assert.AreSame (descF, descriptors [5], "#A6");
273 sorted = descriptors.Sort ();
275 Assert.AreSame (descA, descriptors [0], "#B1");
276 Assert.AreSame (descB, descriptors [1], "#B2");
277 Assert.AreSame (descC, descriptors [2], "#B3");
278 Assert.AreSame (descD, descriptors [3], "#B4");
279 Assert.AreSame (descE, descriptors [4], "#B5");
280 Assert.AreSame (descF, descriptors [5], "#B6");
282 Assert.AreSame (descB, sorted [0], "#C1");
283 Assert.AreSame (descD, sorted [1], "#C2");
284 Assert.AreSame (descC, sorted [2], "#C3");
285 Assert.AreSame (descE, sorted [3], "#C4");
286 Assert.AreSame (descA, sorted [4], "#C5");
287 Assert.AreSame (descF, sorted [5], "#C6");
290 [Test] // Sort (String [])
293 PropertyDescriptorCollection descriptors;
294 PropertyDescriptorCollection sorted;
296 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
297 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
298 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
299 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
300 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
301 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
303 PropertyDescriptor [] props = new PropertyDescriptor [] {
304 descA, descB, descC, descD, descE, descF };
305 descriptors = new PropertyDescriptorCollection (props);
307 Assert.AreSame (descA, descriptors [0], "#A1");
308 Assert.AreSame (descB, descriptors [1], "#A2");
309 Assert.AreSame (descC, descriptors [2], "#A3");
310 Assert.AreSame (descD, descriptors [3], "#A4");
311 Assert.AreSame (descE, descriptors [4], "#A5");
312 Assert.AreSame (descF, descriptors [5], "#A5");
314 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" });
316 Assert.AreSame (descA, descriptors [0], "#B1");
317 Assert.AreSame (descB, descriptors [1], "#B2");
318 Assert.AreSame (descC, descriptors [2], "#B3");
319 Assert.AreSame (descD, descriptors [3], "#B4");
320 Assert.AreSame (descE, descriptors [4], "#B5");
321 Assert.AreSame (descF, descriptors [5], "#B6");
323 Assert.AreSame (descA, sorted [0], "#C1");
324 Assert.AreSame (descE, sorted [1], "#C2");
325 Assert.AreSame (descB, sorted [2], "#C3");
326 Assert.AreSame (descD, sorted [3], "#C4");
327 Assert.AreSame (descC, sorted [4], "#C5");
328 Assert.AreSame (descF, sorted [5], "#C6");
330 sorted = descriptors.Sort ((string []) null);
332 Assert.AreSame (descA, descriptors [0], "#D1");
333 Assert.AreSame (descB, descriptors [1], "#D2");
334 Assert.AreSame (descC, descriptors [2], "#D3");
335 Assert.AreSame (descD, descriptors [3], "#D4");
336 Assert.AreSame (descE, descriptors [4], "#D5");
337 Assert.AreSame (descF, descriptors [5], "#D6");
339 Assert.AreSame (descB, sorted [0], "#E1");
340 Assert.AreSame (descD, sorted [1], "#E2");
341 Assert.AreSame (descC, sorted [2], "#E3");
342 Assert.AreSame (descE, sorted [3], "#E4");
343 Assert.AreSame (descA, sorted [4], "#E5");
344 Assert.AreSame (descF, sorted [5], "#E6");
347 [Test] // Sort (IComparer)
350 PropertyDescriptorCollection descriptors;
351 PropertyDescriptorCollection sorted;
353 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
354 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
355 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
356 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
357 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
358 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
360 PropertyDescriptor [] props = new PropertyDescriptor [] {
361 descA, descB, descC, descD, descE, descF };
362 descriptors = new PropertyDescriptorCollection (props);
364 Assert.AreSame (descA, descriptors [0], "#A1");
365 Assert.AreSame (descB, descriptors [1], "#A2");
366 Assert.AreSame (descC, descriptors [2], "#A3");
367 Assert.AreSame (descD, descriptors [3], "#A4");
368 Assert.AreSame (descE, descriptors [4], "#A5");
369 Assert.AreSame (descF, descriptors [5], "#A6");
371 sorted = descriptors.Sort (new ComparableComparer ());
373 Assert.AreSame (descA, descriptors [0], "#B1");
374 Assert.AreSame (descB, descriptors [1], "#B2");
375 Assert.AreSame (descC, descriptors [2], "#B3");
376 Assert.AreSame (descD, descriptors [3], "#B4");
377 Assert.AreSame (descE, descriptors [4], "#B5");
378 Assert.AreSame (descF, descriptors [5], "#B6");
380 Assert.AreSame (descC, sorted [0], "#C1");
381 Assert.AreSame (descA, sorted [1], "#C2");
382 Assert.AreSame (descB, sorted [2], "#C3");
383 Assert.AreSame (descE, sorted [3], "#C4");
384 Assert.AreSame (descD, sorted [4], "#C5");
385 Assert.AreSame (descF, sorted [5], "#C6");
387 sorted = descriptors.Sort ((Comparer) null);
389 Assert.AreSame (descA, descriptors [0], "#D1");
390 Assert.AreSame (descB, descriptors [1], "#D2");
391 Assert.AreSame (descC, descriptors [2], "#D3");
392 Assert.AreSame (descD, descriptors [3], "#D4");
393 Assert.AreSame (descE, descriptors [4], "#D5");
394 Assert.AreSame (descF, descriptors [5], "#D6");
396 Assert.AreSame (descB, sorted [0], "#E1");
397 Assert.AreSame (descD, sorted [1], "#E2");
398 Assert.AreSame (descC, sorted [2], "#E3");
399 Assert.AreSame (descE, sorted [3], "#E4");
400 Assert.AreSame (descA, sorted [4], "#E5");
401 Assert.AreSame (descF, sorted [5], "#E6");
404 [Test] // Sort (String [], IComparer)
407 PropertyDescriptorCollection descriptors;
408 PropertyDescriptorCollection sorted;
410 PropertyDescriptor descA = new MockPropertyDescriptor ("Foo", 2);
411 PropertyDescriptor descB = new MockPropertyDescriptor ("Aim", 3);
412 PropertyDescriptor descC = new MockPropertyDescriptor ("Bim", 1);
413 PropertyDescriptor descD = new MockPropertyDescriptor ("AIm", 5);
414 PropertyDescriptor descE = new MockPropertyDescriptor ("Boo", 4);
415 PropertyDescriptor descF = new MockPropertyDescriptor ("FOo", 6);
417 PropertyDescriptor [] props = new PropertyDescriptor [] {
418 descA, descB, descC, descD, descE, descF };
419 descriptors = new PropertyDescriptorCollection (props);
421 Assert.AreSame (descA, descriptors [0], "#A1");
422 Assert.AreSame (descB, descriptors [1], "#A2");
423 Assert.AreSame (descC, descriptors [2], "#A3");
424 Assert.AreSame (descD, descriptors [3], "#A4");
425 Assert.AreSame (descE, descriptors [4], "#A5");
426 Assert.AreSame (descF, descriptors [5], "#A6");
428 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" },
429 new ComparableComparer ());
431 Assert.AreSame (descA, descriptors [0], "#B1");
432 Assert.AreSame (descB, descriptors [1], "#B2");
433 Assert.AreSame (descC, descriptors [2], "#B3");
434 Assert.AreSame (descD, descriptors [3], "#B4");
435 Assert.AreSame (descE, descriptors [4], "#B5");
436 Assert.AreSame (descF, descriptors [5], "#B6");
438 Assert.AreSame (descA, sorted [0], "#C1");
439 Assert.AreSame (descE, sorted [1], "#C2");
440 Assert.AreSame (descC, sorted [2], "#C3");
441 Assert.AreSame (descB, sorted [3], "#C4");
442 Assert.AreSame (descD, sorted [4], "#C5");
443 Assert.AreSame (descF, sorted [5], "#C6");
445 sorted = descriptors.Sort ((string []) null, new ComparableComparer ());
447 Assert.AreSame (descA, descriptors [0], "#D1");
448 Assert.AreSame (descB, descriptors [1], "#D2");
449 Assert.AreSame (descC, descriptors [2], "#D3");
450 Assert.AreSame (descD, descriptors [3], "#D4");
451 Assert.AreSame (descE, descriptors [4], "#D5");
452 Assert.AreSame (descF, descriptors [5], "#D6");
454 Assert.AreSame (descC, sorted [0], "#E1");
455 Assert.AreSame (descA, sorted [1], "#E2");
456 Assert.AreSame (descB, sorted [2], "#E3");
457 Assert.AreSame (descE, sorted [3], "#E4");
458 Assert.AreSame (descD, sorted [4], "#E5");
459 Assert.AreSame (descF, sorted [5], "#E6");
461 sorted = descriptors.Sort (new string [] { "B", "Foo", null, "A", "Boo" },
464 Assert.AreSame (descA, descriptors [0], "#F1");
465 Assert.AreSame (descB, descriptors [1], "#F2");
466 Assert.AreSame (descC, descriptors [2], "#F3");
467 Assert.AreSame (descD, descriptors [3], "#F4");
468 Assert.AreSame (descE, descriptors [4], "#F5");
469 Assert.AreSame (descF, descriptors [5], "#F6");
471 Assert.AreSame (descA, sorted [0], "#G1");
472 Assert.AreSame (descE, sorted [1], "#G2");
473 Assert.AreSame (descB, sorted [2], "#G3");
474 Assert.AreSame (descD, sorted [3], "#G4");
475 Assert.AreSame (descC, sorted [4], "#G5");
476 Assert.AreSame (descF, sorted [5], "#G6");
478 sorted = descriptors.Sort ((string []) null, (Comparer) null);
480 Assert.AreSame (descA, descriptors [0], "#H1");
481 Assert.AreSame (descB, descriptors [1], "#H2");
482 Assert.AreSame (descC, descriptors [2], "#H3");
483 Assert.AreSame (descD, descriptors [3], "#H4");
484 Assert.AreSame (descE, descriptors [4], "#H5");
485 Assert.AreSame (descF, descriptors [5], "#H6");
487 Assert.AreSame (descB, sorted [0], "#I1");
488 Assert.AreSame (descD, sorted [1], "#I2");
489 Assert.AreSame (descC, sorted [2], "#I3");
490 Assert.AreSame (descE, sorted [3], "#I4");
491 Assert.AreSame (descA, sorted [4], "#I5");
492 Assert.AreSame (descF, sorted [5], "#I6");
495 private void AssertReadOnly (PropertyDescriptorCollection descriptors, string testCase)
497 MockPropertyDescriptor mockPropertyDescr = new MockPropertyDescriptor (
498 "Date", DateTime.Now);
501 descriptors.Add (mockPropertyDescr);
502 Assert.Fail (testCase + "#1");
503 } catch (NotSupportedException) {
504 // read-only collection cannot be modified
507 // ensure read-only check if performed before value is checked
509 descriptors.Add (null);
510 Assert.Fail (testCase + "#2");
511 } catch (NotSupportedException) {
512 // read-only collection cannot be modified
516 descriptors.Clear ();
517 Assert.Fail (testCase + "#3");
518 } catch (NotSupportedException) {
519 // read-only collection cannot be modified
523 descriptors.Insert (0, mockPropertyDescr);
524 Assert.Fail (testCase + "#4");
525 } catch (NotSupportedException) {
526 // read-only collection cannot be modified
529 // ensure read-only check if performed before value is checked
531 descriptors.Insert (0, null);
532 Assert.Fail (testCase + "#5");
533 } catch (NotSupportedException) {
534 // read-only collection cannot be modified
538 descriptors.Remove (mockPropertyDescr);
539 Assert.Fail (testCase + "#6");
540 } catch (NotSupportedException) {
541 // read-only collection cannot be modified
544 // ensure read-only check if performed before value is checked
546 descriptors.Remove (null);
547 Assert.Fail (testCase + "#7");
548 } catch (NotSupportedException) {
549 // read-only collection cannot be modified
553 descriptors.RemoveAt (0);
554 Assert.Fail (testCase + "#8");
555 } catch (NotSupportedException) {
556 // read-only collection cannot be modified
559 IList list = (IList) descriptors;
560 Assert.IsTrue (((IList) descriptors).IsReadOnly, testCase + "#9");
561 Assert.IsTrue (((IList) descriptors).IsFixedSize, testCase + "#10");
564 list.Add (mockPropertyDescr);
565 Assert.Fail (testCase + "#11");
566 } catch (NotSupportedException) {
567 // read-only collection cannot be modified
570 // ensure read-only check if performed before value is checked
573 Assert.Fail (testCase + "#12");
574 } catch (NotSupportedException) {
575 // read-only collection cannot be modified
580 Assert.Fail (testCase + "#13");
581 } catch (NotSupportedException) {
582 // read-only collection cannot be modified
586 list.Insert (0, mockPropertyDescr);
587 Assert.Fail (testCase + "#14");
588 } catch (NotSupportedException) {
589 // read-only collection cannot be modified
592 // ensure read-only check if performed before value is checked
594 list.Insert (0, null);
595 Assert.Fail (testCase + "#15");
596 } catch (NotSupportedException) {
597 // read-only collection cannot be modified
601 list.Remove (mockPropertyDescr);
602 Assert.Fail (testCase + "#16");
603 } catch (NotSupportedException) {
604 // read-only collection cannot be modified
607 // ensure read-only check if performed before value is checked
610 Assert.Fail (testCase + "#17");
611 } catch (NotSupportedException) {
612 // read-only collection cannot be modified
617 Assert.Fail (testCase + "#18");
618 } catch (NotSupportedException) {
619 // read-only collection cannot be modified
623 list[0] = mockPropertyDescr;
624 Assert.Fail (testCase + "#19");
625 } catch (NotSupportedException) {
626 // read-only collection cannot be modified
629 // ensure read-only check if performed before value is checked
632 Assert.Fail (testCase + "#20");
633 } catch (NotSupportedException) {
634 // read-only collection cannot be modified
637 IDictionary dictionary = (IDictionary) descriptors;
638 Assert.IsTrue (dictionary.IsReadOnly, testCase + "#21");
639 Assert.IsTrue (dictionary.IsFixedSize, testCase + "#22");
642 dictionary.Add ("test", mockPropertyDescr);
643 Assert.Fail (testCase + "#23");
644 } catch (NotSupportedException) {
645 // read-only collection cannot be modified
648 // value is checked before read-only check
650 dictionary.Add ("test", null);
651 Assert.Fail (testCase + "#24");
652 } catch (ArgumentException) {
653 // read-only collection cannot be modified
658 Assert.Fail (testCase + "#25");
659 } catch (NotSupportedException) {
660 // read-only collection cannot be modified
664 dictionary[0] = mockPropertyDescr;
665 Assert.Fail (testCase + "#26");
666 } catch (NotSupportedException) {
667 // read-only collection cannot be modified
670 // ensure read-only check if performed before value is checked
672 dictionary[0] = null;
673 Assert.Fail (testCase + "#27");
674 } catch (NotSupportedException) {
675 // read-only collection cannot be modified
679 private class MockPropertyDescriptor : PropertyDescriptor
681 private object _value;
683 public MockPropertyDescriptor (string name, object value) : base (name, null)
688 public override bool CanResetValue (object component)
693 public override object GetValue (object component)
698 public override void ResetValue (object component)
703 public override void SetValue (object component, object value)
708 public override bool ShouldSerializeValue (object component)
713 public override Type ComponentType {
715 if (_value != null) {
716 return _value.GetType ();
722 public override bool IsReadOnly {
728 public override Type PropertyType {
730 return ComponentType;
735 class ComparableComparer : IComparer
737 public int Compare (object x, object y)
739 PropertyDescriptor descX = x as PropertyDescriptor;
740 PropertyDescriptor descY = y as PropertyDescriptor;
742 if (descX == null && descY == null)
749 IComparable compX = descX.GetValue (null) as IComparable;
750 IComparable compY = descY.GetValue (null) as IComparable;
752 if (compX == null && compY == null)
758 return compX.CompareTo (compY);