2 // SecurityElementTest.cs - NUnit Test Cases for System.Security.SecurityElement
\r
5 // Lawrence Pit (loz@cable.a2000.nl)
\r
8 using NUnit.Framework;
\r
10 using System.Collections;
\r
11 using System.Security;
\r
13 namespace MonoTests.System.Security
\r
16 public class SecurityElementTest : TestCase
\r
18 SecurityElement elem;
\r
20 public SecurityElementTest () :
\r
21 base ("[MonoTests.System.Security.SecurityElementTest]") {}
\r
23 public SecurityElementTest (string name) : base (name) {}
\r
25 protected override void SetUp ()
\r
27 elem = CreateElement ();
\r
30 protected override void TearDown () {}
\r
32 private SecurityElement CreateElement ()
\r
34 SecurityElement elem = new SecurityElement ("IPermission");
\r
35 elem.AddAttribute ("class", "System");
\r
36 elem.AddAttribute ("version", "1");
\r
38 SecurityElement child = new SecurityElement ("ConnectAccess");
\r
39 elem.AddChild (child);
\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
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
56 public static ITest Suite
\r
59 return new TestSuite (typeof (SecurityElementTest));
\r
63 public void TestConstructors ()
\r
68 public void TestAddAttribute ()
\r
71 elem.AddAttribute (null, "valid");
\r
73 } catch (ArgumentNullException) { }
\r
75 elem.AddAttribute ("valid", null);
\r
77 } catch (ArgumentNullException) { }
\r
79 elem.AddAttribute ("<invalid>", "valid");
\r
81 } catch (ArgumentException) { }
\r
83 elem.AddAttribute ("valid", "invalid\"");
\r
85 } catch (ArgumentException) { }
\r
87 elem.AddAttribute ("valid", "valid\'");
\r
88 } catch (ArgumentException) { Fail ("#5"); }
\r
90 elem.AddAttribute ("valid", "valid&");
\r
92 // in xml world this is actually not considered valid
\r
93 // but it is by MS.Net
\r
94 } catch (ArgumentException) { }
\r
96 elem.AddAttribute ("valid", "<invalid>");
\r
98 } catch (ArgumentException) { }
\r
101 public void TestAttributes ()
\r
103 Hashtable h = elem.Attributes;
\r
106 // this will result in an InvalidCastException on MS.Net
\r
107 // I have no clue why
\r
109 h.Add ("<invalid>", "valid");
\r
111 elem.Attributes = h;
\r
113 } catch (ArgumentException) { }
\r
116 h = elem.Attributes;
\r
117 h.Add ("valid", "\"invalid\"");
\r
119 elem.Attributes = h;
\r
121 } catch (ArgumentException) { }
\r
123 h = elem.Attributes;
\r
124 h.Add ("foo", "bar");
\r
125 Assert ("#3", elem.Attributes.Count != h.Count);
\r
127 elem.Attributes = h;
\r
128 Assert ("#4", elem.Attribute ("foo") != null);
\r
131 public void TestEqual ()
\r
135 SecurityElement elem2 = CreateElement ();
\r
137 Assert ("#1", elem.Equal (elem2));
\r
139 SecurityElement child = (SecurityElement) elem2.Children [0];
\r
141 child = (SecurityElement) child.Children [1];
\r
143 child.Text = "some text";
\r
145 Assert ("#2", !elem.Equal (elem2));
\r
146 } catch (Exception e) {
\r
147 Fail ("Unexpected Exception at iTest = " + iTest + ". e = " + e);
\r
151 public void TestEscape ()
\r
153 AssertEquals ("#1", SecurityElement.Escape ("foo<>\"'& bar"), "foo<>"'& bar");
\r
156 public void TestIsValidAttributeName ()
\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
166 public void TestIsValidAttributeValue ()
\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
176 public void TestIsValidTag ()
\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
186 public void TestIsValidText ()
\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
196 public void TestSearchForChildByTag ()
\r
198 SecurityElement child = null;
\r
200 child = elem.SearchForChildByTag (null);
\r
201 Fail ("#1 should have thrown an ArgumentNullException");
\r
202 } catch (ArgumentNullException) { }
\r
204 child = elem.SearchForChildByTag ("doesnotexist");
\r
205 AssertEquals ("#2", child, null);
\r
207 child = elem.SearchForChildByTag ("ENDPOINT");
\r
208 AssertEquals ("#3", child, null);
\r
210 child = (SecurityElement) elem.Children [0];
\r
211 child = child.SearchForChildByTag ("ENDPOINT");
\r
212 AssertEquals ("#4", child.Attribute ("transport"), "All");
\r
215 public void TestSearchForTextOfTag ()
\r
218 string t1 = elem.SearchForTextOfTag (null);
\r
219 Fail ("#1 should have thrown an ArgumentNullException");
\r
220 } catch (ArgumentNullException) { }
\r
222 string t2 = elem.SearchForTextOfTag ("ENDPOINT");
\r
223 AssertEquals ("#2", t2, "some text");
\r