Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / Microsoft / Internal / Collections / WeakReferenceCollectionTests.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections;\r
6 using System.Collections.Generic;\r
7 using System.UnitTesting;\r
8 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
9 \r
10 namespace Microsoft.Internal.Collections\r
11 {\r
12     [TestClass]\r
13     public class WeakReferenceCollectionTests\r
14     {\r
15         [TestMethod]\r
16         public void Add_ObjectShouldGetCollected()\r
17         {\r
18             var obj = new object();\r
19             var wrc = new WeakReferenceCollection<object>();\r
20 \r
21             wrc.Add(obj);\r
22 \r
23             var wr = new WeakReference(obj);\r
24             obj = null;\r
25 \r
26             Assert.IsNotNull(wr.Target, "Object should NOT have been collected yet!");\r
27 \r
28             GC.Collect();\r
29             GC.WaitForPendingFinalizers();\r
30 \r
31             Assert.IsNull(wr.Target, "Object should have been collected!");\r
32 \r
33             GC.KeepAlive(wrc);\r
34         }\r
35 \r
36         [TestMethod]\r
37         public void Remove_ObjectShouldGetRemoved()\r
38         {\r
39             var obj = new object();\r
40             var wrc = new WeakReferenceCollection<object>();\r
41 \r
42             wrc.Add(obj);\r
43 \r
44             Assert.AreEqual(1, wrc.AliveItemsToList().Count, "Should have 1 item!");\r
45             \r
46             wrc.Remove(obj);\r
47 \r
48             Assert.AreEqual(0, wrc.AliveItemsToList().Count, "Should have 0 item!");\r
49         }\r
50 \r
51         [TestMethod]\r
52         public void AliveItemsToList_ShouldReturnAllItems()\r
53         {\r
54             var list = new object[] {new object(), new object(), new object()};\r
55             var wrc = new WeakReferenceCollection<object>();\r
56 \r
57             foreach (object obj in list)\r
58             {\r
59                 wrc.Add(obj);\r
60             }\r
61 \r
62             Assert.AreEqual(list.Length, wrc.AliveItemsToList().Count, "Should have same number of items!");\r
63         }\r
64 \r
65         [TestMethod]\r
66         public void AliveItemsToList_ShouldReturnAllAliveItems()\r
67         {\r
68             var list = new object[] { new object(), new object(), new object() };\r
69             var wrc = new WeakReferenceCollection<object>();\r
70 \r
71             var obj1 = new object();\r
72             wrc.Add(obj1);\r
73 \r
74             foreach (object obj in list)\r
75             {\r
76                 wrc.Add(obj);\r
77             }\r
78 \r
79             var obj2 = new object();\r
80             wrc.Add(obj2);\r
81 \r
82             Assert.AreEqual(list.Length + 2, wrc.AliveItemsToList().Count, "Should have same number of items!");\r
83 \r
84             obj1 = obj2 = null;\r
85 \r
86             GC.Collect();\r
87             GC.WaitForPendingFinalizers();\r
88 \r
89             var aliveItems = wrc.AliveItemsToList();\r
90             Assert.AreEqual(list.Length, aliveItems.Count, "Should have 2 less items!");\r
91 \r
92             Assert.AreEqual(list[0], aliveItems[0]);\r
93             Assert.AreEqual(list[1], aliveItems[1]);\r
94             Assert.AreEqual(list[2], aliveItems[2]);\r
95         }\r
96 \r
97         [TestMethod]\r
98         public void AliveItemsToList_ShouldReturnEmpty()\r
99         {\r
100             var wrc = new WeakReferenceCollection<object>();\r
101             Assert.AreEqual(0, wrc.AliveItemsToList().Count, "Should have 0 items!");\r
102         }\r
103     }\r
104 }