Implement MachineKey.Protect and MachineKey.Unprotect
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ExportDefinitionTests.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 Microsoft.VisualStudio.TestTools.UnitTesting;\r
8 using System.UnitTesting;\r
9 using System.ComponentModel.Composition.Factories;\r
10 using System.ComponentModel.Composition.Primitives;\r
11 \r
12 namespace System.ComponentModel.Composition\r
13 {\r
14     [TestClass]\r
15     public class ExportDefinitionTests\r
16     {\r
17         [TestMethod]\r
18         public void Constructor1_ShouldSetMetadataPropertyToEmptyDictionary()\r
19         {\r
20             var definition = new DerivedExportDefinition();\r
21 \r
22             EnumerableAssert.IsEmpty(definition.Metadata);\r
23         }\r
24 \r
25         [TestMethod]\r
26         public void Constructor1_ShouldSetMetadataPropertyToReadOnlyDictionary()\r
27         {\r
28             var definition = new DerivedExportDefinition();\r
29 \r
30             ExceptionAssert.Throws<NotSupportedException>(() =>\r
31             {\r
32                 definition.Metadata["Value"] = "Value";\r
33             });\r
34         }\r
35 \r
36         [TestMethod]\r
37         public void Constructor2_NullAsContractNameArgument_ShouldThrowArgumentNull()\r
38         {\r
39             ExceptionAssert.ThrowsArgument<ArgumentNullException>("contractName", () =>\r
40             {\r
41                 new ExportDefinition((string)null, new Dictionary<string, object>());\r
42             });\r
43         }\r
44 \r
45         [TestMethod]\r
46         public void Constructor2_EmptyStringAsContractNameArgument_ShouldThrowArgument()\r
47         {\r
48             ExceptionAssert.ThrowsArgument<ArgumentException>("contractName", () =>\r
49             {\r
50                 new ExportDefinition(string.Empty, new Dictionary<string, object>());\r
51             });\r
52         }\r
53 \r
54         [TestMethod]\r
55         public void Constructor2_ValueAsContractNameArgument_ShouldSetContractNameProperty()\r
56         {\r
57             var expectations = Expectations.GetContractNames();\r
58 \r
59             foreach (var e in expectations)\r
60             {\r
61                 var definition = new ExportDefinition(e, new Dictionary<string, object>());\r
62 \r
63                 Assert.AreEqual(e, definition.ContractName);\r
64             }\r
65         }\r
66 \r
67         [TestMethod]\r
68         public void Constructor2_NullAsMetadataArgument_ShouldSetMetadataPropertyToEmptyDictionary()\r
69         {\r
70             var definition = new ExportDefinition("Contract", (IDictionary<string, object>)null); ;\r
71 \r
72             EnumerableAssert.IsEmpty(definition.Metadata);\r
73         }\r
74 \r
75         [TestMethod]\r
76         public void Constructor2_NullAsMetadataArgument_ShouldSetMetadataPropertyToReadOnlyDictionary()\r
77         {\r
78             var definition = new ExportDefinition("Contract", (IDictionary<string, object>)null);\r
79 \r
80             ExceptionAssert.Throws<NotSupportedException>(() =>\r
81             {\r
82                 definition.Metadata["Value"] = "Value";\r
83             });\r
84         }\r
85 \r
86         [TestMethod]\r
87         public void Constructor2_WritableDictionaryAsMetadataArgument_ShouldSetMetadataPropertyToReadOnlyDictionary()\r
88         {\r
89             var definition = new ExportDefinition("Contract", new Dictionary<string, object>());\r
90 \r
91             ExceptionAssert.Throws<NotSupportedException>(() =>\r
92             {\r
93                 definition.Metadata["Value"] = "Value";\r
94             });\r
95         }\r
96 \r
97         [TestMethod]\r
98         public void Constructor2_DictionaryAsMetadataArgument_ShouldSetMetadataProperty()\r
99         {\r
100             var expectations = Expectations.GetMetadata();\r
101 \r
102             foreach (var e in expectations)\r
103             {\r
104                 var definition = new ExportDefinition("Contract", e);\r
105 \r
106                 EnumerableAssert.AreEqual(e, definition.Metadata);\r
107             }\r
108         }\r
109 \r
110         [TestMethod]\r
111         public void ContractName_WhenNotOverridden_ShouldThrowNotImplemented()\r
112         {\r
113             var definition = new DerivedExportDefinition();\r
114 \r
115             ExceptionAssert.Throws<NotImplementedException>(() =>\r
116             {\r
117                 var contractName = definition.ContractName;\r
118             });\r
119         }\r
120 \r
121         [TestMethod]\r
122         public void ToString_WhenContractNameNotOverridden_ShouldThrowNotImplemented()\r
123         {\r
124             var definition = new DerivedExportDefinition();\r
125 \r
126             ExceptionAssert.Throws<NotImplementedException>(() =>\r
127             {\r
128                 definition.ToString();\r
129             });\r
130         }\r
131 \r
132         [TestMethod]\r
133         public void ToString_ShouldReturnContractNameProperty()\r
134         {\r
135             var expectations = Expectations.GetContractNames();\r
136 \r
137             foreach (var e in expectations)\r
138             {\r
139                 var definition = new ExportDefinition(e, new Dictionary<string, object>());\r
140 \r
141                 Assert.AreEqual(e, definition.ToString());\r
142             }\r
143         }\r
144 \r
145         [TestMethod]\r
146         public void ToString_ShouldReturnOverriddenContractNameProperty()\r
147         {\r
148             var expectations = Expectations.GetContractNamesWithEmpty();\r
149             \r
150             foreach (var e in expectations)\r
151             {\r
152                 var definition = new DerivedExportDefinition(() => e);\r
153 \r
154                 Assert.AreEqual(e, definition.ToString());\r
155             }\r
156         }\r
157 \r
158         private class DerivedExportDefinition : ExportDefinition\r
159         {\r
160             private readonly Func<string> _contractNameGetter;\r
161 \r
162             public DerivedExportDefinition()\r
163             {\r
164             }\r
165 \r
166             public DerivedExportDefinition(Func<string> contractNameGetter)\r
167             {\r
168                 _contractNameGetter = contractNameGetter;\r
169             }\r
170 \r
171             public override string ContractName\r
172             {\r
173                 get \r
174                 {\r
175                     if (_contractNameGetter != null)\r
176                     {\r
177                         return _contractNameGetter();\r
178                     }\r
179 \r
180                     return base.ContractName;\r
181                 }\r
182             }\r
183         }\r
184     }\r
185 }\r
186 \r