Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / Integration / RequiredCreationPolicyTests.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections.Generic;\r
6 using System.ComponentModel.Composition;\r
7 using System.ComponentModel.Composition.Factories;\r
8 using System.ComponentModel.Composition.Hosting;\r
9 using System.Linq;\r
10 using System.Linq.Expressions;\r
11 using System.UnitTesting;\r
12 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
13 \r
14 namespace Tests.Integration\r
15 {\r
16     [TestClass]\r
17     public class RequiredCreationPolicyTests\r
18     {\r
19         // Matrix that details which policy to use for a given part to satisfy a given import.\r
20         //                   Part.Any   Part.Shared  Part.NonShared\r
21         // Import.Any        Shared     Shared       NonShared\r
22         // Import.Shared     Shared     Shared       N/A\r
23         // Import.NonShared  NonShared  N/A          NonShared\r
24 \r
25         public interface ICreationPolicyExport\r
26         {\r
27 \r
28         }\r
29 \r
30         [Export(typeof(ICreationPolicyExport))]\r
31         public class CreationPolicyAnyExportImplicit : ICreationPolicyExport\r
32         {\r
33 \r
34         }\r
35 \r
36         [Export(typeof(ICreationPolicyExport))]\r
37         [PartCreationPolicy(CreationPolicy.Any)]\r
38         public class CreationPolicyAnyExportExplicit : ICreationPolicyExport\r
39         {\r
40 \r
41         }\r
42 \r
43         [Export(typeof(ICreationPolicyExport))]\r
44         [PartCreationPolicy(CreationPolicy.Shared)]\r
45         public class CreationPolicySharedExport : ICreationPolicyExport\r
46         {\r
47 \r
48         }\r
49 \r
50         [Export(typeof(ICreationPolicyExport))]\r
51         [PartCreationPolicy(CreationPolicy.NonShared)]\r
52         public class CreationPolicyNonSharedExport : ICreationPolicyExport\r
53         {\r
54 \r
55         }\r
56 \r
57         [Export]\r
58         public class RequiredAnyImporterImplicit\r
59         {\r
60             [ImportMany]\r
61             public IEnumerable<ICreationPolicyExport> Exports { get; set; }\r
62         }\r
63 \r
64         [Export]\r
65         public class RequiredAnyImporterExplicit\r
66         {\r
67             [ImportMany(RequiredCreationPolicy = CreationPolicy.Any)]\r
68             public IEnumerable<ICreationPolicyExport> Exports { get; set; }\r
69         }\r
70 \r
71         [Export]\r
72         public class RequiredSharedImporter\r
73         {\r
74             [ImportMany(RequiredCreationPolicy = CreationPolicy.Shared)]\r
75             public IEnumerable<ICreationPolicyExport> Exports { get; set; }\r
76         }\r
77 \r
78         [Export]\r
79         public class RequiredNonSharedImporter\r
80         {\r
81             [ImportMany(RequiredCreationPolicy = CreationPolicy.NonShared)]\r
82             public IEnumerable<ICreationPolicyExport> Exports { get; set; }\r
83         }\r
84 \r
85         private static CompositionContainer CreateDefaultContainer()\r
86         {\r
87             return ContainerFactory.CreateWithAttributedCatalog(\r
88                 typeof(ICreationPolicyExport),\r
89 \r
90                 typeof(CreationPolicyAnyExportImplicit),\r
91                 typeof(CreationPolicyAnyExportExplicit),\r
92                 typeof(CreationPolicySharedExport),\r
93                 typeof(CreationPolicyNonSharedExport),\r
94                 \r
95                 typeof(RequiredAnyImporterImplicit),\r
96                 typeof(RequiredAnyImporterExplicit),\r
97                 typeof(RequiredSharedImporter),\r
98                 typeof(RequiredNonSharedImporter));\r
99         }\r
100 \r
101         [TestMethod]\r
102         public void RequiredAnyImporterImplicit_ShouldIncludeAll()\r
103         {\r
104             var container = CreateDefaultContainer();\r
105 \r
106             var importer = container.GetExportedValue<RequiredAnyImporterImplicit>();\r
107 \r
108             EnumerableAssert.AreEqual(\r
109                 importer.Exports.Select(obj => obj.GetType()),\r
110                 typeof(CreationPolicyAnyExportImplicit),\r
111                 typeof(CreationPolicyAnyExportExplicit),\r
112                 typeof(CreationPolicySharedExport),\r
113                 typeof(CreationPolicyNonSharedExport));\r
114         }\r
115 \r
116         [TestMethod]\r
117         public void RequiredAnyImporterExplicit_ShouldIncludeAll()\r
118         {\r
119             var container = CreateDefaultContainer();\r
120 \r
121             var importer = container.GetExportedValue<RequiredAnyImporterExplicit>();\r
122 \r
123             EnumerableAssert.AreEqual(\r
124                 importer.Exports.Select(obj => obj.GetType()),\r
125                 typeof(CreationPolicyAnyExportImplicit),\r
126                 typeof(CreationPolicyAnyExportExplicit),\r
127                 typeof(CreationPolicySharedExport),\r
128                 typeof(CreationPolicyNonSharedExport));\r
129         }\r
130 \r
131         [TestMethod]\r
132         public void RequiredSharedImporter_ShouldFilterNonShared()\r
133         {\r
134             var container = CreateDefaultContainer();\r
135 \r
136             var importer = container.GetExportedValue<RequiredSharedImporter>();\r
137 \r
138             EnumerableAssert.AreEqual(\r
139                 importer.Exports.Select(obj => obj.GetType()),\r
140                 typeof(CreationPolicyAnyExportImplicit),\r
141                 typeof(CreationPolicyAnyExportExplicit),\r
142                 typeof(CreationPolicySharedExport));\r
143         }\r
144 \r
145         [TestMethod]\r
146         public void RequiredNonSharedImporter_ShouldFilterShared()\r
147         {\r
148             var container = CreateDefaultContainer();\r
149 \r
150             var importer = container.GetExportedValue<RequiredNonSharedImporter>();\r
151 \r
152             EnumerableAssert.AreEqual(\r
153                 importer.Exports.Select(obj => obj.GetType()),\r
154                 typeof(CreationPolicyAnyExportImplicit),\r
155                 typeof(CreationPolicyAnyExportExplicit),\r
156                 typeof(CreationPolicyNonSharedExport));\r
157         }\r
158     }\r
159 }\r