2002-06-12 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / corlib / Test / System.Security / SecurityElementTest.cs
1 //\r
2 // SecurityElementTest.cs - NUnit Test Cases for System.Security.SecurityElement\r
3 //\r
4 // Author:\r
5 //   Lawrence Pit (loz@cable.a2000.nl)\r
6 //\r
7 \r
8 using NUnit.Framework;\r
9 using System;\r
10 using System.Collections;\r
11 using System.Security;\r
12 \r
13 namespace MonoTests.System.Security\r
14 {\r
15 \r
16 public class SecurityElementTest : TestCase\r
17 {\r
18         SecurityElement elem;\r
19         \r
20         public SecurityElementTest () :\r
21                 base ("[MonoTests.System.Security.SecurityElementTest]") {}\r
22 \r
23         public SecurityElementTest (string name) : base (name) {}\r
24 \r
25         protected override void SetUp () \r
26         {\r
27                 elem = CreateElement ();\r
28         }\r
29 \r
30         protected override void TearDown () {}\r
31         \r
32         private SecurityElement CreateElement ()\r
33         {\r
34                 SecurityElement elem = new SecurityElement ("IPermission");\r
35                 elem.AddAttribute ("class", "System");\r
36                 elem.AddAttribute ("version", "1");\r
37                 \r
38                 SecurityElement child = new SecurityElement ("ConnectAccess");          \r
39                 elem.AddChild (child);\r
40                 \r
41                 SecurityElement grandchild = new SecurityElement ("ENDPOINT", "some text");             \r
42                 grandchild.AddAttribute ("transport", "All");\r
43                 grandchild.AddAttribute ("host", "localhost");\r
44                 grandchild.AddAttribute ("port", "8080");\r
45                 child.AddChild (grandchild);\r
46 \r
47                 SecurityElement grandchild2 = new SecurityElement ("ENDPOINT");         \r
48                 grandchild2.AddAttribute ("transport", "Tcp");\r
49                 grandchild2.AddAttribute ("host", "www.ximian.com");\r
50                 grandchild2.AddAttribute ("port", "All");\r
51                 child.AddChild (grandchild2);           \r
52                 \r
53                 return elem;            \r
54         }\r
55 \r
56         public static ITest Suite\r
57         {\r
58                 get {\r
59                         return new TestSuite (typeof (SecurityElementTest));\r
60                 }\r
61         }\r
62 \r
63         public void TestConstructors ()\r
64         {\r
65                 \r
66         }\r
67         \r
68         public void TestAddAttribute ()\r
69         {\r
70                 try {\r
71                         elem.AddAttribute (null, "valid");\r
72                         Fail ("#1");\r
73                 } catch (ArgumentNullException) { }\r
74                 try {\r
75                         elem.AddAttribute ("valid", null);\r
76                         Fail ("#2");\r
77                 } catch (ArgumentNullException) { }\r
78                 try {\r
79                         elem.AddAttribute ("<invalid>", "valid");\r
80                         Fail ("#3");\r
81                 } catch (ArgumentException) { }\r
82                 try {\r
83                         elem.AddAttribute ("valid", "invalid\"");\r
84                         Fail ("#4");\r
85                 } catch (ArgumentException) { }\r
86                 try {\r
87                         elem.AddAttribute ("valid", "valid\'");                 \r
88                 } catch (ArgumentException) { Fail ("#5"); }\r
89                 try {                   \r
90                         elem.AddAttribute ("valid", "valid&");\r
91                         Fail ("#6");\r
92                         // in xml world this is actually not considered valid\r
93                         // but it is by MS.Net\r
94                 } catch (ArgumentException) { }\r
95                 try {\r
96                         elem.AddAttribute ("valid", "<invalid>");\r
97                         Fail ("#7"); \r
98                 } catch (ArgumentException) { }\r
99         }\r
100         \r
101         public void TestAttributes ()\r
102         {\r
103                 Hashtable h = elem.Attributes;\r
104                 \r
105                 /*\r
106                 // this will result in an InvalidCastException on MS.Net\r
107                 // I have no clue why\r
108                 \r
109                 h.Add ("<invalid>", "valid");\r
110                 try {\r
111                         elem.Attributes = h;\r
112                         Fail ("#1");\r
113                 } catch (ArgumentException) { }\r
114                 */\r
115                 \r
116                 h = elem.Attributes;\r
117                 h.Add ("valid", "\"invalid\"");\r
118                 try {\r
119                         elem.Attributes = h;\r
120                         Fail ("#2");\r
121                 } catch (ArgumentException) { }\r
122                 \r
123                 h = elem.Attributes;\r
124                 h.Add ("foo", "bar");\r
125                 Assert ("#3", elem.Attributes.Count != h.Count);\r
126                 \r
127                 elem.Attributes = h;\r
128                 Assert ("#4", elem.Attribute ("foo") != null);\r
129         }\r
130         \r
131         public void TestEqual ()\r
132         {\r
133                 int iTest = 0;\r
134                 try {\r
135                         SecurityElement elem2 = CreateElement ();\r
136                         iTest++;\r
137                         Assert ("#1", elem.Equal (elem2));\r
138                         iTest++;\r
139                         SecurityElement child = (SecurityElement) elem2.Children [0];\r
140                         iTest++;\r
141                         child = (SecurityElement) child.Children [1];\r
142                         iTest++;\r
143                         child.Text = "some text";\r
144                         iTest++;\r
145                         Assert ("#2", !elem.Equal (elem2));\r
146                 } catch (Exception e) {\r
147                         Fail ("Unexpected Exception at iTest = " + iTest + ". e = " + e);\r
148                 }\r
149         }\r
150         \r
151         public void TestEscape ()\r
152         {\r
153                 AssertEquals ("#1", SecurityElement.Escape ("foo<>\"'& bar"), "foo&lt;&gt;&quot;&apos;&amp; bar");\r
154         }\r
155         \r
156         public void TestIsValidAttributeName ()\r
157         {\r
158                 Assert ("#1", !SecurityElement.IsValidAttributeName ("x x")); \r
159                 Assert ("#2", !SecurityElement.IsValidAttributeName ("x<x")); \r
160                 Assert ("#3", !SecurityElement.IsValidAttributeName ("x>x"));\r
161                 Assert ("#4", SecurityElement.IsValidAttributeName ("x\"x"));\r
162                 Assert ("#5", SecurityElement.IsValidAttributeName ("x'x"));\r
163                 Assert ("#6", SecurityElement.IsValidAttributeName ("x&x"));                    \r
164         }\r
165 \r
166         public void TestIsValidAttributeValue ()\r
167         {\r
168                 Assert ("#1", SecurityElement.IsValidAttributeValue ("x x")); \r
169                 Assert ("#2", !SecurityElement.IsValidAttributeValue ("x<x")); \r
170                 Assert ("#3", !SecurityElement.IsValidAttributeValue ("x>x"));\r
171                 Assert ("#4", !SecurityElement.IsValidAttributeValue ("x\"x"));\r
172                 Assert ("#5", SecurityElement.IsValidAttributeValue ("x'x"));\r
173                 Assert ("#6", SecurityElement.IsValidAttributeValue ("x&x"));           \r
174         }\r
175 \r
176         public void TestIsValidTag ()\r
177         {\r
178                 Assert ("#1", !SecurityElement.IsValidTag ("x x")); \r
179                 Assert ("#2", !SecurityElement.IsValidTag ("x<x")); \r
180                 Assert ("#3", !SecurityElement.IsValidTag ("x>x"));\r
181                 Assert ("#4", SecurityElement.IsValidTag ("x\"x"));\r
182                 Assert ("#5", SecurityElement.IsValidTag ("x'x"));\r
183                 Assert ("#6", SecurityElement.IsValidTag ("x&x"));\r
184         }\r
185 \r
186         public void TestIsValidText ()\r
187         {\r
188                 Assert ("#1", SecurityElement.IsValidText ("x x")); \r
189                 Assert ("#2", !SecurityElement.IsValidText ("x<x")); \r
190                 Assert ("#3", !SecurityElement.IsValidText ("x>x"));\r
191                 Assert ("#4", SecurityElement.IsValidText ("x\"x"));\r
192                 Assert ("#5", SecurityElement.IsValidText ("x'x"));\r
193                 Assert ("#6", SecurityElement.IsValidText ("x&x"));\r
194         }\r
195         \r
196         public void TestSearchForChildByTag ()\r
197         {\r
198                 SecurityElement child = null;\r
199                 try {\r
200                         child = elem.SearchForChildByTag (null);\r
201                         Fail ("#1 should have thrown an ArgumentNullException");\r
202                 } catch (ArgumentNullException) { }\r
203 \r
204                 child = elem.SearchForChildByTag ("doesnotexist");\r
205                 AssertEquals ("#2", child, null);\r
206                 \r
207                 child = elem.SearchForChildByTag ("ENDPOINT");\r
208                 AssertEquals ("#3", child, null);\r
209                 \r
210                 child = (SecurityElement) elem.Children [0];\r
211                 child = child.SearchForChildByTag ("ENDPOINT");\r
212                 AssertEquals ("#4", child.Attribute ("transport"), "All");\r
213         }\r
214         \r
215         public void TestSearchForTextOfTag ()\r
216         {\r
217                 try {\r
218                         string t1 = elem.SearchForTextOfTag (null);\r
219                         Fail ("#1 should have thrown an ArgumentNullException");\r
220                 } catch (ArgumentNullException) { }\r
221                 \r
222                 string t2 = elem.SearchForTextOfTag ("ENDPOINT");\r
223                 AssertEquals ("#2", t2, "some text");\r
224         }\r
225 }\r
226 \r
227 }\r
228 \r