Implement MachineKey.Protect and MachineKey.Unprotect
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ReflectionModel / ReflectionMemberExportDefinitionTests.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.ComponentModel.Composition.Factories;\r
6 using System.ComponentModel.Composition.Hosting;\r
7 using System.ComponentModel.Composition.Primitives;\r
8 using System.Reflection;\r
9 using Microsoft.Internal;\r
10 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
11 using System.Collections.Generic;\r
12 using System.Linq;\r
13 using System.Threading;\r
14 \r
15 namespace System.ComponentModel.Composition.ReflectionModel\r
16 {\r
17     [TestClass]\r
18     public class ReflectionMemberExportDefinitionTests\r
19     {\r
20         private static ReflectionMemberExportDefinition CreateReflectionExportDefinition(LazyMemberInfo exportMember, string contractname, IDictionary<string, object> metadata)\r
21         {\r
22             return CreateReflectionExportDefinition(exportMember, contractname, metadata, null);\r
23         }\r
24 \r
25         private static ReflectionMemberExportDefinition CreateReflectionExportDefinition(LazyMemberInfo exportMember, string contractname, IDictionary<string, object> metadata, ICompositionElement origin)\r
26         {\r
27             return (ReflectionMemberExportDefinition)ReflectionModelServices.CreateExportDefinition(\r
28                 exportMember, contractname, CreateLazyMetadata(metadata), origin);\r
29         }\r
30 \r
31         private static Lazy<IDictionary<string, object>> CreateLazyMetadata(IDictionary<string, object> metadata)\r
32         {\r
33             return new Lazy<IDictionary<string, object>>(() => metadata, false);\r
34         }\r
35 \r
36         [TestMethod]\r
37         public void Constructor()\r
38         {\r
39             MemberInfo expectedMember = this.GetType();\r
40             LazyMemberInfo expectedExportingMemberInfo = new LazyMemberInfo(expectedMember);\r
41 \r
42             string expectedContractName = "Contract";\r
43             IDictionary<string, object> expectedMetadata = new Dictionary<string, object>();\r
44             expectedMetadata["Key1"] = 1;\r
45             expectedMetadata["Key2"] = "Value2";\r
46 \r
47             ReflectionMemberExportDefinition definition = CreateReflectionExportDefinition(expectedExportingMemberInfo, expectedContractName, expectedMetadata);\r
48 \r
49             Assert.AreEqual(expectedExportingMemberInfo, definition.ExportingLazyMember);\r
50             Assert.AreSame(expectedMember, definition.ExportingLazyMember.GetAccessors()[0]);\r
51             Assert.AreEqual(MemberTypes.TypeInfo, definition.ExportingLazyMember.MemberType);\r
52 \r
53             Assert.AreSame(expectedContractName, definition.ContractName);\r
54 \r
55             Assert.IsNotNull(definition.Metadata);\r
56             Assert.IsTrue(definition.Metadata.Keys.SequenceEqual(expectedMetadata.Keys));\r
57             Assert.IsTrue(definition.Metadata.Values.SequenceEqual(expectedMetadata.Values));\r
58 \r
59             Assert.IsNull(((ICompositionElement)definition).Origin);\r
60         }\r
61 \r
62         [TestMethod]\r
63         public void Constructor_NullMetadata()\r
64         {\r
65             MemberInfo expectedMember = this.GetType();\r
66             LazyMemberInfo expectedExportingMemberInfo = new LazyMemberInfo(expectedMember);\r
67 \r
68             string expectedContractName = "Contract";\r
69 \r
70             ReflectionMemberExportDefinition definition = CreateReflectionExportDefinition(expectedExportingMemberInfo, expectedContractName, null);\r
71 \r
72             Assert.AreEqual(expectedExportingMemberInfo, definition.ExportingLazyMember);\r
73             Assert.AreSame(expectedMember, definition.ExportingLazyMember.GetAccessors()[0]);\r
74             Assert.AreEqual(MemberTypes.TypeInfo, definition.ExportingLazyMember.MemberType);\r
75 \r
76             Assert.AreSame(expectedContractName, definition.ContractName);\r
77 \r
78             Assert.IsNotNull(definition.Metadata);\r
79             Assert.AreEqual(0, definition.Metadata.Count);\r
80 \r
81             Assert.IsNull(((ICompositionElement)definition).Origin);\r
82         }\r
83 \r
84         [TestMethod]\r
85         public void SetDefinition_OriginIsSet()\r
86         {\r
87             var expectedPartDefinition = PartDefinitionFactory.CreateAttributed(typeof(object));\r
88             var exportDefinition = CreateReflectionExportDefinition(new LazyMemberInfo(this.GetType()), "ContractName", null, expectedPartDefinition);\r
89 \r
90             Assert.AreSame(expectedPartDefinition, ((ICompositionElement)exportDefinition).Origin);\r
91         }\r
92         \r
93         [TestMethod]\r
94         public void SetDefinition_PartDefinitionDoesNotContainCreationPolicy_CreationPolicyShouldNotBeInMetadata()\r
95         {\r
96             var expectedPartDefinition = PartDefinitionFactory.CreateAttributed(typeof(object));\r
97             var exportDefinition = CreateReflectionExportDefinition(new LazyMemberInfo(this.GetType()), "ContractName", null);\r
98 \r
99             Assert.IsFalse(exportDefinition.Metadata.ContainsKey(CompositionConstants.PartCreationPolicyMetadataName));\r
100         }\r
101 \r
102         [TestMethod]\r
103         public void ICompositionElementDisplayName_ValueAsContractName_ShouldIncludeContractName()\r
104         {\r
105             var contractNames = Expectations.GetContractNamesWithEmpty();\r
106 \r
107             foreach (var contractName in contractNames)\r
108             {\r
109                 if (string.IsNullOrEmpty(contractName)) continue;\r
110                 var definition = (ICompositionElement)CreateReflectionExportDefinition(new LazyMemberInfo(typeof(string)), contractName, null);\r
111 \r
112                 var e = CreateDisplayNameExpectation(contractName);\r
113 \r
114                 Assert.AreEqual(e, definition.DisplayName);\r
115             }\r
116         }\r
117 \r
118         [TestMethod]\r
119         public void ICompositionElementDisplayName_TypeAsMember_ShouldIncludeMemberDisplayName()\r
120         {\r
121             var types = Expectations.GetTypes();\r
122 \r
123             foreach (var type in types)\r
124             {\r
125                 var definition = (ICompositionElement)CreateReflectionExportDefinition(new LazyMemberInfo(type), "Contract", null);\r
126 \r
127                 var e = CreateDisplayNameExpectation(type);\r
128 \r
129                 Assert.AreEqual(e, definition.DisplayName);\r
130             }\r
131         }\r
132 \r
133         [TestMethod]\r
134         public void ICompositionElementDisplayName_ValueAsMember_ShouldIncludeMemberDisplayName()\r
135         {\r
136             var members = Expectations.GetMembers();\r
137 \r
138             foreach (var member in members)\r
139             {\r
140                 var definition = (ICompositionElement)CreateReflectionExportDefinition(new LazyMemberInfo(member), "Contract", null);\r
141 \r
142                 var e = CreateDisplayNameExpectation(member);\r
143 \r
144                 Assert.AreEqual(e, definition.DisplayName);\r
145             }\r
146         }\r
147 \r
148         [TestMethod]\r
149         public void ToString_ShouldReturnDisplayName()\r
150         {\r
151             var members = Expectations.GetMembers();\r
152 \r
153             foreach (var member in members)\r
154             {\r
155                 var definition = (ICompositionElement)CreateReflectionExportDefinition(new LazyMemberInfo(member), "Contract", null);\r
156 \r
157                 Assert.AreEqual(definition.DisplayName, definition.ToString());\r
158             }\r
159         }\r
160 \r
161         private static string CreateDisplayNameExpectation(string contractName)\r
162         {\r
163             return String.Format("System.String (ContractName=\"{0}\")", contractName);\r
164         }\r
165 \r
166         private static string CreateDisplayNameExpectation(MemberInfo member)\r
167         {\r
168             return String.Format("{0} (ContractName=\"Contract\")", member.GetDisplayName());\r
169         }\r
170 \r
171     }\r
172 }\r