Grasshopper project system now uses csproj extension
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / XmlDataSourceTest.cs
1 //\r
2 // Tests for System.Web.UI.WebControls.XmlDataSource.cs \r
3 //\r
4 // Author:\r
5 //      Chris Toshok (toshok@novell.com)\r
6 //      Yoni Klain   (yonik@mainsoft.com)   \r
7 //\r
8 \r
9 //\r
10 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
11 //\r
12 // Permission is hereby granted, free of charge, to any person obtaining\r
13 // a copy of this software and associated documentation files (the\r
14 // "Software"), to deal in the Software without restriction, including\r
15 // without limitation the rights to use, copy, modify, merge, publish,\r
16 // distribute, sublicense, and/or sell copies of the Software, and to\r
17 // permit persons to whom the Software is furnished to do so, subject to\r
18 // the following conditions:\r
19 // \r
20 // The above copyright notice and this permission notice shall be\r
21 // included in all copies or substantial portions of the Software.\r
22 // \r
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
30 // NOTE: INCLUDE 2 CATEGORIES [Category ("NunitWeb")];[Category ("NotWorking")]\r
31                 \r
32 \r
33 #if NET_2_0\r
34 \r
35 \r
36 using System;\r
37 using System.Collections;\r
38 using System.Collections.Specialized;\r
39 using System.IO;\r
40 using System.Globalization;\r
41 using System.Web;\r
42 using System.Web.UI;\r
43 using System.Web.UI.WebControls;\r
44 using System.Xml;\r
45 using System.Xml.Xsl;\r
46 using NUnit.Framework;\r
47 using MonoTests.SystemWeb.Framework;\r
48 using MonoTests.stand_alone.WebHarness;\r
49 using System.Threading;\r
50 \r
51 namespace MonoTests.System.Web.UI.WebControls\r
52 {\r
53         class DSPoker : XmlDataSource\r
54         {\r
55                 public DSPoker () {\r
56                         TrackViewState ();\r
57                 }\r
58 \r
59                 public object SaveState () {\r
60                         return SaveViewState ();\r
61                 }\r
62                 public void LoadState (object o) {\r
63                         LoadViewState (o);\r
64                 }\r
65 \r
66                 public HierarchicalDataSourceView  DoGetHierarchicalView(string viewPath)\r
67                 {\r
68                          return base.GetHierarchicalView(viewPath);\r
69                 }\r
70 \r
71                 public void DoOnTransforming (EventArgs e)\r
72                 {\r
73                         base.OnTransforming (e);\r
74                 }\r
75         }\r
76 \r
77         [TestFixture]\r
78         public class XmlDataSourceTest\r
79         {\r
80                 string data = @"<?xml version=""1.0"" encoding=""utf-8""?><IranHistoricalPlaces name=""places""><Place name=""Taghe Bostan""><City>Kermanshah</City><Antiquity>2000</Antiquity></Place><Place name=""Persepolis""><City>Shiraz</City><Antiquity>2500</Antiquity></Place></IranHistoricalPlaces>";\r
81 \r
82                 [TestFixtureSetUp]\r
83                 public void CopyTestResources ()\r
84                 {\r
85 #if DOT_NET \r
86                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xml", "XMLDataSourceTest.xml");\r
87                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");\r
88                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");\r
89                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");\r
90                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");\r
91                         WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");\r
92 #else\r
93                         WebTest.CopyResource (GetType (), "XMLDataSourceTest.xml", "XMLDataSourceTest.xml");\r
94                         WebTest.CopyResource (GetType (), "XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");\r
95                         WebTest.CopyResource (GetType (), "XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");\r
96                         WebTest.CopyResource (GetType (), "XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");\r
97                         WebTest.CopyResource (GetType (), "XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");\r
98                         WebTest.CopyResource (GetType (), "XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");\r
99 #endif\r
100                 }\r
101 \r
102                 [Test]\r
103                 public void Defaults ()\r
104                 {\r
105                         DSPoker p = new DSPoker ();\r
106 \r
107                         Assert.AreEqual ("", p.Data, "A4");\r
108                         Assert.AreEqual ("", p.DataFile, "A5");\r
109                         Assert.AreEqual ("", p.Transform, "A9");\r
110                         Assert.AreEqual ("", p.TransformFile, "A10");\r
111                         Assert.AreEqual ("", p.XPath, "A11");\r
112                         \r
113                         // Added\r
114                         Assert.AreEqual (null, p.TransformArgumentList, "A17");\r
115                 }\r
116 \r
117                 [Test]\r
118                 public void Defaults_NotWorking ()\r
119                 {\r
120                         DSPoker p = new DSPoker ();\r
121                         Assert.AreEqual (0, p.CacheDuration, "A12");\r
122                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, p.CacheExpirationPolicy, "A13");\r
123                         Assert.AreEqual ("", p.CacheKeyDependency, "A14");\r
124                         Assert.AreEqual (true, p.EnableCaching, "A15");\r
125                 }\r
126 \r
127                 [Test]\r
128                 public void Attributes ()\r
129                 {\r
130                         DSPoker p = new DSPoker ();\r
131 \r
132                         p.Data = data;\r
133                         Assert.AreEqual (data, p.Data, "A1");\r
134 \r
135                         p.Transform = "transform";\r
136                         Assert.AreEqual ("transform", p.Transform, "A2");\r
137 \r
138                         p.XPath = "xpath";\r
139                         Assert.AreEqual ("xpath", p.XPath, "A3");\r
140                 }\r
141 \r
142                 [Test]\r
143                 public void ViewState ()\r
144                 {\r
145                         // XXX weird... something odd going on with\r
146                         // ViewState?  or are none of these stored?\r
147                         DSPoker p = new DSPoker ();\r
148 \r
149                         p.Data = data;\r
150                         p.Transform = "transform";\r
151                         p.XPath = "xpath";\r
152 \r
153                         object state = p.SaveState ();\r
154                         DSPoker copy = new DSPoker ();\r
155                         copy.LoadState (state);\r
156                         Assert.AreEqual ("", copy.Data, "A1");\r
157                         Assert.AreEqual ("", copy.Transform, "A2");\r
158                         Assert.AreEqual ("", copy.XPath, "A3");\r
159 \r
160                         p = new DSPoker ();\r
161                         p.DataFile = "DataFile";\r
162                         p.TransformFile = "TransformFile";\r
163 \r
164                         state = p.SaveState ();\r
165                         copy = new DSPoker ();\r
166 \r
167                         copy.LoadState (state);\r
168                         Assert.AreEqual ("", copy.DataFile, "A1");\r
169                         Assert.AreEqual ("", copy.TransformFile, "A2");\r
170                 }\r
171 \r
172                 [Test]\r
173                 [Category ("NunitWeb")]\r
174                 public void DataFile ()\r
175                 {\r
176                         new WebTest (PageInvoker.CreateOnLoad (datafile)).Run ();\r
177                 }\r
178 \r
179                 public static void datafile (Page p)\r
180                 {\r
181                         string originalxml = @"<?xml version=""1.0"" encoding=""utf-8""?><bookstore xmlns:bk=""urn:samples""><book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262""><title>Pride and Prejudice</title><author><first-name>Jane</first-name><last-name>Austen</last-name></author><price>24.95</price>""\r
182                         </book><book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139""><title>The Handmaid's Tale</title><author><first-name>Margaret</first-name><last-name>Atwood</last-name></author><price>29.95</price></book></bookstore>";\r
183 \r
184                         XmlDataSource ds = new XmlDataSource ();\r
185                         p.Form.Controls.Add (ds);\r
186                         ds.DataFile = "~/XMLDataSourceTest.xml";\r
187                         ds.DataBind ();\r
188                         string derivedxml = ((XmlDocument) ds.GetXmlDocument ()).InnerXml;\r
189                         HtmlDiff.AssertAreEqual (originalxml, derivedxml, "Loading xml");\r
190                 }\r
191 \r
192                 [Test]\r
193                 public void GetXmlDocument ()\r
194                 {\r
195                         DSPoker p = new DSPoker ();\r
196                         p.Data = data;\r
197                         XmlDocument doc = p.GetXmlDocument ();\r
198                         HtmlDiff.AssertAreEqual (data, doc.InnerXml, "GetXmlDocument");\r
199                 }\r
200 \r
201                 [Test]\r
202                 [Category ("NunitWeb")]\r
203                 public void XPath ()\r
204                 {\r
205                         Page page = new Page ();\r
206                         XmlDataSource ds = new XmlDataSource ();\r
207                         ds.ID = "ds";\r
208                         ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>\r
209                                         <bookstore xmlns:bk=""urn:samples"">\r
210                                           <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">\r
211                                             <title>Pride and Prejudice</title>\r
212                                             <author>\r
213                                               <first-name>Jane</first-name>\r
214                                               <last-name>Austen</last-name>\r
215                                             </author>\r
216                                             <price>24.95</price>""\r
217                                           </book>\r
218                                           <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">\r
219                                             <title>The Handmaid's Tale</title>\r
220                                             <author>\r
221                                               <first-name>Margaret</first-name>\r
222                                               <last-name>Atwood</last-name>\r
223                                             </author>\r
224                                             <price>29.95</price>\r
225                                           </book>\r
226                                         </bookstore>";\r
227                         DataList list0 = new DataList ();\r
228                         DataList list1 = new DataList ();\r
229                         DataList list2 = new DataList ();\r
230                         page.Controls.Add (list0);\r
231                         page.Controls.Add (list1);\r
232                         page.Controls.Add (list2);\r
233                         page.Controls.Add (ds);\r
234                         list0.DataSourceID = "ds";\r
235                         list0.DataBind ();\r
236                         Assert.AreEqual (2, list0.Items.Count, "Before XPath elements");\r
237 \r
238                         ds.XPath = "/bookstore/book [title='Pride and Prejudice']";\r
239                         list1.DataSourceID = "ds";\r
240                         list1.DataBind ();\r
241                         Assert.AreEqual (1, list1.Items.Count, "After XPath elements");\r
242 \r
243                         ds.XPath = "bookstore/book [@genre='novel']";\r
244                         list2.DataSourceID = "ds";\r
245                         list2.DataBind ();\r
246                         Assert.AreEqual (2, list2.Items.Count, "After XPath property");\r
247                 }\r
248 \r
249                 [Test]\r
250                 public void GetHierarchicalView ()\r
251                 {\r
252                         Page page = new Page ();\r
253                         DSPoker ds = new DSPoker ();\r
254                         ds.ID = "ds";\r
255                         ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>\r
256                                         <bookstore xmlns:bk=""urn:samples"">\r
257                                           <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">\r
258                                             <title>Pride and Prejudice</title>\r
259                                             <author>\r
260                                               <first-name>Jane</first-name>\r
261                                               <last-name>Austen</last-name>\r
262                                             </author>\r
263                                             <price>24.95</price>\r
264                                           </book>\r
265                                           <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">\r
266                                             <title>The Handmaid's Tale</title>\r
267                                             <author>\r
268                                               <first-name>Margaret</first-name>\r
269                                               <last-name>Atwood</last-name>\r
270                                             </author>\r
271                                             <price>29.95</price>\r
272                                           </book>\r
273                                         </bookstore>";\r
274                         HierarchicalDataSourceView view = ds.DoGetHierarchicalView ("");\r
275                         IHierarchicalEnumerable num = view.Select ();\r
276                         foreach (object obj in num) {\r
277                                 IHierarchyData hdata = num.GetHierarchyData (obj);\r
278                                 XmlElement element = (XmlElement) hdata.Item;\r
279                                 Assert.AreEqual ("bookstore", element.Name, "RootElementName");\r
280                                 Assert.AreEqual ("Pride and PrejudiceJaneAusten24.95The Handmaid's TaleMargaretAtwood29.95", element.InnerText, "InnerText");\r
281                                 Assert.AreEqual (2, element.ChildNodes.Count, "ChildElementNodes");\r
282                         }\r
283                 }\r
284 \r
285                 [Test]\r
286                 [Category ("NunitWeb")]\r
287                 public void Transform ()\r
288                 {\r
289                         string origin = @"<div>\r
290                                                 <h2>Order</h2><hr>\r
291                                                 <table>\r
292                                                   <tr>\r
293                                                     <td>Customer</td>\r
294                                                     <td><font color=""blue"">12345</font></td>\r
295                                                     <td>Todd</td>\r
296                                                     <td>Rowe</td>\r
297                                                   </tr>\r
298                                                 </table>\r
299                                                 <hr></div>";\r
300                         string result = new WebTest ("XMLDataSourceTest1.aspx").Run();\r
301                         HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml(result) , "TransformFail");\r
302                 }\r
303 \r
304                 [Test]\r
305                 [Category ("NunitWeb")]\r
306                 public void TransformFile ()\r
307                 {\r
308                         string origin = @"<div><h2>Order</h2>\r
309                                                 <hr>\r
310                                                 <table>\r
311                                                   <tr>\r
312                                                     <td>Customer</td>\r
313                                                     <td><font color=""blue"">12345</font></td>\r
314                                                     <td>Todd</td>\r
315                                                     <td>Rowe</td>\r
316                                                   </tr>\r
317                                                 </table>\r
318                                                 <hr>\r
319                                           </div>";\r
320                         string result = new WebTest ("XMLDataSourceTest2.aspx").Run ();\r
321                         HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformFileFail");\r
322                 }\r
323 \r
324                 [Test]\r
325                 [Category ("NunitWeb")]\r
326                 public void TransformArgumentList ()\r
327                 {\r
328                         string origin = @"<div>\r
329                                               <h2>Order</h2>\r
330                                                 <hr>\r
331                                                 <table>\r
332                                                   <tr>\r
333                                                     <td>Customer</td>\r
334                                                     <td><font color=""blue"">12345purchased by: Mainsoft developers</font></td>\r
335                                                     <td>Todd</td>\r
336                                                     <td>Rowe</td>\r
337                                                   </tr>\r
338                                                 </table>\r
339                                                 <hr>\r
340                                         </div>";\r
341                         string result = new WebTest ("XMLDataSourceTest3.aspx").Run ();\r
342                         HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");\r
343                 }\r
344 \r
345                 [Test]\r
346                 [Category ("NunitWeb")]\r
347 #if TARGET_JVM\r
348                 [Category ("NotWorking")] // can not write into file located inside jar\r
349 #endif\r
350                 public void Save ()\r
351                 {\r
352                         string origin = @"<div>\r
353                                                 <h2>BookStore</h2><hr>\r
354                                                 <table>\r
355                                                   <tr>\r
356                                                     <td>Book</td>\r
357                                                     <td><font color=""blue"">ThisIsATest</font></td>\r
358                                                     <td></td>\r
359                                                     <td></td>\r
360                                                     <td>24.95</td>\r
361                                                   </tr>\r
362                                                 </table><hr>\r
363                                                 <h2>BookStore</h2><hr>\r
364                                                 <table>\r
365                                                   <tr>\r
366                                                     <td>Book</td>\r
367                                                     <td><font color=""blue"">The Handmaid's Tale</font></td>\r
368                                                     <td></td>\r
369                                                     <td></td>\r
370                                                     <td>29.95</td>\r
371                                                   </tr>\r
372                                                 </table><hr></div>";\r
373                         string result = new WebTest ("XMLDataSourceTest4.aspx").Run ();\r
374                         HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");\r
375                 }\r
376 \r
377                 //events test\r
378                 bool checker;\r
379 \r
380                 [Test]\r
381                 public void Events ()\r
382                 {\r
383                         DSPoker p = new DSPoker ();\r
384                         p.Transforming += new EventHandler (p_Transforming);\r
385                         Assert.AreEqual (false, checker, "BeforeTransformingEvent");\r
386                         p.DoOnTransforming (new EventArgs ());\r
387                         Assert.AreEqual (true, checker, "AfterTransformingEvent");\r
388                 }\r
389 \r
390                 void p_Transforming (object sender, EventArgs e)\r
391                 {\r
392                         checker = true;\r
393                 }\r
394 \r
395                 //TODO: This is implementation specific test - remove it.\r
396                 [Test]\r
397                 [Category ("NotWorking")]\r
398                 [ExpectedException (typeof (NullReferenceException))]\r
399                 public void GetXmlDocumentException ()\r
400                 {\r
401                         DSPoker p = new DSPoker ();\r
402                         p.GetXmlDocument ();\r
403                 }\r
404 \r
405                 [TestFixtureTearDown]\r
406                 public void TearDown ()\r
407                 {\r
408                         WebTest.Unload ();\r
409                 }\r
410         }       \r
411 }\r
412 \r
413 #endif\r