New test.
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / SiteMapDataSourceTest.cs
1 //
2 // Tests for System.Web.UI.WebControls.View.cs
3 //
4 // Author:
5 //      Yoni Klein (yonik@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
30 #if NET_2_0
31
32 using NUnit.Framework;
33 using System;
34 using System.IO;
35 using System.Globalization;
36 using System.Configuration;
37 using System.Collections;
38 using System.Collections.Specialized;
39 using System.Web;
40 using System.Web.UI;
41 using System.Web.UI.WebControls;
42 using System.Security.Permissions;
43
44
45 namespace MonoTests.System.Web.UI.WebControls
46 {
47         class PokerSiteMapDataSource : SiteMapDataSource
48         {
49                 public PokerSiteMapDataSource ()
50                 {
51                         TrackViewState ();
52                 }
53                 public object SaveState ()
54                 {
55                         return SaveViewState ();
56                 }
57                 public void LoadState (object o)
58                 {
59                         LoadViewState (o);
60                 }
61                 public StateBag StateBag
62                 {
63                         get { return base.ViewState; }
64                 }
65                 public HierarchicalDataSourceView DoHierarchicalDataSourceView (string str)
66                 {
67                         return GetHierarchicalView (str);
68                 }
69         }
70
71         [TestFixture]
72         public class SiteMapDataSourceTest
73         {
74
75                 [Test]
76                 public void SiteMapDataSource_DefaultProperties ()
77                 {
78
79                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
80                         Assert.AreEqual (true, p.ShowStartingNode, "ShowStartingNode");
81                         Assert.AreEqual (string.Empty, p.SiteMapProvider, "SiteMapProvider");
82                         Assert.AreEqual (false, p.StartFromCurrentNode, "StartFromCurrentNode");
83                         Assert.AreEqual (0, p.StartingNodeOffset, "StartingNodeOffset");
84                         Assert.AreEqual (string.Empty, p.StartingNodeUrl, "StartingNodeUrl");
85                         
86                 }
87
88                 [Test]
89                 public void SiteMapDataSource_ContainsListCollection ()
90                 {       
91                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
92                         Assert.AreEqual (true, p.ContainsListCollection, "ContainsListCollection");
93                 }
94                 
95                 [Test]
96                 public void SiteMapDataSource_ChangeProperties ()
97                 {
98                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
99                         p.ShowStartingNode = false;
100                         Assert.AreEqual (false, p.ShowStartingNode, "ShowStartingNode");
101                         Assert.AreEqual (1, p.StateBag.Count, "ShowStartingNode#1");
102
103                         p.SiteMapProvider = "test";
104                         Assert.AreEqual ("test", p.SiteMapProvider, "SiteMapProvider");
105                         Assert.AreEqual (2, p.StateBag.Count, "SiteMapProvider#1");
106                         // null properties doe's not affects on state bag count
107                         p.SiteMapProvider = null;
108                         Assert.AreEqual (2, p.StateBag.Count, "SiteMapProvider#2");
109
110                         p.StartFromCurrentNode = true;
111                         Assert.AreEqual (true, p.StartFromCurrentNode, "StartFromCurrentNode");
112                         Assert.AreEqual (3, p.StateBag.Count, "StartFromCurrentNode#1");
113
114                         p.StartingNodeOffset = 1;
115                         Assert.AreEqual (1, p.StartingNodeOffset, "StartingNodeOffset");
116                         Assert.AreEqual (4, p.StateBag.Count, "StartingNodeOffset#2");
117
118                         p.StartingNodeUrl = "default.aspx";
119                         Assert.AreEqual ("default.aspx", p.StartingNodeUrl, "StartingNodeUrl");
120                         Assert.AreEqual (5, p.StateBag.Count, "StartingNodeUrl#1");
121                         // null properties doe's not affects on state bag count
122                         p.StartingNodeUrl = null;
123                         Assert.AreEqual (5, p.StateBag.Count, "StartingNodeUrl#2");
124                 }
125
126                 [Test]
127                 public void SiteMapDataSource_GetList ()
128                 {
129                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
130                         Assert.IsNotNull (p.GetList (), "GetList");
131                         Assert.IsTrue (p.ContainsListCollection, "ContainsListCollection");
132                 }
133
134                 [Test]
135                 public void SiteMapDataSource_GetViewNames () {
136                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
137                         Assert.AreEqual (1, p.GetViewNames ().Count, "GetViewNames().Count");
138                         Assert.AreEqual ("DefaultView", ((string []) p.GetViewNames ()) [0], "GetViewNames () [0]");
139                 }
140                 
141                 [Test]
142 #if TARGET_JVM //BUG #6489
143                 [Category ("NotWorking")]
144 #endif
145                 public void SiteMapDataSource_GetView ()
146                 {
147                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
148                         p.Provider = new mySiteMapProvider ();
149                         DataSourceView V  = p.GetView("");
150                         Assert.IsNotNull (V, "GetView");
151                 }
152
153                 [Test]
154                 public void SiteMapDataSource_ViewState ()
155                 {
156                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
157                         p.SiteMapProvider = "test";
158
159                         p.StartFromCurrentNode = false;
160                         p.StartingNodeOffset = 1;
161                         p.StartingNodeUrl = "default.aspx";
162
163                         object state = p.SaveState ();
164                         PokerSiteMapDataSource copy = new PokerSiteMapDataSource ();
165                         copy.LoadState (state);
166
167                         Assert.AreEqual ("test", copy.SiteMapProvider, "SiteMapProvider");
168                         Assert.AreEqual (false, copy.StartFromCurrentNode, "StartFromCurrentNode");
169                         Assert.AreEqual (1, copy.StartingNodeOffset, "StartingNodeOffset");
170                         Assert.AreEqual ("default.aspx", copy.StartingNodeUrl, "StartingNodeUrl");
171                 }
172
173                 [Test]
174                 public void SiteMapDataSource_HierarchicalDataSourceView ()
175                 {
176                         PokerSiteMapDataSource p = new PokerSiteMapDataSource ();
177                         p.Provider = new mySiteMapProvider ();
178                         HierarchicalDataSourceView h = p.DoHierarchicalDataSourceView ("1");
179                         Assert.IsNotNull (h, "HierarchicalDataSourceView");
180                 }
181
182         }
183
184    
185         // Helper Class
186         public class mySiteMapProvider : StaticSiteMapProvider
187         {
188                 private SiteMapNode rootNode = null;
189                 // Implement a default constructor.
190                 public mySiteMapProvider ()
191                 {
192                 }
193                 // Some basic state to help track the initialization state of the provider.
194                 private bool initialized = false;
195                 public virtual bool IsInitialized
196                 {
197                         get { return initialized; }
198                 }
199
200                 // Return the root node of the current site map.
201                 public override SiteMapNode RootNode
202                 {
203                         get
204                         {
205                                 SiteMapNode temp = null;
206                                 temp = BuildSiteMap ();
207                                 return temp;
208                         }
209                 }
210                 protected override SiteMapNode GetRootNodeCore ()
211                 {
212                         return RootNode;
213                 }
214                 // Initialize is used to initialize the properties and any state that the
215                 // AccessProvider holds, but is not used to build the site map.
216                 // The site map is built when the BuildSiteMap method is called.
217                 public override void Initialize (string name, NameValueCollection attributes)
218                 {
219                         if (IsInitialized)
220                                 return;
221
222                         base.Initialize (name, attributes);
223                         initialized = true;
224                 }
225
226                 ///
227                 /// SiteMapProvider and StaticSiteMapProvider methods that this derived class must override.
228                 ///
229                 // Clean up any collections or other state that an instance of this may hold.
230                 protected override void Clear ()
231                 {
232                         lock (this) {
233                                 rootNode = null;
234                                 base.Clear ();
235                         }
236                 }
237
238                 // Build an in-memory representation from persistent
239                 // storage, and return the root node of the site map.
240                 public override SiteMapNode BuildSiteMap ()
241                 {
242                         // Since the SiteMap class is static, make sure that it is
243                         // not modified while the site map is built.
244                         lock (this) {
245
246                                 // If there is no root node, then there is no site map.
247                                 if (null == rootNode) {
248                                         // Start with a clean slate
249                                         Clear ();
250
251                                         // Select the root node of the site map .
252                                         rootNode = new SiteMapNode (this, "1", "default.aspx", "Default");
253
254                                 }
255
256                                 else return null;
257
258                                 SiteMapNode childNode = null;
259                                 childNode = new SiteMapNode (this, "2", "catalog.aspx", "catalog");
260                                 AddNode (childNode, rootNode);
261                                 childNode = new SiteMapNode (this, "3", "aboutus.aspx", "about us");
262                                 AddNode (childNode, rootNode);
263
264                                 return rootNode;
265                         }
266                 }
267         }
268
269         
270 }
271 #endif