Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ComponentServicesTests.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.Linq;\r
8 using System.Linq.Expressions;\r
9 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
10 using System.ComponentModel.Composition.UnitTesting;\r
11 using System.ComponentModel.Composition.Factories;\r
12 using System.UnitTesting;\r
13 using System.ComponentModel.Composition.Hosting;\r
14 \r
15 namespace System.ComponentModel.Composition\r
16 {\r
17     [TestClass]\r
18     public class ComponentServicesTests\r
19     {\r
20         [TestMethod]\r
21         public void GetValuesByType()\r
22         {\r
23             var cat = CatalogFactory.CreateDefaultAttributed();\r
24 \r
25             var container = new CompositionContainer(cat);\r
26 \r
27             string itestName = AttributedModelServices.GetContractName(typeof(ITest));\r
28 \r
29             var e1 = container.GetExportedValues<ITest>();\r
30             var e2 = container.GetExports<ITest, object>(itestName);\r
31 \r
32             Assert.IsInstanceOfType(e1.First(), typeof(T1), "First should be T1");\r
33             Assert.IsInstanceOfType(e1.Skip(1).First(), typeof(T2), "Second should be T2");\r
34 \r
35             Assert.IsInstanceOfType(e2.First().Value, typeof(T1), "First should be T1");\r
36             Assert.IsInstanceOfType(e2.Skip(1).First().Value, typeof(T2), "Second should be T2");\r
37 \r
38             CompositionContainer childContainer = new CompositionContainer(container);\r
39             CompositionBatch batch = new CompositionBatch();\r
40             batch.AddPart(new T1());\r
41             container.Compose(batch);\r
42             var t1 = childContainer.GetExportedValue<ITest>();\r
43             var t2 = childContainer.GetExport<ITest, object>(itestName);\r
44 \r
45             Assert.IsInstanceOfType(t1, typeof(T1), "First (resolved) should be T1");\r
46             Assert.IsInstanceOfType(t2.Value, typeof(T1), "First (resolved) should be T1");\r
47         }\r
48 \r
49         [TestMethod]\r
50         public void GetValueTest()\r
51         {\r
52             var container = ContainerFactory.Create();\r
53             ITest t = new T1();\r
54             string name = AttributedModelServices.GetContractName(typeof(ITest));\r
55             CompositionBatch batch = new CompositionBatch();\r
56             batch.AddExportedValue(name, t);\r
57             container.Compose(batch);\r
58             ITest value = container.GetExportedValue<ITest>();\r
59             Assert.AreEqual(t, value, "TryGetExportedValue should return t (by type)");\r
60             value = container.GetExportedValue<ITest>(name);\r
61             Assert.AreEqual(t, value, "TryGetExportedValue should return t (given name)");\r
62         }\r
63 \r
64         [TestMethod]\r
65         public void GetValuesTest()\r
66         {\r
67             var container = ContainerFactory.Create();\r
68             ITest t = new T1();\r
69             string name = AttributedModelServices.GetContractName(typeof(ITest));\r
70             CompositionBatch batch = new CompositionBatch();\r
71             batch.AddExportedValue(name, t);\r
72             container.Compose(batch);\r
73             IEnumerable<ITest> values = container.GetExportedValues<ITest>();\r
74             Assert.AreEqual(t, values.First(), "TryGetExportedValues should return t (by type)");\r
75             values = container.GetExportedValues<ITest>(name);\r
76             Assert.AreEqual(t, values.First(), "TryGetExportedValues should return t (by name)");\r
77         }\r
78 \r
79 \r
80 \r
81         [TestMethod]\r
82         public void NoResolverExceptionTest()\r
83         {\r
84             var container = ContainerFactory.Create();\r
85 \r
86             CompositionBatch batch = new CompositionBatch();\r
87             batch.AddPart(new MultiExport());\r
88             batch.AddPart(new SingleImport());\r
89 \r
90             CompositionAssert.ThrowsChangeRejectedError(ErrorId.ImportEngine_PartCannotSetImport, ErrorId.ImportEngine_ImportCardinalityMismatch, RetryMode.DoNotRetry, () =>\r
91             {\r
92                 container.Compose(batch);\r
93             });\r
94         }\r
95     }\r
96 \r
97     public class MultiExport\r
98     {\r
99         [Export("Multi")]\r
100         [ExportMetadata("Value", "One")]\r
101         public int M1 { get { return 1; } }\r
102 \r
103         [Export("Multi")]\r
104         [ExportMetadata("Value", "Two")]\r
105         public int M2 { get { return 2; } }\r
106 \r
107         [Export("Multi")]\r
108         [ExportMetadata("Value", "Three")]\r
109         public int M3 { get { return 3; } }\r
110     }\r
111 \r
112     public interface ITest\r
113     {\r
114         void Do();\r
115     }\r
116 \r
117     [Export(typeof(ITest))]\r
118     public class T1 : ITest\r
119     {\r
120         public void Do() { }\r
121     }\r
122 \r
123     [Export(typeof(ITest))]\r
124     public class T2 : ITest\r
125     {\r
126         public void Do() { }\r
127     }\r
128 }\r