2 // System.Collections.DictionaryBase
3 // Test suite for System.Collections.DictionaryBase
6 // Carlos Alberto Barcenilla (barce@frlp.utn.edu.ar)
10 using System.Collections;
12 using NUnit.Framework;
14 namespace MonoTests.System.Collections
17 public class DictionaryBaseTest
19 public class ConcreteDictionary : DictionaryBase
21 public bool onInsertFired;
22 public bool onInsertCompleteFired;
23 public bool onValidateFired;
24 public bool onValidateExist;
25 public bool onRemoveFired;
26 public bool onRemoveExist;
27 public bool onRemoveCompleteFired;
28 public bool onClearFired;
29 public bool onClearCompleteFired;
30 public bool onSetFired;
31 public bool onSetExist;
32 public bool onSetCompleteFired;
33 public bool onGetFired;
34 public bool onGetExist;
36 public bool onInsertMustThrowException;
37 public bool onInsertCompleteMustThrowException;
38 public bool onValidateMustThrowException;
39 public bool onRemoveMustThrowException;
40 public bool onRemoveCompleteMustThrowException;
41 public bool onClearMustThrowException;
42 public bool onClearCompleteMustThrowException;
43 public bool onSetMustThrowException;
44 public bool onSetCompleteMustThrowException;
45 public bool onGetMustThrowException;
47 public ConcreteDictionary ()
51 public ConcreteDictionary (int i)
53 for (int j = 0; j < i; j++)
54 ((IDictionary) this).Add (j, j * 2);
58 public IDictionary BaseDictionary {
59 get { return this.Dictionary; }
62 public void ClearFlags ()
64 onInsertFired = false;
65 onInsertCompleteFired = false;
66 onValidateFired = false;
67 onRemoveFired = false;
68 onRemoveCompleteFired = false;
70 onClearCompleteFired = false;
72 onSetCompleteFired = false;
76 protected override void OnValidate (object key, object value)
78 onValidateFired = true;
80 Assert.AreEqual (onValidateExist, BaseDictionary.Contains (key));
81 if (onValidateMustThrowException)
82 throw new Exception ();
83 base.OnValidate (key, value);
86 protected override void OnInsert (object key, object value)
89 Assert.IsFalse (BaseDictionary.Contains (key));
90 if (onInsertMustThrowException)
91 throw new Exception ();
92 base.OnInsert (key, value);
95 protected override void OnInsertComplete (object key, object value)
97 onInsertCompleteFired = true;
98 Assert.IsTrue (BaseDictionary.Contains (key));
99 if (onInsertCompleteMustThrowException)
100 throw new Exception ();
101 base.OnInsertComplete (key, value);
104 protected override void OnRemove (object key, object value)
106 onRemoveFired = true;
107 Assert.AreEqual (onRemoveExist, BaseDictionary.Contains (key));
108 if (onRemoveMustThrowException)
109 throw new Exception ();
110 base.OnRemove (key, value);
113 protected override void OnRemoveComplete (object key, object value)
115 onRemoveCompleteFired = true;
116 Assert.IsFalse (BaseDictionary.Contains (key));
117 if (onRemoveCompleteMustThrowException)
118 throw new Exception ();
119 base.OnRemoveComplete (key, value);
122 protected override void OnClear ()
125 if (onClearMustThrowException)
126 throw new Exception ();
130 protected override void OnClearComplete ()
132 onClearCompleteFired = true;
133 Assert.AreEqual (0, BaseDictionary.Count);
134 if (onClearCompleteMustThrowException)
135 throw new Exception ();
136 base.OnClearComplete ();
139 protected override object OnGet (object key, object currentValue)
142 Assert.AreEqual (onGetExist, BaseDictionary.Contains (key));
143 if (onGetMustThrowException)
144 throw new Exception ();
145 return base.OnGet (key, currentValue);
148 protected override void OnSet (object key, object oldValue, object newValue)
151 Assert.AreEqual (onSetExist, BaseDictionary.Contains (key));
152 if (onSetMustThrowException)
153 throw new Exception ();
154 base.OnSet (key, oldValue, newValue);
157 protected override void OnSetComplete (object key, object oldValue, object newValue)
159 onSetCompleteFired = true;
160 Assert.IsTrue (BaseDictionary.Contains (key));
161 if (onSetCompleteMustThrowException)
162 throw new Exception ();
163 base.OnSetComplete (key, oldValue, newValue);
170 ConcreteDictionary myDictionary = new ConcreteDictionary (10);
171 myDictionary.BaseDictionary.Add(100, 1);
173 Assert.IsTrue (myDictionary.onInsertFired, "#1");
174 Assert.IsTrue (myDictionary.onInsertCompleteFired, "#2");
175 Assert.IsTrue (myDictionary.onValidateFired, "#3");
176 Assert.IsFalse (myDictionary.onRemoveFired, "#4");
177 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#5");
178 Assert.IsFalse (myDictionary.onClearFired, "#6");
179 Assert.IsFalse (myDictionary.onClearCompleteFired, "#7");
180 Assert.IsFalse (myDictionary.onSetFired, "#8");
181 Assert.IsFalse (myDictionary.onSetCompleteFired, "#9");
182 Assert.IsFalse (myDictionary.onGetFired, "#10");
183 Assert.AreEqual (11, myDictionary.Count, "#11");
184 myDictionary.onGetExist = true;
185 Assert.AreEqual (1, myDictionary.BaseDictionary [100], "#12");
189 public void AddOnValidateExcept ()
191 ConcreteDictionary myDictionary = new ConcreteDictionary (30);
192 myDictionary.onValidateMustThrowException = true;
195 myDictionary.BaseDictionary.Add(111,222);
197 } catch (AssertionException) {
199 } catch (Exception ex) {
200 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
201 Assert.IsNull (ex.InnerException, "#A3");
202 Assert.IsNotNull (ex.Message, "#A4");
205 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
206 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
207 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
208 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
209 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
210 Assert.IsFalse (myDictionary.onClearFired, "#B6");
211 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
212 Assert.IsFalse (myDictionary.onSetFired, "#B8");
213 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
214 Assert.IsFalse (myDictionary.onGetFired, "#B10");
215 Assert.AreEqual (30, myDictionary.Count, "#B11");
219 public void AddOnInsertExcept ()
221 ConcreteDictionary myDictionary = new ConcreteDictionary (30);
222 myDictionary.onInsertMustThrowException = true;
225 myDictionary.BaseDictionary.Add (666, 222);
227 } catch (AssertionException) {
229 } catch (Exception ex) {
230 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
231 Assert.IsNull (ex.InnerException, "#A3");
232 Assert.IsNotNull (ex.Message, "#A4");
235 Assert.IsTrue (myDictionary.onValidateFired, "#B1");
236 Assert.IsTrue (myDictionary.onInsertFired, "#B2");
237 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B3");
238 Assert.AreEqual (30, myDictionary.Count, "#B4");
242 public void AddOnInsertCompleteExcept ()
244 ConcreteDictionary myDictionary = new ConcreteDictionary (5);
245 myDictionary.onInsertCompleteMustThrowException = true;
248 myDictionary.BaseDictionary.Add (888, 999);
250 } catch (AssertionException) {
252 } catch (Exception ex) {
253 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
254 Assert.IsNull (ex.InnerException, "#A3");
255 Assert.IsNotNull (ex.Message, "#A4");
258 Assert.IsTrue (myDictionary.onValidateFired, "#B1");
259 Assert.IsTrue (myDictionary.onInsertFired, "#B2");
260 Assert.IsTrue (myDictionary.onInsertCompleteFired, "#B3");
261 Assert.AreEqual (5, myDictionary.Count, "#B4");
265 public void AddNullKey ()
267 ConcreteDictionary myDictionary = new ConcreteDictionary ();
270 myDictionary.BaseDictionary.Add (null, 11);
272 } catch (ArgumentNullException ex) {
273 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
274 Assert.IsNull (ex.InnerException, "#A3");
275 Assert.IsNotNull (ex.Message, "#A4");
276 Assert.AreEqual ("key", ex.ParamName, "#A5");
279 Assert.IsTrue (myDictionary.onValidateFired, "#B1");
280 Assert.IsTrue (myDictionary.onInsertFired, "#B2");
281 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B3");
287 ConcreteDictionary myDictionary = new ConcreteDictionary (30);
288 myDictionary.Clear();
290 Assert.IsTrue (myDictionary.onClearFired, "#1");
291 Assert.IsTrue (myDictionary.onClearCompleteFired, "#2");
292 Assert.AreEqual (0, myDictionary.Count, "#3");
296 public void ClearOnClearExcept ()
298 ConcreteDictionary myDictionary = new ConcreteDictionary (30);
299 myDictionary.onClearMustThrowException = true;
302 myDictionary.Clear ();
304 } catch (AssertionException) {
306 } catch (Exception ex) {
307 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
308 Assert.IsNull (ex.InnerException, "#A3");
309 Assert.IsNotNull (ex.Message, "#A4");
312 Assert.IsTrue (myDictionary.onClearFired, "#B1");
313 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B2");
314 Assert.AreEqual (30, myDictionary.Count, "#B3");
318 public void ClearOnClearCompleteExcept ()
320 ConcreteDictionary myDictionary = new ConcreteDictionary (30);
321 myDictionary.onClearCompleteMustThrowException = true;
324 myDictionary.Clear();
326 } catch (AssertionException) {
328 } catch (Exception ex) {
329 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
330 Assert.IsNull (ex.InnerException, "#A3");
331 Assert.IsNotNull (ex.Message, "#A4");
334 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
335 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
336 Assert.IsFalse (myDictionary.onValidateFired, "#B3");
337 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
338 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
339 Assert.IsTrue (myDictionary.onClearFired, "#B6");
340 Assert.IsTrue (myDictionary.onClearCompleteFired, "#B7");
341 Assert.IsFalse (myDictionary.onSetFired, "#B8");
342 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
343 Assert.IsFalse (myDictionary.onGetFired, "#B10");
344 Assert.AreEqual (0, myDictionary.Count, "#B11");
350 ConcreteDictionary myDictionary = new ConcreteDictionary (19);
351 Assert.AreEqual (19, myDictionary.Count);
355 public void Remove ()
357 ConcreteDictionary myDictionary = new ConcreteDictionary(8);
358 myDictionary.onValidateExist = true;
359 myDictionary.onRemoveExist = true;
360 myDictionary.BaseDictionary.Remove (5);
362 Assert.IsFalse (myDictionary.onInsertFired, "#1");
363 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#2");
364 Assert.IsTrue (myDictionary.onValidateFired, "#3");
365 Assert.IsTrue (myDictionary.onRemoveFired, "#4");
366 Assert.IsTrue (myDictionary.onRemoveCompleteFired, "#5");
367 Assert.IsFalse (myDictionary.onClearFired, "#6");
368 Assert.IsFalse (myDictionary.onClearCompleteFired, "#7");
369 Assert.IsFalse (myDictionary.onSetFired, "#8");
370 Assert.IsFalse (myDictionary.onSetCompleteFired, "#9");
371 Assert.IsFalse (myDictionary.onGetFired, "#10");
372 Assert.AreEqual (7, myDictionary.Count, "#11");
373 Assert.IsNull (myDictionary.BaseDictionary [5], "#12");
377 public void RemoveOnValidateExcept ()
379 ConcreteDictionary myDictionary = new ConcreteDictionary (28);
380 myDictionary.onValidateExist = true;
381 myDictionary.onValidateMustThrowException = true;
384 myDictionary.BaseDictionary.Remove (11);
386 } catch (AssertionException) {
388 } catch (Exception ex) {
389 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
390 Assert.IsNull (ex.InnerException, "#A3");
391 Assert.IsNotNull (ex.Message, "#A4");
394 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
395 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
396 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
397 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
398 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
399 Assert.IsFalse (myDictionary.onClearFired, "#B6");
400 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
401 Assert.IsFalse (myDictionary.onSetFired, "#B8");
402 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
403 Assert.IsFalse (myDictionary.onGetFired, "#B10");
404 Assert.AreEqual (28, myDictionary.Count, "#B11");
405 myDictionary.onGetExist = true;
406 Assert.AreEqual (22, myDictionary.BaseDictionary [11], "#B12");
410 public void RemoveOnRemoveExcept ()
412 ConcreteDictionary myDictionary = new ConcreteDictionary (28);
413 myDictionary.onValidateExist = true;
414 myDictionary.onRemoveExist = true;
415 myDictionary.onRemoveMustThrowException = true;
418 myDictionary.BaseDictionary.Remove (11);
420 } catch (AssertionException) {
422 } catch (Exception ex) {
423 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
424 Assert.IsNull (ex.InnerException, "#A3");
425 Assert.IsNotNull (ex.Message, "#A4");
428 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
429 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
430 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
431 Assert.IsTrue (myDictionary.onRemoveFired, "#B4");
432 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
433 Assert.IsFalse (myDictionary.onClearFired, "#B6");
434 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
435 Assert.IsFalse (myDictionary.onSetFired, "#B8");
436 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
437 Assert.IsFalse (myDictionary.onGetFired, "#B10");
438 Assert.AreEqual (28, myDictionary.Count, "#B11");
439 myDictionary.onGetExist = true;
440 Assert.AreEqual (22, myDictionary.BaseDictionary [11], "#B12");
444 public void RemoveOnRemoveCompleteExcept ()
446 ConcreteDictionary myDictionary = new ConcreteDictionary (28);
447 myDictionary.onValidateExist = true;
448 myDictionary.onRemoveExist = true;
449 myDictionary.onRemoveCompleteMustThrowException = true;
452 myDictionary.BaseDictionary.Remove (11);
454 } catch (AssertionException) {
456 } catch (Exception ex) {
457 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
458 Assert.IsNull (ex.InnerException, "#A3");
459 Assert.IsNotNull (ex.Message, "#A4");
462 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
463 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
464 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
465 Assert.IsTrue (myDictionary.onRemoveFired, "#B4");
466 Assert.IsTrue (myDictionary.onRemoveCompleteFired, "#B5");
467 Assert.IsFalse (myDictionary.onClearFired, "#B6");
468 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
469 Assert.IsFalse (myDictionary.onSetFired, "#B8");
470 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
471 Assert.IsFalse (myDictionary.onGetFired, "#B10");
473 myDictionary.onGetExist = true;
474 Assert.AreEqual (28, myDictionary.Count, "#B11");
475 Assert.AreEqual (22, myDictionary.BaseDictionary [11], "#B12");
477 Assert.AreEqual (27, myDictionary.Count, "#B11");
478 Assert.IsNull (myDictionary.BaseDictionary [11], "#B12");
483 public void RemoveKeyNotInDictionary ()
485 ConcreteDictionary myDictionary = new ConcreteDictionary (28);
486 myDictionary.BaseDictionary.Remove (80);
488 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
489 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
491 Assert.IsFalse (myDictionary.onValidateFired, "#1");
492 Assert.IsFalse (myDictionary.onRemoveFired, "#2");
493 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#3");
495 Assert.IsTrue (myDictionary.onValidateFired, "#1");
496 Assert.IsTrue (myDictionary.onRemoveFired, "#2");
497 Assert.IsTrue (myDictionary.onRemoveCompleteFired, "#3");
499 Assert.IsFalse (myDictionary.onClearFired, "#B6");
500 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
501 Assert.IsFalse (myDictionary.onSetFired, "#B8");
502 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
503 Assert.IsFalse (myDictionary.onGetFired, "#B10");
509 ConcreteDictionary myDictionary = new ConcreteDictionary (19);
510 myDictionary.onGetExist = true;
512 for (int i = 0; i < 19; i++)
513 Assert.AreEqual (i * 2, (int) myDictionary.BaseDictionary [i]);
517 public void Contains ()
519 ConcreteDictionary myDictionary = new ConcreteDictionary (14);
520 for (int i = 0; i < 14; i++)
521 Assert.IsTrue (myDictionary.BaseDictionary.Contains (i), "Must contain " + i);
522 for (int i = 14; i < 34; i++)
523 Assert.IsFalse (myDictionary.BaseDictionary.Contains (i), "Must not contain " + i);
527 public void GetEnumerator ()
529 ConcreteDictionary myDictionary = new ConcreteDictionary (4);
530 Assert.IsNotNull (myDictionary.GetEnumerator ());
536 ConcreteDictionary myDictionary = new ConcreteDictionary (5);
537 ICollection keys = myDictionary.BaseDictionary.Keys;
540 foreach (int i in keys)
542 Assert.AreEqual (10, total, "#1");
543 Assert.AreEqual (5, keys.Count, "#2");
547 public void Values ()
549 ConcreteDictionary myDictionary = new ConcreteDictionary (5);
550 ICollection values = myDictionary.BaseDictionary.Values;
553 foreach (int i in values)
555 Assert.AreEqual (20, total, "#1");
556 Assert.AreEqual (5, values.Count, "#2");
562 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
563 myDictionary.onGetExist = true;
564 int v = (int) myDictionary.BaseDictionary[10];
566 Assert.IsFalse (myDictionary.onInsertFired, "#1");
567 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#2");
568 Assert.IsFalse (myDictionary.onValidateFired, "#3");
569 Assert.IsFalse (myDictionary.onRemoveFired, "#4");
570 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#5");
571 Assert.IsFalse (myDictionary.onClearFired, "#6");
572 Assert.IsFalse (myDictionary.onClearCompleteFired, "#7");
573 Assert.IsFalse (myDictionary.onSetFired, "#8");
574 Assert.IsFalse (myDictionary.onSetCompleteFired, "#9");
575 Assert.IsTrue (myDictionary.onGetFired, "#10");
576 Assert.AreEqual (20, v, "#11");
580 public void GetOnGetExcept ()
582 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
583 myDictionary.onGetExist = true;
584 myDictionary.onGetMustThrowException = true;
587 int v = (int) myDictionary.BaseDictionary [10];
588 Assert.Fail ("#1:" + v);
589 } catch (AssertionException) {
591 } catch (Exception ex) {
592 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
593 Assert.IsNull (ex.InnerException, "#A3");
594 Assert.IsNotNull (ex.Message, "#A4");
597 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
598 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
599 Assert.IsFalse (myDictionary.onValidateFired, "#B3");
600 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
601 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
602 Assert.IsFalse (myDictionary.onClearFired, "#B6");
603 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
604 Assert.IsFalse (myDictionary.onSetFired, "#B8");
605 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
606 Assert.IsTrue (myDictionary.onGetFired, "#B10");
610 public void GetNoKey ()
612 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
613 Assert.IsNull (myDictionary.BaseDictionary [100]);
619 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
620 myDictionary.onValidateExist = true;
621 myDictionary.onSetExist = true;
622 myDictionary.BaseDictionary[10] = 50;
624 Assert.IsFalse (myDictionary.onInsertFired, "#1");
625 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#2");
626 Assert.IsTrue (myDictionary.onValidateFired, "#3");
627 Assert.IsFalse (myDictionary.onRemoveFired, "#4");
628 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#5");
629 Assert.IsFalse (myDictionary.onClearFired, "#6");
630 Assert.IsFalse (myDictionary.onClearCompleteFired, "#7");
631 Assert.IsTrue (myDictionary.onSetFired, "#8");
632 Assert.IsTrue (myDictionary.onSetCompleteFired, "#9");
633 Assert.IsFalse (myDictionary.onGetFired, "#10");
634 myDictionary.onGetExist = true;
635 Assert.AreEqual (50, myDictionary.BaseDictionary [10], "#11");
639 public void SetNewKey ()
641 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
642 myDictionary.BaseDictionary[111] = 222;
644 Assert.IsFalse (myDictionary.onInsertFired, "#1");
645 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#2");
646 Assert.IsTrue (myDictionary.onValidateFired, "#3");
647 Assert.IsFalse (myDictionary.onRemoveFired, "#4");
648 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#5");
649 Assert.IsFalse (myDictionary.onClearFired, "#6");
650 Assert.IsFalse (myDictionary.onClearCompleteFired, "#7");
651 Assert.IsTrue (myDictionary.onSetFired, "#8");
652 Assert.IsTrue (myDictionary.onSetCompleteFired, "#9");
653 Assert.IsFalse (myDictionary.onGetFired, "#10");
654 myDictionary.onGetExist = true;
655 Assert.AreEqual (222, myDictionary.BaseDictionary [111], "#11");
656 Assert.AreEqual (19, myDictionary.Count, "#12");
660 public void SetOnValidateExcept()
662 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
663 myDictionary.onValidateExist = true;
664 myDictionary.onValidateMustThrowException = true;
667 myDictionary.BaseDictionary[10] = 50;
669 } catch (AssertionException) {
671 } catch (Exception ex) {
672 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
673 Assert.IsNull (ex.InnerException, "#A3");
674 Assert.IsNotNull (ex.Message, "#A4");
677 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
678 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
679 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
680 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
681 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
682 Assert.IsFalse (myDictionary.onClearFired, "#B6");
683 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
684 Assert.IsFalse (myDictionary.onSetFired, "#B8");
685 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
686 Assert.IsFalse (myDictionary.onGetFired, "#B10");
687 myDictionary.onGetExist = true;
688 Assert.AreEqual (20, myDictionary.BaseDictionary [10], "#B11");
692 public void SetOnSetExcept()
694 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
695 myDictionary.onValidateExist = true;
696 myDictionary.onSetExist = true;
697 myDictionary.onSetMustThrowException = true;
700 myDictionary.BaseDictionary[10] = 50;
702 } catch (AssertionException) {
704 } catch (Exception ex) {
705 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
706 Assert.IsNull (ex.InnerException, "#A3");
707 Assert.IsNotNull (ex.Message, "#A4");
710 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
711 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
712 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
713 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
714 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
715 Assert.IsFalse (myDictionary.onClearFired, "#B6");
716 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
717 Assert.IsTrue (myDictionary.onSetFired, "#B8");
718 Assert.IsFalse (myDictionary.onSetCompleteFired, "#B9");
719 Assert.IsFalse (myDictionary.onGetFired, "#B10");
720 myDictionary.onGetExist = true;
721 Assert.AreEqual (20, myDictionary.BaseDictionary [10], "#B11");
725 public void SetOnSetCompleteExcept()
727 ConcreteDictionary myDictionary = new ConcreteDictionary (18);
728 myDictionary.onValidateExist = true;
729 myDictionary.onSetExist = true;
730 myDictionary.onSetCompleteMustThrowException = true;
733 myDictionary.BaseDictionary[10] = 50;
735 } catch (AssertionException) {
737 } catch (Exception ex) {
738 Assert.AreEqual (typeof (Exception), ex.GetType (), "#A2");
739 Assert.IsNull (ex.InnerException, "#A3");
740 Assert.IsNotNull (ex.Message, "#A4");
743 Assert.IsFalse (myDictionary.onInsertFired, "#B1");
744 Assert.IsFalse (myDictionary.onInsertCompleteFired, "#B2");
745 Assert.IsTrue (myDictionary.onValidateFired, "#B3");
746 Assert.IsFalse (myDictionary.onRemoveFired, "#B4");
747 Assert.IsFalse (myDictionary.onRemoveCompleteFired, "#B5");
748 Assert.IsFalse (myDictionary.onClearFired, "#B6");
749 Assert.IsFalse (myDictionary.onClearCompleteFired, "#B7");
750 Assert.IsTrue (myDictionary.onSetFired, "#B8");
751 Assert.IsTrue (myDictionary.onSetCompleteFired, "#B9");
752 Assert.IsFalse (myDictionary.onGetFired, "#B10");
753 myDictionary.onGetExist = true;
754 Assert.AreEqual (20, myDictionary.BaseDictionary [10], "#B11");
758 public void IsReadOnly()
760 ConcreteDictionary myDictionary = new ConcreteDictionary (1);
761 Assert.IsFalse (myDictionary.BaseDictionary.IsReadOnly);
765 public void IsFixedSize()
767 ConcreteDictionary myDictionary = new ConcreteDictionary (1);
768 Assert.IsFalse (myDictionary.BaseDictionary.IsFixedSize);
772 public void DictionaryProperty()
774 ConcreteDictionary myDictionary = new ConcreteDictionary (1);
775 Assert.AreEqual (myDictionary, myDictionary.BaseDictionary);
778 public class NullDictionary : DictionaryBase
780 protected override object OnGet (object key, object currentValue)
787 public void NullDictionary_Get ()
789 IDictionary dictionary = new NullDictionary ();
790 dictionary ["a"] = "b";
791 Assert.AreEqual ("b", dictionary ["a"]);
794 public class ModifyDictionary : DictionaryBase
796 protected override object OnGet (object key, object currentValue)
798 (this as IDictionary) [key] = key;
804 public void ModifyDictionary_Get ()
806 IDictionary dictionary = new ModifyDictionary ();
807 dictionary ["a"] = "b";
809 // first time we return "b" - because the value was cached
810 Assert.AreEqual ("b", dictionary ["a"], "#1");
812 Assert.AreEqual ("a", dictionary ["a"], "#1");
814 // second time we return "a" - because it's the value in the dictionary
815 Assert.AreEqual ("a", dictionary ["a"], "#2");
818 public class ThrowDictionary : DictionaryBase
820 protected override object OnGet (object key, object currentValue)
822 throw new ArgumentException ((string) key, (string) currentValue);
827 public void ThrowDictionary_Get ()
829 IDictionary dictionary = new ThrowDictionary ();
830 dictionary ["a"] = "b";
833 object value = dictionary ["a"];
834 Assert.Fail ("#1: " + value);
835 } catch (ArgumentException ex) {
836 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
837 Assert.IsNull (ex.InnerException, "#3");
838 Assert.IsNotNull (ex.Message, "#4");
839 Assert.IsTrue (ex.Message.StartsWith ("a"), "#5");
840 Assert.AreEqual ("b", ex.ParamName, "#6");