2 // ReflectionPermissionTest.cs - NUnit Test Cases for ReflectionPermission
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
10 using NUnit
.Framework
;
12 using System
.Security
;
13 using System
.Security
.Permissions
;
15 namespace MonoTests
.System
.Security
.Permissions
{
18 public class ReflectionPermissionTest
: Assertion
{
20 private static string className
= "System.Security.Permissions.ReflectionPermission, ";
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));
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));
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 ());
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));
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));
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));
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));
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));
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 ());
119 [ExpectedException (typeof (ArgumentNullException
))]
120 public void FromXmlNull ()
122 ReflectionPermission p
= new ReflectionPermission (PermissionState
.None
);
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"));
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");
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 ();
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");
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");
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");
185 AssertEquals ("FromXml-ReflectionEmit", ReflectionPermissionFlag
.ReflectionEmit
, p2
.Flags
);
188 se
.AddAttribute ("Unrestricted", "true");
190 Assert ("FromXml-Unrestricted", p2
.IsUnrestricted ());
191 AssertEquals ("FromXml-AllFlags", ReflectionPermissionFlag
.AllFlags
, p2
.Flags
);
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 ());
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 ());
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 ());
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
);
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
);
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
);
262 public void Intersect ()
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 ());
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
);
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));
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
));
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
));
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
));