Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

432 lines
11 KiB
C#

//
// Tests for System.Web.UI.WebControls.Xml.cs
//
// Author:
// Miguel de Icaza (miguel@novell.com)
//
//
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using NUnit.Framework;
using System;
using System.IO;
using System.Globalization;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
namespace MonoTests.System.Web.UI.WebControls
{
class XmlPoker : Xml {
public XmlPoker ()
{
}
public object SaveState ()
{
return SaveViewState ();
}
public void LoadState (object o)
{
LoadViewState (o);
}
public void DoRender (HtmlTextWriter output)
{
Render (output);
}
public void DoAdd (object o)
{
AddParsedSubObject (o);
}
}
[TestFixture]
public class XmlTest {
#if false
public void Label_ViewState ()
{
XmlPoker p = new XmlPoker ();
Assert.AreEqual (p.Text, "", "A1");
p.Text = "Hello";
Assert.AreEqual (p.Text, "Hello", "A2");
object state = p.SaveState ();
Poker copy = new Poker ();
copy.LoadState (state);
Assert.AreEqual (copy.Text, "Hello", "A3");
}
[Test]
public void Label_Render ()
{
StringWriter sw = new StringWriter ();
HtmlTextWriter tw = new HtmlTextWriter (sw);
Label l = new Label ();
l.Text = "Hello";
l.RenderControl (tw);
Assert.AreEqual ("<span>Hello</span>", sw.ToString (), "R1");
}
#endif
[SetUp] public void Xml_Setup ()
{
if (File.Exists ("test.xml")) File.Delete ("test.xml");
using (FileStream f = File.OpenWrite ("test.xml")){
StreamWriter sw = new StreamWriter (f);
sw.WriteLine ("<?xml version=\"1.0\"?><testfile></testfile>");
}
if (File.Exists ("test.xsl")) File.Delete ("test.xsl");
using (FileStream f = File.OpenWrite ("test.xsl")){
StreamWriter sw = new StreamWriter (f);
sw.WriteLine ("<xsl:stylesheet version='1.0' " +
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" +
"<xsl:template match=\"*\">" +
"<xsl:copy-of select=\".\"/>" +
"</xsl:template>" +
"</xsl:stylesheet>");
}
}
[TearDown] public void Xml_TearDown ()
{
if (File.Exists ("test.xml")) File.Delete ("test.xml");
if (File.Exists ("test.xsl")) File.Delete ("test.xsl");
}
[Test] public void Xml_Values ()
{
Xml xml = new Xml ();
Assert.AreEqual ("", xml.DocumentContent, "V1");
Assert.AreEqual (null, xml.Document, "V2");
Assert.AreEqual ("", xml.DocumentSource, "V3");
Assert.AreEqual (null, xml.Transform, "V4");
Assert.AreEqual (null, xml.TransformArgumentList, "V5");
Assert.AreEqual ("", xml.TransformSource, "V6");
// Check that assignments to null, are mapped back into ""
xml.DocumentContent = null;
Assert.AreEqual ("", xml.DocumentContent, "V7");
xml.TransformSource = null;
Assert.AreEqual ("", xml.TransformSource, "V8");
Assert.AreEqual (null, xml.Transform, "V9");
Assert.AreEqual (false, xml.EnableTheming, "EnableTheming");
Assert.AreEqual (String.Empty, xml.SkinID, "SkinID");
Assert.AreEqual (null, xml.XPathNavigator, "XPathNavigator");
}
// Tests that invalid documents can be set before rendering.
[Test]
public void Xml_InvalidDocument ()
{
Xml xml = new Xml ();
xml.DocumentContent = "Hey";
Assert.AreEqual ("Hey", xml.DocumentContent);
xml.DocumentContent = "<hey></hey>";
Assert.AreEqual ("<hey></hey>", xml.DocumentContent);
xml.TransformSource = "test.xsl";
Assert.AreEqual (null, xml.Transform, "ID");
}
[Test] public void Xml_RenderEmpty ()
{
XmlPoker xml = new XmlPoker ();
StringWriter sw = new StringWriter ();
HtmlTextWriter hw = new HtmlTextWriter (sw);
xml.DoRender (hw);
Assert.AreEqual ("", sw.ToString (), "RE1");
}
[Test] public void Xml_SourcePrecedence ()
{
XmlPoker xml = new XmlPoker ();
xml.DocumentContent = "<content></content>";
XmlDocument xml_doc = new XmlDocument ();
xml_doc.LoadXml ("<document></document>");
xml.Document = xml_doc;
//
// Can not check the precendece for the file backend
// because it requires a complete setup to check for the
// file access permission to it (Control.MapPathSecure)
//
// xml.DocumentSource = "test.xml";
//
StringWriter sw = new StringWriter ();
HtmlTextWriter hw = new HtmlTextWriter (sw);
xml.DoRender (hw);
Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><document></document>",
sw.ToString (), "SP1");
// Now compare the inline XML
xml.DocumentContent = "<content></content>";
sw = new StringWriter ();
hw = new HtmlTextWriter (sw);
xml.DoRender (hw);
Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><content></content>",
sw.ToString (), "SP1");
}
[Test]
public void Xml_SourcePrecedence_2 ()
{
XmlPoker xml = new XmlPoker ();
XmlDocument xml_doc = new XmlDocument ();
xml_doc.LoadXml ("<document></document>");
xml.Document = xml_doc;
XmlDocument xml_navigator_doc = new XmlDocument ();
xml_navigator_doc.LoadXml ("<navigator></navigator>");
xml.XPathNavigator = xml_navigator_doc.CreateNavigator ();
StringWriter sw = new StringWriter ();
HtmlTextWriter hw = new HtmlTextWriter (sw);
xml.DoRender (hw);
Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><navigator></navigator>",
sw.ToString (), "Xml_SourcePrecedence_2");
}
[Test] public void Xml_DefaultTrasnform ()
{
XmlPoker xml = new XmlPoker ();
// For the actual transform, I was lazy, but
// xsp's web_xml.aspx works.
}
[ExpectedException(typeof (HttpException))]
[Test] public void Xml_InsertInvalid ()
{
XmlPoker xml = new XmlPoker ();
xml.DoAdd ("hello");
}
[ExpectedException(typeof (NullReferenceException))]
[Test] public void Xml_InsertInvalid2 ()
{
XmlPoker xml = new XmlPoker ();
xml.DoAdd (null);
}
[Test] public void Xml_InsertValid ()
{
XmlPoker xml = new XmlPoker ();
xml.DoAdd (new LiteralControl ("<test></test>"));
}
class CustomXPathNavigator : XPathNavigator
{
public override string BaseURI
{
get { return "Test"; }
}
#region fake
public override XPathNavigator Clone ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool IsEmptyElement
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override bool IsSamePosition (XPathNavigator other)
{
throw new Exception ("The method or operation is not implemented.");
}
public override string LocalName
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override bool MoveTo (XPathNavigator other)
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToFirstAttribute ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToFirstChild ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToFirstNamespace (XPathNamespaceScope namespaceScope)
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToId (string id)
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToNext ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToNextAttribute ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToNextNamespace (XPathNamespaceScope namespaceScope)
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToParent ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override bool MoveToPrevious ()
{
throw new Exception ("The method or operation is not implemented.");
}
public override string Name
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override XmlNameTable NameTable
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override string NamespaceURI
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override XPathNodeType NodeType
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override string Prefix
{
get { throw new Exception ("The method or operation is not implemented."); }
}
public override string Value
{
get { throw new Exception ("The method or operation is not implemented."); }
}
#endregion
}
[Test]
public void XPathNavigable_1 ()
{
Xml xml = new Xml ();
XmlDocument doc = new XmlDocument ();
xml.XPathNavigator = doc.CreateNavigator ();
Assert.IsNotNull (xml.XPathNavigator);
}
[Test]
public void XPathNavigable_2 ()
{
Xml xml = new Xml ();
xml.XPathNavigator = new CustomXPathNavigator();
Assert.AreEqual ("Test", xml.XPathNavigator.BaseURI, "XPathNavigable_2");
}
[Test]
public void XPathNavigatorInstance_1 ()
{
Xml xml = new Xml ();
XmlDocument doc = new XmlDocument ();
doc.LoadXml ("<document></document>");
xml.Document = doc;
XPathNavigator nav1 = xml.XPathNavigator;
Assert.IsNull (nav1, "XPathNavigatorInstance_1");
}
[Test]
[ExpectedException (typeof (NotSupportedException))]
public void Focus ()
{
Xml xml = new Xml ();
xml.Focus ();
}
[Test]
[ExpectedException (typeof (NotSupportedException))]
public void SkinID ()
{
Xml xml = new Xml ();
xml.SkinID = "Fake";
}
}
}