**** Merged from MCS ****
[mono-project.git] / mcs / class / corlib / Test / System.Security.Permissions / ReflectionPermissionTest.cs
blob0d3cc7731ec039f755a3bbb2cbfa90de62a604b3
1 //
2 // ReflectionPermissionTest.cs - NUnit Test Cases for ReflectionPermission
3 //
4 // Author:
5 // Sebastien Pouliot (spouliot@motus.com)
6 //
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
8 //
10 using NUnit.Framework;
11 using System;
12 using System.Security;
13 using System.Security.Permissions;
15 namespace MonoTests.System.Security.Permissions {
17 [TestFixture]
18 public class ReflectionPermissionTest : Assertion {
20 private static string className = "System.Security.Permissions.ReflectionPermission, ";
22 [Test]
23 public void PermissionStateNone ()
25 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
26 AssertNotNull ("ReflectionPermission(PermissionState.None)", p);
27 Assert ("IsUnrestricted", !p.IsUnrestricted ());
28 ReflectionPermission copy = (ReflectionPermission) p.Copy ();
29 AssertEquals ("Copy.IsUnrestricted", p.IsUnrestricted (), copy.IsUnrestricted ());
30 SecurityElement se = p.ToXml ();
31 Assert ("ToXml-class", (se.Attributes ["class"] as string).StartsWith (className));
32 AssertEquals ("ToXml-version", "1", (se.Attributes ["version"] as string));
35 [Test]
36 public void PermissionStateUnrestricted ()
38 ReflectionPermission p = new ReflectionPermission (PermissionState.Unrestricted);
39 AssertNotNull ("ReflectionPermission(PermissionState.Unrestricted)", p);
40 Assert ("IsUnrestricted", p.IsUnrestricted ());
41 ReflectionPermission copy = (ReflectionPermission) p.Copy ();
42 AssertEquals ("Copy.IsUnrestricted", p.IsUnrestricted (), copy.IsUnrestricted ());
43 SecurityElement se = p.ToXml ();
44 AssertEquals ("ToXml-Unrestricted", "true", (se.Attributes ["Unrestricted"] as string));
47 [Test]
48 public void Derestricted ()
50 ReflectionPermission p = new ReflectionPermission (PermissionState.Unrestricted);
51 Assert ("IsUnrestricted", p.IsUnrestricted ());
52 p.Flags = ReflectionPermissionFlag.NoFlags;
53 Assert ("IsUnrestricted", !p.IsUnrestricted ());
56 [Test]
57 public void NoFlags ()
59 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
60 Assert ("IsUnrestricted", !p.IsUnrestricted ());
61 SecurityElement se = p.ToXml ();
62 AssertEquals ("ToXml-Flags=NoFlags", "NoFlags", (se.Attributes ["Flags"] as string));
65 [Test]
66 public void TypeInformation ()
68 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation);
69 Assert ("IsUnrestricted", !p.IsUnrestricted ());
70 SecurityElement se = p.ToXml ();
71 AssertEquals ("ToXml-Flags=TypeInformation", "TypeInformation", (se.Attributes ["Flags"] as string));
74 [Test]
75 public void MemberAccess ()
77 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
78 Assert ("IsUnrestricted", !p.IsUnrestricted ());
79 SecurityElement se = p.ToXml ();
80 AssertEquals ("ToXml-Flags=MemberAccess", "MemberAccess", (se.Attributes ["Flags"] as string));
83 [Test]
84 public void ReflectionEmit ()
86 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.ReflectionEmit);
87 Assert ("IsUnrestricted", !p.IsUnrestricted ());
88 SecurityElement se = p.ToXml ();
89 AssertEquals ("ToXml-Flags=ReflectionEmit", "ReflectionEmit", (se.Attributes ["Flags"] as string));
92 [Test]
93 public void AllFlags ()
95 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.AllFlags);
96 Assert ("IsUnrestricted", p.IsUnrestricted ());
97 SecurityElement se = p.ToXml ();
98 AssertEquals ("ToXml-Unrestricted", "true", (se.Attributes ["Unrestricted"] as string));
101 [Test]
102 public void Flags ()
104 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
105 Assert ("Flags(default).IsUnrestricted", !p.IsUnrestricted ());
106 p.Flags = ReflectionPermissionFlag.NoFlags;
107 Assert ("Flags(NoFlags).IsUnrestricted", !p.IsUnrestricted ());
108 p.Flags = ReflectionPermissionFlag.TypeInformation;
109 Assert ("Flags(TypeInformation).IsUnrestricted", !p.IsUnrestricted ());
110 p.Flags = ReflectionPermissionFlag.MemberAccess;
111 Assert ("Flags(MemberAccess).IsUnrestricted", !p.IsUnrestricted ());
112 p.Flags = ReflectionPermissionFlag.ReflectionEmit;
113 Assert ("Flags(ReflectionEmit).IsUnrestricted", !p.IsUnrestricted ());
114 p.Flags = ReflectionPermissionFlag.AllFlags;
115 Assert ("Flags(AllFlags).IsUnrestricted", p.IsUnrestricted ());
118 [Test]
119 [ExpectedException (typeof (ArgumentNullException))]
120 public void FromXmlNull ()
122 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
123 p.FromXml (null);
126 [Test]
127 [ExpectedException (typeof (ArgumentException))]
128 public void FromXmlInvalidPermission ()
130 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
131 SecurityElement se = p.ToXml ();
132 // can't modify - so we create our own
133 SecurityElement se2 = new SecurityElement ("IInvalidPermission", se.Text);
134 se2.AddAttribute ("class", se.Attribute ("class"));
135 se2.AddAttribute ("version", se.Attribute ("version"));
136 p.FromXml (se2);
139 [Test]
140 [ExpectedException (typeof (ArgumentException))]
141 public void FromXmlWrongVersion ()
143 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
144 SecurityElement se = p.ToXml ();
145 // can't modify - so we create our own
146 SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
147 se2.AddAttribute ("class", se.Attribute ("class"));
148 se2.AddAttribute ("version", "2");
149 p.FromXml (se2);
152 [Test]
153 public void FromXml ()
155 ReflectionPermission p = new ReflectionPermission (PermissionState.None);
156 SecurityElement se = p.ToXml ();
157 AssertNotNull ("ToXml()", se);
159 ReflectionPermission p2 = (ReflectionPermission) p.Copy ();
160 p2.FromXml (se);
161 AssertEquals ("FromXml-None", ReflectionPermissionFlag.NoFlags, p2.Flags);
163 string className = (string) se.Attributes ["class"];
164 string version = (string) se.Attributes ["version"];
166 SecurityElement se2 = new SecurityElement (se.Tag);
167 se2.AddAttribute ("class", className);
168 se2.AddAttribute ("version", version);
169 se2.AddAttribute ("Flags", "TypeInformation");
170 p2.FromXml (se2);
171 AssertEquals ("FromXml-TypeInformation", ReflectionPermissionFlag.TypeInformation, p2.Flags);
173 se2 = new SecurityElement (se.Tag);
174 se2.AddAttribute ("class", className);
175 se2.AddAttribute ("version", version);
176 se2.AddAttribute ("Flags", "MemberAccess");
177 p2.FromXml (se2);
178 AssertEquals ("FromXml-MemberAccess", ReflectionPermissionFlag.MemberAccess, p2.Flags);
180 se2 = new SecurityElement (se.Tag);
181 se2.AddAttribute ("class", className);
182 se2.AddAttribute ("version", version);
183 se2.AddAttribute ("Flags", "ReflectionEmit");
184 p2.FromXml (se2);
185 AssertEquals ("FromXml-ReflectionEmit", ReflectionPermissionFlag.ReflectionEmit, p2.Flags);
187 se = p.ToXml ();
188 se.AddAttribute ("Unrestricted", "true");
189 p2.FromXml (se);
190 Assert ("FromXml-Unrestricted", p2.IsUnrestricted ());
191 AssertEquals ("FromXml-AllFlags", ReflectionPermissionFlag.AllFlags, p2.Flags);
194 [Test]
195 public void UnionWithNull ()
197 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
198 ReflectionPermission p2 = null;
199 ReflectionPermission p3 = (ReflectionPermission) p1.Union (p2);
200 AssertEquals ("P1 U null == P1", p1.ToXml ().ToString (), p3.ToXml ().ToString ());
203 [Test]
204 public void UnionWithUnrestricted ()
206 ReflectionPermission p1 = new ReflectionPermission (PermissionState.Unrestricted);
207 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
208 ReflectionPermission p3 = (ReflectionPermission) p1.Union (p2);
209 Assert ("Unrestricted U P2 == Unrestricted", p3.IsUnrestricted ());
210 p3 = (ReflectionPermission) p2.Union (p1);
211 Assert ("P2 U Unrestricted == Unrestricted", p3.IsUnrestricted ());
214 [Test]
215 public void Union ()
217 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation);
218 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
219 ReflectionPermission p3 = (ReflectionPermission) p1.Union (p2);
220 AssertEquals (ReflectionPermissionFlag.MemberAccess | ReflectionPermissionFlag.TypeInformation, p3.Flags);
221 ReflectionPermission p4 = new ReflectionPermission (ReflectionPermissionFlag.ReflectionEmit);
222 ReflectionPermission p5 = (ReflectionPermission) p4.Union (p3);
223 Assert ("P3 U P4==Unrestricted", p5.IsUnrestricted ());
226 [Test]
227 [ExpectedException (typeof (ArgumentException))]
228 public void UnionWithBadPermission ()
230 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
231 EnvironmentPermission ep2 = new EnvironmentPermission (PermissionState.Unrestricted);
232 ReflectionPermission p3 = (ReflectionPermission) p1.Union (ep2);
235 [Test]
236 public void IntersectWithNull ()
238 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
239 ReflectionPermission p2 = null;
240 ReflectionPermission p3 = (ReflectionPermission) p1.Intersect (p2);
241 AssertNull ("P1 N null == null", p3);
244 [Test]
245 public void IntersectWithUnrestricted ()
247 ReflectionPermission p1 = new ReflectionPermission (PermissionState.Unrestricted);
248 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
249 ReflectionPermission p3 = (ReflectionPermission) p1.Intersect (p2);
250 Assert ("Unrestricted N P2 == P2", !p3.IsUnrestricted ());
251 AssertEquals ("Unrestricted N EP2 == EP2", p2.ToXml ().ToString (), p3.ToXml ().ToString ());
252 p3 = (ReflectionPermission) p2.Intersect (p1);
253 Assert ("P2 N Unrestricted == P2", !p3.IsUnrestricted ());
254 AssertEquals ("P2 N Unrestricted == P2", p2.ToXml ().ToString (), p3.ToXml ().ToString ());
256 p2 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
257 p3 = (ReflectionPermission) p1.Intersect (p2);
258 AssertNull ("Unrestricted N None == null", p3);
261 [Test]
262 public void Intersect ()
264 // no intersection
265 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
266 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation);
267 ReflectionPermission p3 = (ReflectionPermission) p1.Intersect (p2);
268 AssertNull ("EP1 N EP2 == null", p3);
269 // intersection in MemberAccess
270 ReflectionPermission p4 = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess | ReflectionPermissionFlag.ReflectionEmit);
271 p3 = (ReflectionPermission) p4.Intersect (p1);
272 AssertEquals ("Intersect-MemberAccess", ReflectionPermissionFlag.MemberAccess, p3.Flags);
273 // intersection in TypeInformation
274 ReflectionPermission p5 = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation | ReflectionPermissionFlag.ReflectionEmit);
275 p3 = (ReflectionPermission) p5.Intersect (p2);
276 AssertEquals ("Intersect-TypeInformation", ReflectionPermissionFlag.TypeInformation, p3.Flags);
277 // intersection in AllFlags
278 ReflectionPermission p6 = new ReflectionPermission (ReflectionPermissionFlag.AllFlags);
279 ReflectionPermission p7 = new ReflectionPermission (ReflectionPermissionFlag.AllFlags);
280 p3 = (ReflectionPermission) p6.Intersect (p7);
281 AssertEquals ("Intersect-AllFlags", ReflectionPermissionFlag.AllFlags, p3.Flags);
282 Assert ("Intersect-AllFlags-Unrestricted", p3.IsUnrestricted ());
285 [Test]
286 [ExpectedException (typeof (ArgumentException))]
287 public void IntersectWithBadPermission ()
289 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
290 EnvironmentPermission ep2 = new EnvironmentPermission (PermissionState.Unrestricted);
291 ReflectionPermission p3 = (ReflectionPermission) p1.Intersect (ep2);
294 [Test]
295 public void IsSubsetOfNull ()
297 ReflectionPermission p = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
298 Assert ("NoFlags.IsSubsetOf(null)", p.IsSubsetOf (null));
299 p = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
300 Assert ("MemberAccess.IsSubsetOf(null)", !p.IsSubsetOf (null));
303 [Test]
304 public void IsSubsetOfUnrestricted ()
306 ReflectionPermission p1 = new ReflectionPermission (PermissionState.Unrestricted);
307 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
308 ReflectionPermission p3 = new ReflectionPermission (PermissionState.Unrestricted);
309 Assert ("Unrestricted.IsSubsetOf()", !p1.IsSubsetOf (p2));
310 Assert ("IsSubsetOf(Unrestricted)", p2.IsSubsetOf (p1));
311 Assert ("Unrestricted.IsSubsetOf(Unrestricted)", p1.IsSubsetOf (p3));
314 [Test]
315 public void IsSubsetOf ()
317 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.MemberAccess);
318 ReflectionPermission p2 = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation);
319 ReflectionPermission p3 = new ReflectionPermission (ReflectionPermissionFlag.ReflectionEmit);
320 Assert ("MemberAccess.IsSubsetOf(TypeInformation)", !p1.IsSubsetOf (p2));
321 Assert ("MemberAccess.IsSubsetOf(ReflectionEmit)", !p1.IsSubsetOf (p3));
322 Assert ("TypeInformation.IsSubsetOf(MemberAccess)", !p2.IsSubsetOf (p1));
323 Assert ("TypeInformation.IsSubsetOf(ReflectionEmit)", !p2.IsSubsetOf (p3));
324 Assert ("ReflectionEmit.IsSubsetOf(MemberAccess)", !p3.IsSubsetOf (p1));
325 Assert ("ReflectionEmit.IsSubsetOf(TypeInformation)", !p3.IsSubsetOf (p2));
326 ReflectionPermission p4 = new ReflectionPermission (ReflectionPermissionFlag.AllFlags);
327 Assert ("MemberAccess.IsSubsetOf(AllFlags)", p1.IsSubsetOf (p4));
328 Assert ("TypeInformation.IsSubsetOf(AllFlags)", p2.IsSubsetOf (p4));
329 Assert ("ReflectionEmit.IsSubsetOf(AllFlags)", p3.IsSubsetOf (p4));
330 Assert ("AllFlags.IsSubsetOf(MemberAccess)", !p4.IsSubsetOf (p1));
331 Assert ("AllFlags.IsSubsetOf(TypeInformation)", !p4.IsSubsetOf (p2));
332 Assert ("AllFlags.IsSubsetOf(ReflectionEmit)", !p4.IsSubsetOf (p3));
335 [Test]
336 [ExpectedException (typeof (ArgumentException))]
337 public void IsSubsetOfBadPermission ()
339 ReflectionPermission p1 = new ReflectionPermission (ReflectionPermissionFlag.NoFlags);
340 EnvironmentPermission ep2 = new EnvironmentPermission (PermissionState.Unrestricted);
341 Assert ("IsSubsetOf(EnvironmentPermission)", p1.IsSubsetOf (ep2));