[System] UriKind.RelativeOrAbsolute workaround.
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / TreeNodeTest.cs
1 //
2 // Tests for System.Web.UI.WebControls.ImageMap.cs
3 //
4 // Author:
5 //  Hagit Yidov (hagity@mainsoft.com
6 //
7 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
8 //
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:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
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.
27 //
28
29 using NUnit.Framework;
30 using System;
31 using System.IO;
32 using System.Globalization;
33 using System.Web;
34 using System.Web.UI;
35 using System.Web.UI.WebControls;
36 using MonoTests.stand_alone.WebHarness;
37 using MonoTests.SystemWeb.Framework;
38 using System.Threading;
39
40 namespace MonoTests.System.Web.UI.WebControls {
41         class PokerTreeNode : TreeNode {
42                 // View state Stuff
43                 public PokerTreeNode () {
44                         TrackViewState ();
45                 }
46
47                 public object SaveState () {
48                         return SaveViewState ();
49                 }
50
51                 public void LoadState (object o) {
52                         LoadViewState (o);
53                 }
54
55                 public bool IsTrackingViewStateBase { get { return (base.IsTrackingViewState); } }
56
57                 public virtual object CloneBase () {
58                         return (base.Clone ());
59                 }
60
61                 public virtual void RenderPostTextBase (HtmlTextWriter writer) {
62                         base.RenderPostText (writer);
63                 }
64
65                 public virtual void RenderPreTextBase (HtmlTextWriter writer) {
66                         base.RenderPreText (writer);
67                 }
68
69         }
70
71         [TestFixture]
72         public class TreeNodeTest {
73
74                 [Test]
75                 public void TreeNode_DefaultProperties () {
76                         PokerTreeNode tn = new PokerTreeNode ();
77                         Assert.AreEqual (false, tn.Checked, "Checked");
78                         Assert.AreEqual (0, tn.ChildNodes.Count, "ChildNodes.Count");
79                         Assert.AreEqual (false, tn.DataBound, "DataBound");
80                         Assert.AreEqual (null, tn.DataItem, "DataItem");
81                         Assert.AreEqual (string.Empty, tn.DataPath, "DataPath");
82                         Assert.AreEqual (0, tn.Depth, "Depth");
83                         Assert.AreEqual (null, tn.Expanded, "Expanded");
84                         Assert.AreEqual (string.Empty, tn.ImageToolTip, "ImageToolTip");
85                         Assert.AreEqual (string.Empty, tn.ImageUrl, "ImageUrl");
86                         Assert.AreEqual (string.Empty, tn.NavigateUrl, "NavigateUrl");
87                         Assert.AreEqual (null, tn.Parent, "Parent");
88                         Assert.AreEqual (false, tn.PopulateOnDemand, "PopulateOnDemand");
89                         Assert.AreEqual (TreeNodeSelectAction.Select, tn.SelectAction, "SelectAction");
90                         Assert.AreEqual (false, tn.Selected, "Selected");
91                         Assert.AreEqual (null, tn.ShowCheckBox, "ShowCheckBox");
92                         Assert.AreEqual (string.Empty, tn.Target, "Target");
93                         Assert.AreEqual (string.Empty, tn.Text, "Text");
94                         Assert.AreEqual (string.Empty, tn.Value, "Value");
95                         Assert.AreEqual (string.Empty, tn.ToolTip, "ToolTip");
96                         Assert.AreEqual (string.Empty, tn.ValuePath, "ValuePath");
97                         Assert.AreEqual (true, tn.IsTrackingViewStateBase, "IsTrackingViewState");
98                 }
99
100                 [Test]
101                 public void TreeNode_AssignToDefaultProperties ()
102                 {
103                         PokerTreeNode tn = new PokerTreeNode ();
104                         tn.Checked = false;
105                         Assert.AreEqual (false, tn.Checked, "Checked");
106                         tn.ChildNodes.Add (new TreeNode ());
107                         Assert.AreEqual (1, tn.ChildNodes.Count, "ChildNodes.Count");
108                         tn.Expanded = false;
109                         Assert.AreEqual (false, tn.Expanded, "Expanded");
110                         tn.ImageToolTip = string.Empty;
111                         Assert.AreEqual (string.Empty, tn.ImageToolTip, "ImageToolTip");
112                         tn.ImageUrl = string.Empty;
113                         Assert.AreEqual (string.Empty, tn.ImageUrl, "ImageUrl");
114                         tn.NavigateUrl = string.Empty;
115                         Assert.AreEqual (string.Empty, tn.NavigateUrl, "NavigateUrl");
116                         tn.PopulateOnDemand = false;
117                         Assert.AreEqual (false, tn.PopulateOnDemand, "PopulateOnDemand");
118                         tn.SelectAction = TreeNodeSelectAction.Select;
119                         Assert.AreEqual (TreeNodeSelectAction.Select, tn.SelectAction, "SelectAction");
120                         tn.Selected = false;
121                         Assert.AreEqual (false, tn.Selected, "Selected");
122                         tn.ShowCheckBox = false;
123                         Assert.AreEqual (false, tn.ShowCheckBox, "ShowCheckBox");
124                         tn.Target = string.Empty;
125                         Assert.AreEqual (string.Empty, tn.Target, "Target");
126                         tn.Text = string.Empty;
127                         Assert.AreEqual (string.Empty, tn.Text, "Text");
128                         tn.Value = string.Empty;
129                         Assert.AreEqual (string.Empty, tn.Value, "Value");
130                         tn.ToolTip = string.Empty;
131                         Assert.AreEqual (string.Empty, tn.ToolTip, "ToolTip");
132                 }
133
134                 [Test]
135                 public void TreeNode_Method_Select () {
136                         PokerTreeNode tn = new PokerTreeNode ();
137                         Assert.AreEqual (false, tn.Selected, "BeforeSelect");
138                         tn.Select ();
139                         Assert.AreEqual (true, tn.Selected, "AfterSelect");
140                 }
141
142                 [Test]
143                 public void TreeNode_Method_Clone () {
144                         PokerTreeNode tn1 = new PokerTreeNode ();
145                         TreeNode tn2 = new TreeNode ();
146                         tn1.Text = "CloneThisNode";
147                         tn1.Value = "111";
148                         Assert.AreEqual (string.Empty, tn2.Text, "BeforeClone1");
149                         Assert.AreEqual (string.Empty, tn2.Value, "BeforeClone2");
150                         tn2 = (TreeNode) tn1.CloneBase ();
151                         Assert.AreEqual ("CloneThisNode", tn2.Text, "AfterClone1");
152                         Assert.AreEqual ("111", tn2.Value, "AfterClone2");
153                 }
154
155                 [Test]
156                 [Category ("NunitWeb")]
157                 public void TreeNode_NavigateUrl () {
158                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pageLoadNavigateUrl));
159 #if NET_4_0
160                         string strTarget = "<a href=\"#treeview1_SkipLink\"><img alt=\"Skip Navigation Links.\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"treeview1\">\r\n\t<table cellpadding=\"0\" cellspacing=\"0\" style=\"border-width:0;\">\r\n\t\t<tr>\r\n\t\t\t<td><img src=\"/NunitWeb/WebResource.axd?d=Me-CdxEHiTTT3lXTDd0I2ilpe6vhhhJjssENmbNkrSY1&amp;t=634067491135766272\" alt=\"\" /></td><td style=\"white-space:nowrap;\"><a class=\"treeview1_0\" href=\"NavigateUrl\" id=\"treeview1t0\">TreeNode1</a></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div><a id=\"treeview1_SkipLink\"></a>";
161 #else
162                         string strTarget =
163 @"<a href=""#treeview1_SkipLink""><img alt=""Skip Navigation Links."" src=""/NunitWeb/WebResource.axd?d=kffkK8wYLPknq-W8AKNdNQ2&amp;t=632883840303269703"" width=""0"" height=""0"" style=""border-width:0px;"" /></a><div id=""treeview1"">
164         <table cellpadding=""0"" cellspacing=""0"" style=""border-width:0;"">
165                 <tr>
166                         <td><img src=""/NunitWeb/WebResource.axd?d=edXX1vkoy5lI0CekgaZ5zZhMbc1ZCZv4nlS9J-l53l41&amp;t=632883840303269703"" alt="""" /></td><td style=""white-space:nowrap;""><a class=""treeview1_0"" href=""NavigateUrl"" id=""treeview1t0"">TreeNode1</a></td>
167                 </tr>
168         </table>
169 </div><a id=""treeview1_SkipLink""></a>";
170 #endif
171                         string str = HtmlDiff.GetControlFromPageHtml (t.Run ());
172                         HtmlDiff.AssertAreEqual (strTarget, str, "PostbackNavigate");
173                 }
174                 public static void pageLoadNavigateUrl (Page page) {
175                         TreeView tv = new TreeView ();
176                         tv.ID = "treeview1";
177                         PokerTreeNode tn1 = new PokerTreeNode ();
178                         tn1.Text = "TreeNode1";
179                         tn1.NavigateUrl = "NavigateUrl";
180                         tv.Nodes.Add (tn1);
181                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
182                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
183                         page.Form.Controls.Add (lcb);
184                         page.Form.Controls.Add (tv);
185                         page.Form.Controls.Add (lce);
186                 }
187
188                 static void tv_SelectedNodeChanged (object sender, EventArgs e) {
189                         TreeView tv = (TreeView) sender;
190                         WebTest.CurrentTest.UserData = tv.SelectedNode.Text;
191                 }
192
193                 [Test]
194                 [Category ("NunitWeb")]
195                 public void TreeNode_Render () {
196                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (pageLoadRender));
197 #if NET_4_0
198                         string strTarget = "<a href=\"#treeview1_SkipLink\"><img alt=\"Skip Navigation Links.\" src=\"/NunitWeb/WebResource.axd?d=8VpphgAbakKUC_J8R6hR0Q2&amp;t=634067491135766272\" width=\"0\" height=\"0\" style=\"border-width:0px;\" /></a><div id=\"treeview1\">\r\n\t<table cellpadding=\"0\" cellspacing=\"0\" style=\"border-width:0;\">\r\n\t\t<tr>\r\n\t\t\t<td><a href=\"javascript:__doPostBack(&#39;treeview1&#39;,&#39;tvalue&#39;)\"><img src=\"/NunitWeb/WebResource.axd?d=Me-CdxEHiTTT3lXTDd0I2qLe7WfoYyDfWfVSkV5Suzs1&amp;t=634067491135766272\" alt=\"Collapse text\" style=\"border-width:0;\" /></a></td><td><a href=\"navigateUrl\" target=\"target\" title=\"ToolTip\" id=\"treeview1t0i\" tabindex=\"-1\"><img src=\"imageUrl\" alt=\"ImageToolTip\" style=\"border-width:0;\" /></a></td><td style=\"white-space:nowrap;\"><input type=\"checkbox\" name=\"treeview1n0CheckBox\" id=\"treeview1n0CheckBox\" checked=\"checked\" title=\"ToolTip\" /><a class=\"treeview1_0\" href=\"navigateUrl\" target=\"target\" title=\"ToolTip\" id=\"treeview1t0\">text</a></td>\r\n\t\t</tr>\r\n\t</table><table cellpadding=\"0\" cellspacing=\"0\" style=\"border-width:0;\">\r\n\t\t<tr>\r\n\t\t\t<td><div style=\"width:20px;height:1px\"></div></td><td><img src=\"/NunitWeb/WebResource.axd?d=Me-CdxEHiTTT3lXTDd0I2ilpe6vhhhJjssENmbNkrSY1&amp;t=634067491135766272\" alt=\"\" /></td><td style=\"white-space:nowrap;\"><a class=\"treeview1_0\" href=\"javascript:__doPostBack(&#39;treeview1&#39;,&#39;svalue\\\\childenode&#39;)\" id=\"treeview1t1\">childenode</a></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div><a id=\"treeview1_SkipLink\"></a>";
199 #else
200                         string strTarget =
201 @"<a href=""#treeview1_SkipLink""><img alt=""Skip Navigation Links."" src=""/NunitWeb/WebResource.axd?d=kffkK8wYLPknq-W8AKNdNQ2&amp;t=632883840303269703"" width=""0"" height=""0"" style=""border-width:0px;"" /></a><div id=""treeview1"">
202         <table cellpadding=""0"" cellspacing=""0"" style=""border-width:0;"">
203                 <tr>
204                         <td><a id=""treeview1n0"" href=""javascript:TreeView_ToggleNode(treeview1_Data,0,treeview1n0,' ',treeview1n0Nodes)""><img src=""/NunitWeb/WebResource.axd?d=edXX1vkoy5lI0CekgaZ5zW7-1Af97Wq_r6fRK7PDqP81&amp;t=632883840303269703"" alt=""Collapse text"" style=""border-width:0;"" /></a></td><td><a href=""navigateUrl"" target=""target"" onclick=""javascript:TreeView_SelectNode(treeview1_Data, this,'treeview1t0');javascript:TreeView_ToggleNode(treeview1_Data,0,treeview1n0,' ',treeview1n0Nodes)"" title=""ToolTip"" id=""treeview1t0i""><img src=""imageUrl"" alt=""ImageToolTip"" style=""border-width:0;"" /></a></td><td style=""white-space:nowrap;""><input type=""checkbox"" name=""treeview1n0CheckBox"" id=""treeview1n0CheckBox"" checked=""checked"" title=""text"" /><a class=""treeview1_0"" href=""navigateUrl"" target=""target"" onclick=""javascript:TreeView_SelectNode(treeview1_Data, this,'treeview1t0');javascript:TreeView_ToggleNode(treeview1_Data,0,treeview1n0,' ',treeview1n0Nodes)"" title=""ToolTip"" id=""treeview1t0"">text</a></td>
205                 </tr>
206         </table>
207         <table cellpadding=""0"" cellspacing=""0"" style=""border-width:0;"">
208                 <tr>
209                         <td><div style=""width:20px;height:1px""></div></td><td><img src=""/NunitWeb/WebResource.axd?d=edXX1vkoy5lI0CekgaZ5zZhMbc1ZCZv4nlS9J-l53l41&amp;t=632883840303269703"" alt="""" /></td><td style=""white-space:nowrap;""><a class=""treeview1_0"" href=""javascript:__doPostBack('treeview1','svalue\\childenode')"" onclick=""TreeView_SelectNode(treeview1_Data, this,'treeview1t1');"" id=""treeview1t1"">childenode</a></td>
210                 </tr>
211         </table>
212 </div><a id=""treeview1_SkipLink""></a>";
213 #endif
214                         string str = HtmlDiff.GetControlFromPageHtml (t.Run ());
215                         HtmlDiff.AssertAreEqual (strTarget, str, "Render");
216                 }
217                 public static void pageLoadRender (Page page) {
218                         TreeView tv = new TreeView ();
219                         tv.EnableClientScript = false;
220                         tv.ID = "treeview1";
221                         TreeNode tn = new TreeNode
222                                 ("text", "value", "imageUrl", "navigateUrl", "target");
223                         tn.Checked = true;
224                         tn.ChildNodes.Add (new TreeNode ("childenode"));
225                         tn.Expanded = true;
226                         tn.ImageToolTip = "ImageToolTip";
227                         tn.PopulateOnDemand = false;
228                         tn.SelectAction = TreeNodeSelectAction.SelectExpand;
229                         tn.Selected = true;
230                         tn.ShowCheckBox = true;
231                         tn.ToolTip = "ToolTip";
232                         tv.Nodes.Add (tn);
233                         tv.DataBind ();
234                         LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
235                         LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
236                         page.Form.Controls.Add (lcb);
237                         page.Form.Controls.Add (tv);
238                         page.Form.Controls.Add (lce);
239                 }
240
241                 [Test]
242                 [ExpectedException (typeof (InvalidOperationException))]
243                 [Ignore ("Pending more investigation (see FIXME at the top of TreeView.RenderNode)")]
244                 public void PopulateOnDemand_With_ChildNodes ()
245                 {
246                         WebTest t = new WebTest (PageInvoker.CreateOnLoad (PopulateOnDemand_With_ChildNodes_OnLoad));
247                         t.Run ();
248                 }
249
250                 protected static void PopulateOnDemand_With_ChildNodes_OnLoad (Page p)
251                 {
252                         TreeView tv = new TreeView ();
253                         TreeNode node = new TreeNode ("text", "value", "imageUrl", "navigateUrl", "target");
254                         node.PopulateOnDemand = true;
255                         node.ChildNodes.Add (new TreeNode ("text", "value", "imageUrl", "navigateUrl", "target"));
256                         tv.Nodes.Add (node);
257
258                         p.Form.Controls.Add (tv);
259                 }
260                 
261                 [Test]
262                 public void TreeNode_ToggleExpandState ()
263                 {
264                         TreeNode node = new TreeNode ("node");
265                         Assert.AreEqual (null, node.Expanded, "TreeNode_ToggleExpandState#1");
266                         node.ToggleExpandState ();
267                         Assert.AreEqual (true, node.Expanded, "TreeNode_ToggleExpandState#2");
268                         node.ToggleExpandState ();
269                         Assert.AreEqual (false, node.Expanded, "TreeNode_ToggleExpandState#3");
270                 }
271
272                 [Test]
273                 public void TreeNode_TextValue1 ()
274                 {
275                         TreeNode node = new TreeNode ();
276                         node.Text = "TTT";
277                         Assert.AreEqual ("TTT", node.Value, "TreeNode_TextValue1#1");
278                         node.Value = "";
279                         Assert.AreEqual ("", node.Value, "TreeNode_TextValue1#2");
280                         node.Value = null;
281                         Assert.AreEqual ("TTT", node.Value, "TreeNode_TextValue1#3");
282                 }
283
284                 [Test]
285                 public void TreeNode_TextValue2 ()
286                 {
287                         TreeNode node = new TreeNode ();
288                         node.Value = "VVV";
289                         Assert.AreEqual ("VVV", node.Text, "TreeNode_TextValue2#1");
290                         node.Text = "";
291                         Assert.AreEqual ("", node.Text, "TreeNode_TextValue2#2");
292                         node.Text = null;
293                         Assert.AreEqual ("VVV", node.Text, "TreeNode_TextValue2#3");
294                 }
295         }
296 }
297