Remove excessive shortcut key matching in ToolStrip
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / ReflectionModel / LazyMemberInfoTests.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.UnitTesting;\r
14 using System.Threading;\r
15 \r
16 namespace System.ComponentModel.Composition.ReflectionModel\r
17 {\r
18     [TestClass]\r
19     public class LazyMemberInfoTests\r
20     {\r
21         [TestMethod]\r
22         public void Constructor_PassMember()\r
23         {\r
24             foreach (var memberAndAccessorsInfo in GetMembersAndAccessors(typeof(LazyMemberTestClass)))\r
25             {\r
26                 MemberInfo member = memberAndAccessorsInfo.Item1;\r
27                 MemberTypes memberType = memberAndAccessorsInfo.Item2.Item1;\r
28                 MemberInfo[] accessors = memberAndAccessorsInfo.Item2.Item2;\r
29 \r
30                 LazyMemberInfo lazy = new LazyMemberInfo(member);\r
31                 Assert.AreEqual(memberType, lazy.MemberType);\r
32                 Assert.AreEqual(accessors.Length, lazy.GetAccessors().Length);\r
33                 Assert.IsTrue(accessors.SequenceEqual(lazy.GetAccessors()));\r
34             }\r
35         }\r
36 \r
37         [TestMethod]\r
38         public void Constructor_PassNullMember()\r
39         {\r
40             ExceptionAssert.ThrowsArgument<ArgumentNullException>("member", () =>\r
41                 {\r
42                     LazyMemberInfo lazy = new LazyMemberInfo((MemberInfo)null);\r
43                 });\r
44         }\r
45 \r
46         [TestMethod]\r
47         public void Constructor_PassAccessors()\r
48         {\r
49             foreach (var memberAndAccessorsInfo in GetMembersAndAccessors(typeof(LazyMemberTestClass)))\r
50             {\r
51                 MemberInfo member = memberAndAccessorsInfo.Item1;\r
52                 MemberTypes memberType = memberAndAccessorsInfo.Item2.Item1;\r
53                 MemberInfo[] accessors = memberAndAccessorsInfo.Item2.Item2;\r
54 \r
55                 LazyMemberInfo lazy = new LazyMemberInfo(memberType, accessors);\r
56                 Assert.AreEqual(memberType, lazy.MemberType);\r
57                 Assert.AreEqual(accessors.Length, lazy.GetAccessors().Length);\r
58                 Assert.IsTrue(accessors.SequenceEqual(lazy.GetAccessors()));\r
59             }\r
60         }\r
61 \r
62         [TestMethod]\r
63         public void Constructor_PassInvalidAccessors()\r
64         {\r
65             foreach (var memberAndAccessorsInfo in GetMembersAndAccessors(typeof(LazyMemberTestClass)))\r
66             {\r
67                 MemberInfo member = memberAndAccessorsInfo.Item1;\r
68                 MemberTypes memberType = memberAndAccessorsInfo.Item2.Item1;\r
69                 MemberInfo[] accessors = memberAndAccessorsInfo.Item2.Item2;\r
70 \r
71                 foreach (MemberTypes wrongMemberType in GetValidMemberTypes())\r
72                 {\r
73                     if (wrongMemberType == memberType)\r
74                     {\r
75                         continue;\r
76                     }\r
77                     ExceptionAssert.ThrowsArgument<ArgumentException>("accessors", () =>\r
78                     {\r
79                         LazyMemberInfo lazy = new LazyMemberInfo(wrongMemberType, accessors);\r
80                     });\r
81                 }\r
82             }\r
83         }\r
84 \r
85         [TestMethod]\r
86         public void Constructor_PassAccessorsInvalidMemberType()\r
87         {\r
88             MemberTypes[] validMemberTypes = GetValidMemberTypes().ToArray();\r
89             foreach (MemberTypes memberType in GetMemberTypeValues())\r
90             {\r
91                 if (!validMemberTypes.Contains(memberType))\r
92                 {\r
93                     ExceptionAssert.ThrowsArgument<ArgumentException>("memberType", () =>\r
94                     {\r
95                         LazyMemberInfo lazy = new LazyMemberInfo(memberType, typeof(LazyMemberTestClass));\r
96                     });\r
97                 }\r
98             }\r
99         }\r
100 \r
101         [TestMethod]\r
102         public void Constructor_PassNullAccessors()\r
103         {\r
104             ExceptionAssert.ThrowsArgument<ArgumentNullException>("accessors", () =>\r
105             {\r
106                 LazyMemberInfo lazy = new LazyMemberInfo(MemberTypes.Field, (MemberInfo[])null);\r
107             });\r
108         }\r
109 \r
110         [TestMethod]\r
111         public void Constructor_PassAccessorsWithNulls()\r
112         {\r
113             ExceptionAssert.ThrowsArgument<ArgumentException>("accessors", () =>\r
114             {\r
115                 LazyMemberInfo lazy = new LazyMemberInfo(MemberTypes.Field, new MemberInfo[] { null, null });\r
116             });\r
117         }\r
118 \r
119         [TestMethod]\r
120         public void Constructor_PassAccessorCreators()\r
121         {\r
122             foreach (var memberAndAccessorsInfo in GetMembersAndAccessors(typeof(LazyMemberTestClass)))\r
123             {\r
124                 MemberInfo member = memberAndAccessorsInfo.Item1;\r
125                 MemberTypes memberType = memberAndAccessorsInfo.Item2.Item1;\r
126                 MemberInfo[] accessors = memberAndAccessorsInfo.Item2.Item2;\r
127 \r
128                 LazyMemberInfo lazy = new LazyMemberInfo(memberType, () => accessors);\r
129                 Assert.AreEqual(memberType, lazy.MemberType);\r
130                 Assert.AreEqual(accessors.Length, lazy.GetAccessors().Length);\r
131                 Assert.IsTrue(accessors.SequenceEqual(lazy.GetAccessors()));\r
132             }\r
133         }\r
134 \r
135         [TestMethod]\r
136         public void Constructor_PassInvalidAccessorCreators()\r
137         {\r
138             foreach (var memberAndAccessorsInfo in GetMembersAndAccessors(typeof(LazyMemberTestClass)))\r
139             {\r
140                 MemberInfo member = memberAndAccessorsInfo.Item1;\r
141                 MemberTypes memberType = memberAndAccessorsInfo.Item2.Item1;\r
142                 MemberInfo[] accessors = memberAndAccessorsInfo.Item2.Item2;\r
143 \r
144                 foreach (MemberTypes wrongMemberType in GetValidMemberTypes())\r
145                 {\r
146                     if (wrongMemberType == memberType)\r
147                     {\r
148                         continue;\r
149                     }\r
150                     LazyMemberInfo lazy = new LazyMemberInfo(wrongMemberType, () => accessors);\r
151                     ExceptionAssert.Throws<InvalidOperationException>(() =>\r
152                     {\r
153                         lazy.GetAccessors();\r
154                     });\r
155                 }\r
156             }\r
157         }\r
158 \r
159         [TestMethod]\r
160         public void Constructor_PassAccessorCreatorsWithInvalidMemberType()\r
161         {\r
162             MemberTypes[] validMemberTypes = GetValidMemberTypes().ToArray();\r
163             foreach (MemberTypes memberType in GetMemberTypeValues())\r
164             {\r
165                 if (!validMemberTypes.Contains(memberType))\r
166                 {\r
167                     ExceptionAssert.ThrowsArgument<ArgumentException>("memberType", () =>\r
168                     {\r
169                         LazyMemberInfo lazy = new LazyMemberInfo(memberType, () => new MemberInfo[] { typeof(LazyMemberTestClass) });\r
170                     });\r
171                 }\r
172             }\r
173         }\r
174 \r
175         [TestMethod]\r
176         public void Constructor_PassNullAccessorCreators()\r
177         {\r
178             ExceptionAssert.ThrowsArgument<ArgumentNullException>("accessorsCreator", () =>\r
179             {\r
180                 LazyMemberInfo lazy = new LazyMemberInfo(MemberTypes.Field, (Func<MemberInfo[]>)null);\r
181             });\r
182         }\r
183 \r
184 \r
185         private static IEnumerable<Tuple<MemberInfo, Tuple<MemberTypes, MemberInfo[]>>> GetMembersAndAccessors(Type type)\r
186         {\r
187             yield return new Tuple<MemberInfo, Tuple<MemberTypes, MemberInfo[]>>(\r
188                 type, new Tuple<MemberTypes, MemberInfo[]>(type.MemberType, new MemberInfo[] { type }));\r
189 \r
190             foreach (MemberInfo member in type.GetMembers())\r
191             {\r
192                 MemberInfo[] accessors = null;\r
193                 if (member.MemberType == MemberTypes.Property)\r
194                 {\r
195                     PropertyInfo property = (PropertyInfo)member;\r
196                     accessors = new MemberInfo[] { property.GetGetMethod(true), property.GetSetMethod(true) };\r
197                 }\r
198                 else if (member.MemberType == MemberTypes.Event)\r
199                 {\r
200                     EventInfo event_ = (EventInfo)member;\r
201                     accessors = new MemberInfo[] { event_.GetRaiseMethod(true), event_.GetAddMethod(true), event_.GetRemoveMethod(true) };\r
202                 }\r
203                 else\r
204                 {\r
205                     accessors = new MemberInfo[] { member };\r
206                 }\r
207 \r
208                 yield return new Tuple<MemberInfo, Tuple<MemberTypes, MemberInfo[]>>(\r
209                     member, new Tuple<MemberTypes, MemberInfo[]>(member.MemberType, accessors));\r
210             }\r
211         }\r
212 \r
213         private static IEnumerable<MemberTypes> GetMemberTypeValues()\r
214         {\r
215             yield return MemberTypes.All;\r
216             yield return MemberTypes.Constructor;\r
217             yield return MemberTypes.Custom;\r
218             yield return MemberTypes.Event;\r
219             yield return MemberTypes.Field;\r
220             yield return MemberTypes.Method;\r
221             yield return MemberTypes.NestedType;\r
222             yield return MemberTypes.Property;\r
223             yield return MemberTypes.TypeInfo;\r
224         }\r
225 \r
226         private static IEnumerable<MemberTypes> GetValidMemberTypes()\r
227         {\r
228             yield return MemberTypes.TypeInfo;\r
229             yield return MemberTypes.NestedType;\r
230             yield return MemberTypes.Constructor;\r
231             yield return MemberTypes.Field;\r
232             yield return  MemberTypes.Method;\r
233             yield return  MemberTypes.Property;\r
234             yield return MemberTypes.Event;\r
235         }\r
236 \r
237         public class LazyMemberTestClass\r
238         {\r
239             public LazyMemberTestClass() { }\r
240             public string Property { get; set;  }\r
241             public string SetProperty { set { } }\r
242             public string GetProperty { get { return null; } }\r
243             public string Field;\r
244             public void Method() { this.Event(this, new EventArgs()); }\r
245             public event EventHandler Event;\r
246         }\r
247     }\r
248 }\r