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"));