2004-09-01 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Permissions / UIPermissionTest.cs
1 //\r
2 // UIPermissionTest.cs - NUnit Test Cases for UIPermission\r
3 //\r
4 // Author:\r
5 //      Sebastien Pouliot  <sebastien@ximian.com>\r
6 //\r
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)\r
8 //\r
9 // Permission is hereby granted, free of charge, to any person obtaining\r
10 // a copy of this software and associated documentation files (the\r
11 // "Software"), to deal in the Software without restriction, including\r
12 // without limitation the rights to use, copy, modify, merge, publish,\r
13 // distribute, sublicense, and/or sell copies of the Software, and to\r
14 // permit persons to whom the Software is furnished to do so, subject to\r
15 // the following conditions:\r
16 // \r
17 // The above copyright notice and this permission notice shall be\r
18 // included in all copies or substantial portions of the Software.\r
19 // \r
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
27 //\r
28 \r
29 using NUnit.Framework;\r
30 using System;\r
31 using System.Security;\r
32 using System.Security.Permissions;\r
33 \r
34 namespace MonoTests.System.Security.Permissions {\r
35 \r
36         [TestFixture]\r
37         public class UIPermissionTest {\r
38 \r
39                 [Test]\r
40                 public void PermissionStateNone ()\r
41                 {\r
42                         UIPermission uip = new UIPermission (PermissionState.None);\r
43                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
44                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");\r
45                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
46 \r
47                         SecurityElement se = uip.ToXml ();\r
48                         Assert.IsNull (se.Attribute ("Unrestricted"), "Xml-Unrestricted");\r
49 \r
50                         UIPermission copy = (UIPermission)uip.Copy ();\r
51                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Copy-Clipboard");\r
52                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Copy-Window");\r
53                         Assert.IsFalse (uip.IsUnrestricted (), "Copy-IsUnrestricted");\r
54                 }\r
55 \r
56                 [Test]\r
57                 public void PermissionStateUnrestricted ()\r
58                 {\r
59                         UIPermission uip = new UIPermission (PermissionState.Unrestricted);\r
60                         Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Clipboard");\r
61                         Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Window");\r
62                         Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted");\r
63 \r
64                         SecurityElement se = uip.ToXml ();\r
65                         Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "Xml-Unrestricted");\r
66 \r
67                         UIPermission copy = (UIPermission)uip.Copy ();\r
68                         Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Copy-Clipboard");\r
69                         Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Copy-Window");\r
70                         Assert.IsTrue (uip.IsUnrestricted (), "Copy-IsUnrestricted");\r
71                 }\r
72 \r
73                 [Test]\r
74                 [ExpectedException (typeof (ArgumentException))]\r
75                 public void PermissionStateInvalid ()\r
76                 {\r
77                         UIPermission uip = new UIPermission ((PermissionState)2);\r
78                 }\r
79 \r
80                 [Test]\r
81                 public void UIPermission_Clipboard_All ()\r
82                 {\r
83                         UIPermission uip = new UIPermission (UIPermissionClipboard.AllClipboard);\r
84                         Assert.AreEqual (UIPermissionClipboard.AllClipboard, uip.Clipboard, "Clipboard");\r
85                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");\r
86                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
87                 }\r
88 \r
89                 [Test]\r
90                 public void UIPermission_Clipboard_Own ()\r
91                 {\r
92                         UIPermission uip = new UIPermission (UIPermissionClipboard.OwnClipboard);\r
93                         Assert.AreEqual (UIPermissionClipboard.OwnClipboard, uip.Clipboard, "Clipboard");\r
94                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");\r
95                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
96                 }\r
97 \r
98                 [Test]\r
99                 public void UIPermission_Clipboard_No ()\r
100                 {\r
101                         UIPermission uip = new UIPermission (UIPermissionClipboard.NoClipboard);\r
102                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
103                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");\r
104                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
105                 }\r
106 \r
107                 [Test]\r
108                 [ExpectedException (typeof (ArgumentException))]\r
109                 public void UIPermission_Clipboard_Bad ()\r
110                 {\r
111                         UIPermission uip = new UIPermission ((UIPermissionClipboard)128);\r
112                 }\r
113 \r
114                 [Test]\r
115                 public void UIPermission_Windows_All ()\r
116                 {\r
117                         UIPermission uip = new UIPermission (UIPermissionWindow.AllWindows);\r
118                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
119                         Assert.AreEqual (UIPermissionWindow.AllWindows, uip.Window, "Window");\r
120                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
121                 }\r
122 \r
123                 [Test]\r
124                 public void UIPermission_Windows_SafeSubWindows ()\r
125                 {\r
126                         UIPermission uip = new UIPermission (UIPermissionWindow.SafeSubWindows);\r
127                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
128                         Assert.AreEqual (UIPermissionWindow.SafeSubWindows, uip.Window, "Window");\r
129                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
130                 }\r
131 \r
132                 [Test]\r
133                 public void UIPermission_Windows_SafeTopLevelWindows ()\r
134                 {\r
135                         UIPermission uip = new UIPermission (UIPermissionWindow.SafeTopLevelWindows);\r
136                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
137                         Assert.AreEqual (UIPermissionWindow.SafeTopLevelWindows, uip.Window, "Window");\r
138                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
139                 }\r
140 \r
141                 [Test]\r
142                 public void UIPermission_Windows_No ()\r
143                 {\r
144                         UIPermission uip = new UIPermission (UIPermissionWindow.NoWindows);\r
145                         Assert.AreEqual (UIPermissionClipboard.NoClipboard, uip.Clipboard, "Clipboard");\r
146                         Assert.AreEqual (UIPermissionWindow.NoWindows, uip.Window, "Window");\r
147                         Assert.IsFalse (uip.IsUnrestricted (), "IsUnrestricted");\r
148                 }\r
149 \r
150                 [Test]\r
151                 [ExpectedException (typeof (ArgumentException))]\r
152                 public void UIPermission_Windows_Bad ()\r
153                 {\r
154                         UIPermission uip = new UIPermission ((UIPermissionWindow)128);\r
155                 }\r
156 \r
157                 [Test]\r
158                 [ExpectedException (typeof (ArgumentException))]\r
159                 public void Clipboard_Bad ()\r
160                 {\r
161                         UIPermission uip = new UIPermission (PermissionState.None);\r
162                         uip.Clipboard = (UIPermissionClipboard) 128;\r
163                 }\r
164 \r
165                 [Test]\r
166                 [ExpectedException (typeof (ArgumentException))]\r
167                 public void Window_Bad ()\r
168                 {\r
169                         UIPermission uip = new UIPermission (PermissionState.None);\r
170                         uip.Window = (UIPermissionWindow) 128;\r
171                 }\r
172 \r
173                 [Test]\r
174                 public void Unrestricted () \r
175                 {\r
176                         UIPermission uip = new UIPermission (PermissionState.None);\r
177                         SecurityElement se = uip.ToXml ();\r
178                         // attribute value is not case-sensitive\r
179                         se.AddAttribute ("Unrestricted", "TRUE");\r
180                         uip.FromXml (se);\r
181                         Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted-TRUE");\r
182 \r
183                         uip = new UIPermission (PermissionState.None);\r
184                         // attribute name is not case-sensitive either!!!\r
185                         se.AddAttribute ("UNRESTRICTED", "TRUE");\r
186                         uip.FromXml (se);\r
187                         Assert.IsTrue (uip.IsUnrestricted (), "IsUnrestricted-UPPER");\r
188                 }\r
189 \r
190                 private void Compare (UIPermission uip1, UIPermission uip2, string prefix)\r
191                 {\r
192                         Assert.AreEqual (uip1.Clipboard, uip2.Clipboard, prefix + ".Clipboard");\r
193                         Assert.AreEqual (uip1.Window, uip2.Window, prefix + ".Window");\r
194                         Assert.AreEqual (uip1.IsUnrestricted (), uip2.IsUnrestricted (), prefix + ".IsUnrestricted ()");\r
195                 }\r
196 \r
197                 [Test]\r
198                 public void Intersect ()\r
199                 {\r
200                         UIPermission clip_all = new UIPermission (UIPermissionClipboard.AllClipboard);\r
201                         UIPermission clip_own = new UIPermission (UIPermissionClipboard.OwnClipboard);\r
202                         UIPermission intersect = (UIPermission)clip_all.Intersect (clip_own);\r
203                         Compare (clip_own, intersect, "clip_all N clip_own");\r
204                         Assert.IsFalse (Object.ReferenceEquals (clip_own, intersect), "!ReferenceEquals1");\r
205                         Assert.IsTrue (intersect.IsSubsetOf (clip_all), "intersect.IsSubsetOf (clip_all)");\r
206                         Assert.IsTrue (intersect.IsSubsetOf (clip_own), "intersect.IsSubsetOf (clip_own)");\r
207 \r
208                         UIPermission win_all = new UIPermission (UIPermissionWindow.AllWindows);\r
209                         UIPermission win_safe = new UIPermission (UIPermissionWindow.SafeSubWindows);\r
210                         intersect = (UIPermission) win_all.Intersect (win_safe);\r
211                         Compare (win_safe, intersect, "win_all N win_safe");\r
212                         Assert.IsFalse (Object.ReferenceEquals (win_safe, intersect), "!ReferenceEquals2");\r
213                         Assert.IsTrue (intersect.IsSubsetOf (win_all), "intersect.IsSubsetOf (win_all)");\r
214                         Assert.IsTrue (intersect.IsSubsetOf (win_safe), "intersect.IsSubsetOf (win_safe)");\r
215 \r
216                         intersect = (UIPermission)win_all.Intersect (clip_all);\r
217                         Assert.IsNull (intersect, "win_all N clip_all");\r
218 \r
219                         intersect = (UIPermission)win_all.Intersect (null);\r
220                         Assert.IsNull (intersect, "win_all N null");\r
221 \r
222                         intersect = (UIPermission)clip_all.Intersect (null);\r
223                         Assert.IsNull (intersect, "clip_all N null");\r
224 \r
225                         UIPermission empty = new UIPermission (PermissionState.None);\r
226                         intersect = (UIPermission)clip_all.Intersect (empty);\r
227                         Assert.IsNull (intersect, "clip_all N null");\r
228 \r
229                         UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);\r
230                         intersect = (UIPermission)clip_all.Intersect (unrestricted);\r
231                         Compare (clip_all, intersect, "clip_all N unrestricted");\r
232                         Assert.IsFalse (Object.ReferenceEquals (clip_all, intersect), "!ReferenceEquals4");\r
233                         Assert.IsTrue (intersect.IsSubsetOf (clip_all), "intersect.IsSubsetOf (clip_all)");\r
234                         Assert.IsTrue (intersect.IsSubsetOf (unrestricted), "intersect.IsSubsetOf (unrestricted)");\r
235                 }\r
236 \r
237                 [Test]\r
238                 [ExpectedException (typeof (ArgumentException))]\r
239                 public void Intersect_DifferentPermissions ()\r
240                 {\r
241                         UIPermission a = new UIPermission (PermissionState.None);\r
242                         SecurityPermission b = new SecurityPermission (PermissionState.None);\r
243                         a.Intersect (b);\r
244                 }\r
245 \r
246                 [Test]\r
247                 public void IsSubsetOf ()\r
248                 {\r
249                         UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);\r
250                         UIPermission empty = new UIPermission (PermissionState.None);\r
251 \r
252                         Assert.IsFalse (unrestricted.IsSubsetOf (empty), "unrestricted.IsSubsetOf (empty)");\r
253                         Assert.IsTrue (empty.IsSubsetOf (unrestricted), "empty.IsSubsetOf (unrestricted)");\r
254                         Assert.IsTrue (empty.IsSubsetOf (null), "empty.IsSubsetOf (null)");\r
255                         Assert.IsFalse (unrestricted.IsSubsetOf (null), "unrestricted.IsSubsetOf (null)");\r
256                 }\r
257 \r
258                 [Test]\r
259                 [ExpectedException (typeof (ArgumentException))]\r
260                 public void IsSubsetOf_DifferentPermissions ()\r
261                 {\r
262                         UIPermission a = new UIPermission (PermissionState.None);\r
263                         SecurityPermission b = new SecurityPermission (PermissionState.None);\r
264                         a.IsSubsetOf (b);\r
265                 }\r
266 \r
267                 [Test]\r
268                 public void Union ()\r
269                 {\r
270                         UIPermission none = new UIPermission (PermissionState.None);\r
271                         UIPermission union = (UIPermission)none.Union (null);\r
272                         Compare (none, union, "none U null");\r
273                         Assert.IsFalse (Object.ReferenceEquals (none, union), "!ReferenceEquals1");\r
274                         Assert.IsTrue (none.IsSubsetOf (union), "none.IsSubsetOf (union)");\r
275 \r
276                         union = (UIPermission)none.Union (new UIPermission (PermissionState.None));\r
277                         Assert.IsNull (union, "none U none");\r
278                         Assert.IsTrue (none.IsSubsetOf (null), "none.IsSubsetOf (null)");\r
279 \r
280                         UIPermission unrestricted = new UIPermission (PermissionState.Unrestricted);\r
281                         union = (UIPermission)none.Union (unrestricted);\r
282                         Compare (unrestricted, union, "none U unrestricted");\r
283                         Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-1");\r
284                         Assert.IsFalse (Object.ReferenceEquals (unrestricted, union), "!ReferenceEquals2");\r
285                         Assert.IsTrue (none.IsSubsetOf (union), "none.IsSubsetOf (union)");\r
286                         Assert.IsTrue (unrestricted.IsSubsetOf (union), "unrestricted.IsSubsetOf (union)");\r
287 \r
288                         union = (UIPermission)unrestricted.Union (unrestricted);\r
289                         Compare (unrestricted, union, "unrestricted U unrestricted");\r
290                         Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-2");\r
291                         Assert.IsFalse (Object.ReferenceEquals (unrestricted, union), "!ReferenceEquals3");\r
292                         Assert.IsTrue (unrestricted.IsSubsetOf (union), "unrestricted.IsSubsetOf (union)");\r
293 \r
294                         UIPermission clip_all = new UIPermission (UIPermissionClipboard.AllClipboard);\r
295                         UIPermission win_all = new UIPermission (UIPermissionWindow.AllWindows);\r
296                         union = (UIPermission)clip_all.Union (win_all);\r
297                         Compare (unrestricted, union, "clip_all U win_all");\r
298                         Assert.IsTrue (union.IsUnrestricted (), "IsUnrestricted-3");\r
299                         Assert.IsTrue (clip_all.IsSubsetOf (union), "clip_all.IsSubsetOf (union)");\r
300                         Assert.IsTrue (win_all.IsSubsetOf (union), "win_all.IsSubsetOf (union)");\r
301                 }\r
302 \r
303                 [Test]\r
304                 [ExpectedException (typeof (ArgumentException))]\r
305                 public void Union_DifferentPermissions ()\r
306                 {\r
307                         UIPermission a = new UIPermission (PermissionState.None);\r
308                         SecurityPermission b = new SecurityPermission (PermissionState.None);\r
309                         a.Union (b);\r
310                 }\r
311 \r
312                 [Test]\r
313                 [ExpectedException (typeof (ArgumentNullException))]\r
314                 public void FromXml_Null ()\r
315                 {\r
316                         UIPermission uip = new UIPermission (PermissionState.None);\r
317                         uip.FromXml (null);\r
318                 }\r
319 \r
320                 [Test]\r
321                 [ExpectedException (typeof (ArgumentException))]\r
322                 public void FromXml_WrongTag ()\r
323                 {\r
324                         UIPermission uip = new UIPermission (PermissionState.None);\r
325                         SecurityElement se = uip.ToXml ();\r
326                         se.Tag = "IMono"; // instead of IPermission\r
327                         uip.FromXml (se);\r
328                 }\r
329 \r
330                 [Test]\r
331                 [ExpectedException (typeof (ArgumentException))]\r
332                 public void FromXml_WrongTagCase ()\r
333                 {\r
334                         UIPermission uip = new UIPermission (PermissionState.None);\r
335                         SecurityElement se = uip.ToXml ();\r
336                         se.Tag = "IPERMISSION"; // instead of IPermission\r
337                         uip.FromXml (se);\r
338                 }\r
339 \r
340                 [Test]\r
341                 public void FromXml_WrongClass ()\r
342                 {\r
343                         UIPermission uip = new UIPermission (PermissionState.None);\r
344                         SecurityElement se = uip.ToXml ();\r
345 \r
346                         SecurityElement w = new SecurityElement (se.Tag);\r
347                         w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));\r
348                         w.AddAttribute ("version", se.Attribute ("version"));\r
349                         uip.FromXml (w);\r
350                         // doesn't care of the class name at that stage\r
351                         // anyway the class has already be created so...\r
352                 }\r
353 \r
354                 [Test]\r
355                 public void FromXml_NoClass ()\r
356                 {\r
357                         UIPermission uip = new UIPermission (PermissionState.None);\r
358                         SecurityElement se = uip.ToXml ();\r
359 \r
360                         SecurityElement w = new SecurityElement (se.Tag);\r
361                         w.AddAttribute ("version", se.Attribute ("version"));\r
362                         uip.FromXml (w);\r
363                         // doesn't even care of the class attribute presence\r
364                 }\r
365 \r
366                 [Test]\r
367                 [ExpectedException (typeof (ArgumentException))]\r
368                 public void FromXml_WrongVersion ()\r
369                 {\r
370                         UIPermission uip = new UIPermission (PermissionState.None);\r
371                         SecurityElement se = uip.ToXml ();\r
372 \r
373                         SecurityElement w = new SecurityElement (se.Tag);\r
374                         w.AddAttribute ("class", se.Attribute ("class"));\r
375                         w.AddAttribute ("version", "2");\r
376                         uip.FromXml (w);\r
377                 }\r
378 \r
379                 [Test]\r
380                 public void FromXml_NoVersion ()\r
381                 {\r
382                         UIPermission uip = new UIPermission (PermissionState.None);\r
383                         SecurityElement se = uip.ToXml ();\r
384 \r
385                         SecurityElement w = new SecurityElement (se.Tag);\r
386                         w.AddAttribute ("class", se.Attribute ("class"));\r
387                         uip.FromXml (w);\r
388                 }\r
389         }\r
390 }\r