2 // UIPermissionTest.cs - NUnit Test Cases for UIPermission
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
31 using System.Security;
32 using System.Security.Permissions;
34 namespace MonoTests.System.Security.Permissions {
37 public class UIPermissionTest {
40 public void PermissionStateNone ()
42 UIPermission uip = new UIPermission (PermissionState.None);
43 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
44 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");
45 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
47 SecurityElement se = uip.ToXml ();
48 Assert.IsNull (se.Attribute ("Unrestricted"), "Xml-Unrestricted");
50 UIPermission copy = (UIPermission)uip.Copy ();
51 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Copy-Clipboard");
52 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Copy-Window");
53 Assert.IsFalse (uip.IsUnrestricted (), "Copy-IsUnrestricted");
57 public void PermissionStateUnrestricted ()
59 UIPermission uip = new UIPermission (PermissionState.Unrestricted);
60 Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Clipboard");
61 Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Window");
62 Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted");
64 SecurityElement se = uip.ToXml ();
65 Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "Xml-Unrestricted");
67 UIPermission copy = (UIPermission)uip.Copy ();
68 Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Copy-Clipboard");
69 Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Copy-Window");
70 Assert.IsTrue (uip.IsUnrestricted (), "Copy-IsUnrestricted");
74 [ExpectedException (typeof (ArgumentException))]
75 public void PermissionStateInvalid ()
77 UIPermission uip = new UIPermission ((PermissionState)2);
81 public void UIPermission_Clipboard_All ()
83 UIPermission uip = new UIPermission (UIPermissionClipboard.AllClipboard);
84 Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Clipboard");
85 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");
86 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
90 public void UIPermission_Clipboard_Own ()
92 UIPermission uip = new UIPermission (UIPermissionClipboard.OwnClipboard);
93 Assert.AreEqual (UIPermissionClipboard.OwnClipboard, uip.Clipboard, "Clipboard");
94 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");
95 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
99 public void UIPermission_Clipboard_No ()
101 UIPermission uip = new UIPermission (UIPermissionClipboard.NoClipboard);
102 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
103 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");
104 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
108 [ExpectedException (typeof (ArgumentException))]
109 public void UIPermission_Clipboard_Bad ()
111 UIPermission uip = new UIPermission ((UIPermissionClipboard)128);
115 public void UIPermission_Windows_All ()
117 UIPermission uip = new UIPermission (UIPermissionWindow.AllWindows);
118 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
119 Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Window");
120 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
124 public void UIPermission_Windows_SafeSubWindows ()
126 UIPermission uip = new UIPermission (UIPermissionWindow.SafeSubWindows);
127 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
128 Assert.AreEqual (UIPermissionWindow.SafeSubWindows, uip.Window, "Window");
129 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
133 public void UIPermission_Windows_SafeTopLevelWindows ()
135 UIPermission uip = new UIPermission (UIPermissionWindow.SafeTopLevelWindows);
136 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
137 Assert.AreEqual (UIPermissionWindow.SafeTopLevelWindows, uip.Window, "Window");
138 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
142 public void UIPermission_Windows_No ()
144 UIPermission uip = new UIPermission (UIPermissionWindow.NoWindows);
145 Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");
146 Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");
147 Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");
151 [ExpectedException (typeof (ArgumentException))]
152 public void UIPermission_Windows_Bad ()
154 UIPermission uip = new UIPermission ((UIPermissionWindow)128);
158 [ExpectedException (typeof (ArgumentException))]
159 public void Clipboard_Bad ()
161 UIPermission uip = new UIPermission (PermissionState.None);
162 uip.Clipboard = (UIPermissionClipboard) 128;
166 [ExpectedException (typeof (ArgumentException))]
167 public void Window_Bad ()
169 UIPermission uip = new UIPermission (PermissionState.None);
170 uip.Window = (UIPermissionWindow) 128;
174 public void Unrestricted ()
176 UIPermission uip = new UIPermission (PermissionState.None);
177 SecurityElement se = uip.ToXml ();
178 // attribute value is not case-sensitive
179 se.AddAttribute ("Unrestricted", "TRUE");
181 Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted-TRUE");
183 uip = new UIPermission (PermissionState.None);
184 // attribute name is not case-sensitive either!!!
185 se.AddAttribute ("UNRESTRICTED", "TRUE");
187 Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted-UPPER");
190 private void Compare (UIPermission uip1, UIPermission uip2, string prefix)
192 Assert.AreEqual (uip1.Clipboard, uip2.Clipboard, prefix + ".Clipboard");
193 Assert.AreEqual (uip1.Window, uip2.Window, prefix + ".Window");
194 Assert.AreEqual (uip1.IsUnrestricted (), uip2.IsUnrestricted (), prefix + ".IsUnrestricted ()");
198 public void Intersect ()
200 UIPermission clip_all = new UIPermission (UIPermissionClipboard.AllClipboard);
201 UIPermission clip_own = new UIPermission (UIPermissionClipboard.OwnClipboard);
202 UIPermission intersect = (UIPermission)clip_all.Intersect (clip_own);
203 Compare (clip_own, intersect, "clip_all N clip_own");
204 Assert.IsFalse (Object.ReferenceEquals (clip_own, intersect), "!ReferenceEquals1");
205 Assert.IsTrue (intersect.IsSubsetOf (clip_all), "intersect.IsSubsetOf (clip_all)");
206 Assert.IsTrue (intersect.IsSubsetOf (clip_own), "intersect.IsSubsetOf (clip_own)");
208 UIPermission win_all = new UIPermission (UIPermissionWindow.AllWindows);
209 UIPermission win_safe = new UIPermission (UIPermissionWindow.SafeSubWindows);
210 intersect = (UIPermission) win_all.Intersect (win_safe);
211 Compare (win_safe, intersect, "win_all N win_safe");
212 Assert.IsFalse (Object.ReferenceEquals (win_safe, intersect), "!ReferenceEquals2");
213 Assert.IsTrue (intersect.IsSubsetOf (win_all), "intersect.IsSubsetOf (win_all)");
214 Assert.IsTrue (intersect.IsSubsetOf (win_safe), "intersect.IsSubsetOf (win_safe)");
216 intersect = (UIPermission)win_all.Intersect (clip_all);
217 Assert.IsNull (intersect, "win_all N clip_all");
219 intersect = (UIPermission)win_all.Intersect (null);
220 Assert.IsNull (intersect, "win_all N null");
222 intersect = (UIPermission)clip_all.Intersect (null);
223 Assert.IsNull (intersect, "clip_all N null");
225 UIPermission empty = new UIPermission (PermissionState.None);
226 intersect = (UIPermission)clip_all.Intersect (empty);
227 Assert.IsNull (intersect, "clip_all N null");
229 UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);
230 intersect = (UIPermission)clip_all.Intersect (unrestricted);
231 Compare (clip_all, intersect, "clip_all N unrestricted");
232 Assert.IsFalse (Object.ReferenceEquals (clip_all, intersect), "!ReferenceEquals4");
233 Assert.IsTrue (intersect.IsSubsetOf (clip_all), "intersect.IsSubsetOf (clip_all)");
234 Assert.IsTrue (intersect.IsSubsetOf (unrestricted), "intersect.IsSubsetOf (unrestricted)");
238 [ExpectedException (typeof (ArgumentException))]
239 public void Intersect_DifferentPermissions ()
241 UIPermission a = new UIPermission (PermissionState.None);
242 SecurityPermission b = new SecurityPermission (PermissionState.None);
247 public void IsSubsetOf ()
249 UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);
250 UIPermission empty = new UIPermission (PermissionState.None);
252 Assert.IsFalse (unrestricted.IsSubsetOf (empty), "unrestricted.IsSubsetOf (empty)");
253 Assert.IsTrue (empty.IsSubsetOf (unrestricted), "empty.IsSubsetOf (unrestricted)");
254 Assert.IsTrue (empty.IsSubsetOf (null), "empty.IsSubsetOf (null)");
255 Assert.IsFalse (unrestricted.IsSubsetOf (null), "unrestricted.IsSubsetOf (null)");
259 [ExpectedException (typeof (ArgumentException))]
260 public void IsSubsetOf_DifferentPermissions ()
262 UIPermission a = new UIPermission (PermissionState.None);
263 SecurityPermission b = new SecurityPermission (PermissionState.None);
270 UIPermission none = new UIPermission (PermissionState.None);
271 UIPermission union = (UIPermission)none.Union (null);
272 Compare (none, union, "none U null");
273 Assert.IsFalse (Object.ReferenceEquals (none, union), "!ReferenceEquals1");
274 Assert.IsTrue (none.IsSubsetOf (union), "none.IsSubsetOf (union)");
276 union = (UIPermission)none.Union (new UIPermission (PermissionState.None));
277 Assert.IsNull (union, "none U none");
278 Assert.IsTrue (none.IsSubsetOf (null), "none.IsSubsetOf (null)");
280 UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);
281 union = (UIPermission)none.Union (unrestricted);
282 Compare (unrestricted, union, "none U unrestricted");
283 Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-1");
284 Assert.IsFalse (Object.ReferenceEquals (unrestricted, union), "!ReferenceEquals2");
285 Assert.IsTrue (none.IsSubsetOf (union), "none.IsSubsetOf (union)");
286 Assert.IsTrue (unrestricted.IsSubsetOf (union), "unrestricted.IsSubsetOf (union)");
288 union = (UIPermission)unrestricted.Union (unrestricted);
289 Compare (unrestricted, union, "unrestricted U unrestricted");
290 Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-2");
291 Assert.IsFalse (Object.ReferenceEquals (unrestricted, union), "!ReferenceEquals3");
292 Assert.IsTrue (unrestricted.IsSubsetOf (union), "unrestricted.IsSubsetOf (union)");
294 UIPermission clip_all = new UIPermission (UIPermissionClipboard.AllClipboard);
295 UIPermission win_all = new UIPermission (UIPermissionWindow.AllWindows);
296 union = (UIPermission)clip_all.Union (win_all);
297 Compare (unrestricted, union, "clip_all U win_all");
298 Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-3");
299 Assert.IsTrue (clip_all.IsSubsetOf (union), "clip_all.IsSubsetOf (union)");
300 Assert.IsTrue (win_all.IsSubsetOf (union), "win_all.IsSubsetOf (union)");
304 [ExpectedException (typeof (ArgumentException))]
305 public void Union_DifferentPermissions ()
307 UIPermission a = new UIPermission (PermissionState.None);
308 SecurityPermission b = new SecurityPermission (PermissionState.None);
313 [ExpectedException (typeof (ArgumentNullException))]
314 public void FromXml_Null ()
316 UIPermission uip = new UIPermission (PermissionState.None);
321 [ExpectedException (typeof (ArgumentException))]
322 public void FromXml_WrongTag ()
324 UIPermission uip = new UIPermission (PermissionState.None);
325 SecurityElement se = uip.ToXml ();
326 se.Tag = "IMono"; // instead of IPermission
331 [ExpectedException (typeof (ArgumentException))]
332 public void FromXml_WrongTagCase ()
334 UIPermission uip = new UIPermission (PermissionState.None);
335 SecurityElement se = uip.ToXml ();
336 se.Tag = "IPERMISSION"; // instead of IPermission
341 public void FromXml_WrongClass ()
343 UIPermission uip = new UIPermission (PermissionState.None);
344 SecurityElement se = uip.ToXml ();
346 SecurityElement w = new SecurityElement (se.Tag);
347 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
348 w.AddAttribute ("version", se.Attribute ("version"));
350 // doesn't care of the class name at that stage
351 // anyway the class has already be created so...
355 public void FromXml_NoClass ()
357 UIPermission uip = new UIPermission (PermissionState.None);
358 SecurityElement se = uip.ToXml ();
360 SecurityElement w = new SecurityElement (se.Tag);
361 w.AddAttribute ("version", se.Attribute ("version"));
363 // doesn't even care of the class attribute presence
367 [ExpectedException (typeof (ArgumentException))]
368 public void FromXml_WrongVersion ()
370 UIPermission uip = new UIPermission (PermissionState.None);
371 SecurityElement se = uip.ToXml ();
373 SecurityElement w = new SecurityElement (se.Tag);
374 w.AddAttribute ("class", se.Attribute ("class"));
375 w.AddAttribute ("version", "2");
380 public void FromXml_NoVersion ()
382 UIPermission uip = new UIPermission (PermissionState.None);
383 SecurityElement se = uip.ToXml ();
385 SecurityElement w = new SecurityElement (se.Tag);
386 w.AddAttribute ("class", se.Attribute ("class"));