2 // Tests for System.Web.UI.WebControls.XmlDataSource.cs
\r
5 // Chris Toshok (toshok@novell.com)
\r
6 // Yoni Klain (yonik@mainsoft.com)
\r
10 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
\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
20 // The above copyright notice and this permission notice shall be
\r
21 // included in all copies or substantial portions of the Software.
\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
37 using System.Collections;
\r
38 using System.Collections.Specialized;
\r
40 using System.Globalization;
\r
42 using System.Web.UI;
\r
43 using System.Web.UI.WebControls;
\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
51 namespace MonoTests.System.Web.UI.WebControls
\r
53 class DSPoker : XmlDataSource
\r
59 public object SaveState () {
\r
60 return SaveViewState ();
\r
62 public void LoadState (object o) {
\r
66 public HierarchicalDataSourceView DoGetHierarchicalView(string viewPath)
\r
68 return base.GetHierarchicalView(viewPath);
\r
71 public void DoOnTransforming (EventArgs e)
\r
73 base.OnTransforming (e);
\r
76 public void DoOnDataSourceChanged ()
\r
78 base.OnDataSourceChanged (new EventArgs ());
\r
83 public class XmlDataSourceTest
\r
85 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
88 public void CopyTestResources ()
\r
91 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xml", "XMLDataSourceTest.xml");
\r
92 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");
\r
93 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");
\r
94 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");
\r
95 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");
\r
96 WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");
\r
98 WebTest.CopyResource (GetType (), "XMLDataSourceTest.xml", "XMLDataSourceTest.xml");
\r
99 WebTest.CopyResource (GetType (), "XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");
\r
100 WebTest.CopyResource (GetType (), "XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");
\r
101 WebTest.CopyResource (GetType (), "XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");
\r
102 WebTest.CopyResource (GetType (), "XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");
\r
103 WebTest.CopyResource (GetType (), "XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");
\r
108 public void Defaults ()
\r
110 DSPoker p = new DSPoker ();
\r
112 Assert.AreEqual ("", p.Data, "A4");
\r
113 Assert.AreEqual ("", p.DataFile, "A5");
\r
114 Assert.AreEqual ("", p.Transform, "A9");
\r
115 Assert.AreEqual ("", p.TransformFile, "A10");
\r
116 Assert.AreEqual ("", p.XPath, "A11");
\r
119 Assert.AreEqual (null, p.TransformArgumentList, "A17");
\r
123 public void Defaults_NotWorking ()
\r
125 DSPoker p = new DSPoker ();
\r
126 Assert.AreEqual (0, p.CacheDuration, "A12");
\r
127 Assert.AreEqual (DataSourceCacheExpiry.Absolute, p.CacheExpirationPolicy, "A13");
\r
128 Assert.AreEqual ("", p.CacheKeyDependency, "A14");
\r
129 Assert.AreEqual (true, p.EnableCaching, "A15");
\r
133 public void Attributes ()
\r
135 DSPoker p = new DSPoker ();
\r
138 Assert.AreEqual (data, p.Data, "A1");
\r
140 p.Transform = "transform";
\r
141 Assert.AreEqual ("transform", p.Transform, "A2");
\r
144 Assert.AreEqual ("xpath", p.XPath, "A3");
\r
148 public void ViewState ()
\r
150 // XXX weird... something odd going on with
\r
151 // ViewState? or are none of these stored?
\r
152 DSPoker p = new DSPoker ();
\r
155 p.Transform = "transform";
\r
158 object state = p.SaveState ();
\r
159 DSPoker copy = new DSPoker ();
\r
160 copy.LoadState (state);
\r
161 Assert.AreEqual ("", copy.Data, "A1");
\r
162 Assert.AreEqual ("", copy.Transform, "A2");
\r
163 Assert.AreEqual ("", copy.XPath, "A3");
\r
165 p = new DSPoker ();
\r
166 p.DataFile = "DataFile";
\r
167 p.TransformFile = "TransformFile";
\r
169 state = p.SaveState ();
\r
170 copy = new DSPoker ();
\r
172 copy.LoadState (state);
\r
173 Assert.AreEqual ("", copy.DataFile, "A1");
\r
174 Assert.AreEqual ("", copy.TransformFile, "A2");
\r
177 #region help_results
\r
180 private static int _testcounter;
\r
181 private static bool _eventChecker;
\r
182 private eventAssert ()
\r
187 public static bool eventChecker
\r
191 throw new NotImplementedException ();
\r
195 _eventChecker = value;
\r
199 static private void testAdded ()
\r
202 _eventChecker = false;
\r
205 public static void IsTrue (string msg)
\r
207 Assert.IsTrue (_eventChecker, msg + "#" + _testcounter);
\r
212 public static void IsFalse (string msg)
\r
214 Assert.IsFalse (_eventChecker, msg + "#" + _testcounter);
\r
221 public void XmlDataSource_DataSourceViewChanged ()
\r
223 DSPoker p = new DSPoker ();
\r
224 ((IDataSource) p).DataSourceChanged += new EventHandler (XmlDataSourceTest_DataSourceChanged);
\r
225 p.DoOnDataSourceChanged ();
\r
226 eventAssert.IsTrue ("XmlDataSource"); // Assert include counter the first is zero
\r
229 eventAssert.IsTrue ("XmlDataSource");
\r
230 p.Transform = "transform";
\r
231 eventAssert.IsTrue ("XmlDataSource");
\r
233 eventAssert.IsTrue ("XmlDataSource");
\r
234 p.DataFile = "DataFile";
\r
235 eventAssert.IsTrue ("XmlDataSource");
\r
236 p.TransformFile = "TransformFile";
\r
237 eventAssert.IsTrue ("XmlDataSource");
\r
240 void XmlDataSourceTest_DataSourceChanged (object sender, EventArgs e)
\r
242 eventAssert.eventChecker = true;
\r
247 [Category ("NunitWeb")]
\r
248 public void DataFile ()
\r
250 new WebTest (PageInvoker.CreateOnLoad (datafile)).Run ();
\r
253 public static void datafile (Page p)
\r
255 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
256 </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
258 XmlDataSource ds = new XmlDataSource ();
\r
259 p.Form.Controls.Add (ds);
\r
260 ds.DataFile = "~/XMLDataSourceTest.xml";
\r
262 string derivedxml = ((XmlDocument) ds.GetXmlDocument ()).InnerXml;
\r
263 HtmlDiff.AssertAreEqual (originalxml, derivedxml, "Loading xml");
\r
267 public void GetXmlDocument ()
\r
269 DSPoker p = new DSPoker ();
\r
271 XmlDocument doc = p.GetXmlDocument ();
\r
272 HtmlDiff.AssertAreEqual (data, doc.InnerXml, "GetXmlDocument");
\r
276 [Category ("NunitWeb")]
\r
277 public void XPath ()
\r
279 Page page = new Page ();
\r
280 XmlDataSource ds = new XmlDataSource ();
\r
282 ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>
\r
283 <bookstore xmlns:bk=""urn:samples"">
\r
284 <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">
\r
285 <title>Pride and Prejudice</title>
\r
287 <first-name>Jane</first-name>
\r
288 <last-name>Austen</last-name>
\r
290 <price>24.95</price>""
\r
292 <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">
\r
293 <title>The Handmaid's Tale</title>
\r
295 <first-name>Margaret</first-name>
\r
296 <last-name>Atwood</last-name>
\r
298 <price>29.95</price>
\r
301 DataList list0 = new DataList ();
\r
302 DataList list1 = new DataList ();
\r
303 DataList list2 = new DataList ();
\r
304 page.Controls.Add (list0);
\r
305 page.Controls.Add (list1);
\r
306 page.Controls.Add (list2);
\r
307 page.Controls.Add (ds);
\r
308 list0.DataSourceID = "ds";
\r
310 Assert.AreEqual (2, list0.Items.Count, "Before XPath elements");
\r
312 ds.XPath = "/bookstore/book [title='Pride and Prejudice']";
\r
313 list1.DataSourceID = "ds";
\r
315 Assert.AreEqual (1, list1.Items.Count, "After XPath elements");
\r
317 ds.XPath = "bookstore/book [@genre='novel']";
\r
318 list2.DataSourceID = "ds";
\r
320 Assert.AreEqual (2, list2.Items.Count, "After XPath property");
\r
324 public void GetHierarchicalView ()
\r
326 Page page = new Page ();
\r
327 DSPoker ds = new DSPoker ();
\r
329 ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>
\r
330 <bookstore xmlns:bk=""urn:samples"">
\r
331 <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">
\r
332 <title>Pride and Prejudice</title>
\r
334 <first-name>Jane</first-name>
\r
335 <last-name>Austen</last-name>
\r
337 <price>24.95</price>
\r
339 <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">
\r
340 <title>The Handmaid's Tale</title>
\r
342 <first-name>Margaret</first-name>
\r
343 <last-name>Atwood</last-name>
\r
345 <price>29.95</price>
\r
348 HierarchicalDataSourceView view = ds.DoGetHierarchicalView ("");
\r
349 IHierarchicalEnumerable num = view.Select ();
\r
350 foreach (object obj in num) {
\r
351 IHierarchyData hdata = num.GetHierarchyData (obj);
\r
352 XmlElement element = (XmlElement) hdata.Item;
\r
353 Assert.AreEqual ("bookstore", element.Name, "RootElementName");
\r
354 Assert.AreEqual ("Pride and PrejudiceJaneAusten24.95The Handmaid's TaleMargaretAtwood29.95", element.InnerText, "InnerText");
\r
355 Assert.AreEqual (2, element.ChildNodes.Count, "ChildElementNodes");
\r
360 [Category ("NunitWeb")]
\r
361 public void Transform ()
\r
363 string origin = @"<div>
\r
368 <td><font color=""blue"">12345</font></td>
\r
374 string result = new WebTest ("XMLDataSourceTest1.aspx").Run();
\r
375 HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml(result) , "TransformFail");
\r
379 [Category ("NunitWeb")]
\r
380 public void TransformFile ()
\r
382 string origin = @"<div><h2>Order</h2>
\r
387 <td><font color=""blue"">12345</font></td>
\r
394 string result = new WebTest ("XMLDataSourceTest2.aspx").Run ();
\r
395 HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformFileFail");
\r
399 [Category ("NunitWeb")]
\r
400 public void TransformArgumentList ()
\r
402 string origin = @"<div>
\r
408 <td><font color=""blue"">12345purchased by: Mainsoft developers</font></td>
\r
415 string result = new WebTest ("XMLDataSourceTest3.aspx").Run ();
\r
416 HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");
\r
420 [Category ("NunitWeb")]
\r
422 [Category ("NotWorking")] // File watcher is not supported
\r
424 public void Save ()
\r
426 string origin = @"<div>
\r
427 <h2>BookStore</h2><hr>
\r
431 <td><font color=""blue"">ThisIsATest</font></td>
\r
437 <h2>BookStore</h2><hr>
\r
441 <td><font color=""blue"">The Handmaid's Tale</font></td>
\r
446 </table><hr></div>";
\r
447 string result = new WebTest ("XMLDataSourceTest4.aspx").Run ();
\r
448 HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");
\r
455 public void Events ()
\r
457 DSPoker p = new DSPoker ();
\r
458 p.Transforming += new EventHandler (p_Transforming);
\r
459 Assert.AreEqual (false, checker, "BeforeTransformingEvent");
\r
460 p.DoOnTransforming (new EventArgs ());
\r
461 Assert.AreEqual (true, checker, "AfterTransformingEvent");
\r
464 void p_Transforming (object sender, EventArgs e)
\r
469 //TODO: This is implementation specific test - remove it.
\r
471 [Category ("NotWorking")]
\r
472 [ExpectedException (typeof (NullReferenceException))]
\r
473 public void GetXmlDocumentException ()
\r
475 DSPoker p = new DSPoker ();
\r
476 p.GetXmlDocument ();
\r
479 [TestFixtureTearDown]
\r
480 public void TearDown ()
\r