| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- //
- // System.Xml.XmlTextWriterTests
- //
- // Authors:
- // Atsushi Enomoto <[email protected]>
- // Martin Willemoes Hansen <[email protected]>
- //
- // (C) 2003 Atsushi Enomoto
- // (C) 2003 Martin Willemoes Hansen
- //
- //
- // This class mainly checks inheritance and behaviors of XmlWriter.
- //
- using System;
- using System.IO;
- using System.Text;
- using System.Xml;
- using System.Xml.XPath;
- using NUnit.Framework;
- using AssertType = NUnit.Framework.Assert;
- namespace MonoTests.System.Xml
- {
- [TestFixture]
- public class XmlWriterTests
- {
- StringWriter writer;
- XmlTextWriter xtw;
- [SetUp]
- public void SetUp ()
- {
- writer = new StringWriter ();
- xtw = new XmlTextWriter (writer);
- }
- [Test]
- public void WriteNodeFullDocument ()
- {
- string xml = "<?xml version='1.0'?><root />";
- XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
- xtw.WriteNode (xtr, false);
- Assert.AreEqual (xml, writer.ToString ());
- writer.GetStringBuilder ().Length = 0;
- // With encoding
- xml = "<?xml version='1.0' encoding='iso-2022-jp'?><root />";
- xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
- xtw.WriteNode (xtr, false);
- Assert.AreEqual (xml, writer.ToString ());
- xtr.Close ();
- }
- [Test]
- public void WriteNodeXmlDecl ()
- {
- string xml = "<?xml version='1.0'?><root />";
- StringReader sr = new StringReader (xml);
- XmlTextReader xtr = new XmlTextReader (sr);
- xtr.Read ();
- xtw.WriteNode (xtr, false);
- Assert.AreEqual ("<?xml version='1.0'?>",
- writer.ToString ());
- xtr.Close ();
- }
- [Test]
- public void WriteNodeEmptyElement ()
- {
- string xml = "<root attr='value' attr2='value' />";
- StringReader sr = new StringReader (xml);
- XmlTextReader xtr = new XmlTextReader (sr);
- xtw.WriteNode (xtr, false);
- Assert.AreEqual (xml.Replace ("'", "\""),
- writer.ToString ());
- xtr.Close ();
- }
- [Test]
- public void WriteNodeNonEmptyElement ()
- {
- string xml = @"<foo><bar></bar></foo>";
- xtw.WriteNode (new XmlTextReader (xml, XmlNodeType.Document, null), false);
- Assert.AreEqual (xml, writer.ToString ());
- }
- [Test]
- public void WriteNodeSingleContentElement ()
- {
- string xml = "<root attr='value' attr2='value'><foo /></root>";
- StringReader sr = new StringReader (xml);
- XmlTextReader xtr = new XmlTextReader (sr);
- xtw.WriteNode (xtr, false);
- Assert.AreEqual (xml.Replace ("'", "\""),
- writer.ToString ());
- xtr.Close ();
- }
- [Test]
- public void WriteNodeNone ()
- {
- XmlTextReader xtr = new XmlTextReader ("", XmlNodeType.Element, null);
- xtr.Read ();
- xtw.WriteNode (xtr, false); // does not report any errors
- xtr.Close ();
- }
- [Test]
- #if NET_2_0
- [Category ("NotDotNet")] // enbugged in 2.0
- #endif
- [ExpectedException (typeof (XmlException))]
- public void WriteNodeError ()
- {
- XmlTextReader xtr = new XmlTextReader ("<root>", XmlNodeType.Document, null);
- xtr.Read ();
- try {
- xtr.Read ();
- } catch {
- }
- XmlTextWriter xtw = new XmlTextWriter (new StringWriter ());
- xtw.WriteNode (xtr, false);
- }
- [Test]
- public void WriteSurrogateCharEntity ()
- {
- xtw.WriteSurrogateCharEntity ('\udfff', '\udb00');
- Assert.AreEqual ("󐏿", writer.ToString ());
- try {
- xtw.WriteSurrogateCharEntity ('\ud800', '\udc00');
- Assert.Fail ();
- } catch {
- }
- try {
- xtw.WriteSurrogateCharEntity ('\udbff', '\ud800');
- Assert.Fail ();
- } catch {
- }
- try {
- xtw.WriteSurrogateCharEntity ('\ue000', '\ud800');
- Assert.Fail ();
- } catch {
- }
- try {
- xtw.WriteSurrogateCharEntity ('\udfff', '\udc00');
- Assert.Fail ();
- } catch {
- }
- }
- // MS.NET's not-overriden XmlWriter.WriteStartElement(name)
- // invokes WriteStartElement(null, name, null).
- // WriteStartElement(name, ns) invokes (null, name, ns), too.
- [Test]
- public void StartElement ()
- {
- StartElementTestWriter xw = new StartElementTestWriter ();
- xw.WriteStartDocument ();
- xw.WriteStartElement ("test");
- Assert.IsNull (xw.NS, "StartElementOverride.NS");
- Assert.IsNull (xw.Prefix, "StartElementOverride.Prefix");
- xw.NS = String.Empty;
- xw.Prefix = String.Empty;
- xw.WriteStartElement ("test", "urn:hoge");
- Assert.AreEqual ("urn:hoge", xw.NS, "StartElementOverride.NS");
- Assert.IsNull (null, xw.Prefix, "StartElementOverride.Prefix");
- }
-
- class StartElementTestWriter : DefaultXmlWriter
- {
- public StartElementTestWriter () : base () {}
- public string NS = String.Empty;
- public string Prefix = String.Empty;
- public override void WriteStartElement (string prefix, string localName, string ns)
- {
- this.NS = ns;
- this.Prefix = prefix;
- }
- }
- [Test]
- public void WriteAttributes ()
- {
- string xml = "<root><test a='b' c='d' /><b /></root>";
- XmlTextReader xtr = new XmlTextReader (xml,
- XmlNodeType.Document, null);
- xtw.QuoteChar = '\'';
- xtr.Read ();
- xtw.WriteStartElement ("root"); // <root
- xtr.Read ();
- xtw.WriteStartElement ("test"); // ><test
- xtw.WriteAttributes (xtr, false); // a='b' c='d'
- Assert.AreEqual (XmlNodeType.Element, xtr.NodeType);
- xtw.WriteEndElement (); // />
- xtw.WriteStartElement ("b"); // <b
- xtw.WriteEndElement (); // />
- xtw.WriteEndElement (); // </root>
- xtw.Close ();
- Assert.AreEqual (xml, writer.ToString ());
- }
- #if NET_2_0
- XPathNavigator GetNavigator (string xml)
- {
- return new XPathDocument (XmlReader.Create (
- new StringReader (xml))).CreateNavigator ();
- }
- string WriteNavigator (XPathNavigator nav, bool defattr)
- {
- StringWriter sw = new StringWriter ();
- XmlWriterSettings settings = new XmlWriterSettings ();
- settings.OmitXmlDeclaration = true;
- settings.ConformanceLevel = ConformanceLevel.Fragment;
- using (XmlWriter w = XmlWriter.Create (sw, settings)) {
- w.WriteNode (nav, defattr);
- }
- return sw.ToString ();
- }
- [Test]
- public void WriteNodeNavigator1 ()
- {
- XPathNavigator nav = GetNavigator ("<root>test<!-- comment --></root>");
- // at Root
- AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteNavigator (nav, false), "#1");
- // at document element
- nav.MoveToFirstChild ();
- AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteNavigator (nav, false), "#2");
- // at text
- nav.MoveToFirstChild ();
- AssertType.AreEqual ("test", WriteNavigator (nav, false), "#3");
- // at comment
- nav.MoveToNext ();
- AssertType.AreEqual ("<!-- comment -->", WriteNavigator (nav, false), "#4");
- }
- string WriteSubtree (XPathNavigator nav)
- {
- StringWriter sw = new StringWriter ();
- XmlWriterSettings settings = new XmlWriterSettings ();
- settings.OmitXmlDeclaration = true;
- settings.ConformanceLevel = ConformanceLevel.Fragment;
- using (XmlWriter w = XmlWriter.Create (sw, settings)) {
- nav.WriteSubtree(w);
- }
- return sw.ToString ();
- }
- [Test]
- public void NavigatorWriteSubtree1 ()
- {
- XPathNavigator nav = GetNavigator ("<root>test<!-- comment --></root>");
- // at Root
- AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteSubtree (nav), "#1");
- // at document element
- nav.MoveToFirstChild ();
- AssertType.AreEqual ("<root>test<!-- comment --></root>", WriteSubtree (nav), "#2");
- // at text
- nav.MoveToFirstChild ();
- AssertType.AreEqual ("test", WriteSubtree (nav), "#3");
- // at comment
- nav.MoveToNext ();
- AssertType.AreEqual ("<!-- comment -->", WriteSubtree (nav), "#4");
- }
- #endif
- }
- internal class DefaultXmlWriter : XmlWriter
- {
- public DefaultXmlWriter () : base ()
- {
- }
- public override void Close ()
- {
- }
- public override void Flush ()
- {
- }
- public override string LookupPrefix (string ns)
- {
- return null;
- }
- public override void WriteBase64 (byte [] buffer, int index, int count)
- {
- }
- public override void WriteBinHex (byte [] buffer, int index, int count)
- {
- }
- public override void WriteCData (string text)
- {
- }
- public override void WriteCharEntity (char ch)
- {
- }
- public override void WriteChars (char [] buffer, int index, int count)
- {
- }
- public override void WriteComment (string text)
- {
- }
- public override void WriteDocType (string name, string pubid, string sysid, string subset)
- {
- }
- public override void WriteEndAttribute ()
- {
- }
- public override void WriteEndDocument ()
- {
- }
- public override void WriteEndElement ()
- {
- }
- public override void WriteEntityRef (string name)
- {
- }
- public override void WriteFullEndElement ()
- {
- }
- public override void WriteName (string name)
- {
- }
- public override void WriteNmToken (string name)
- {
- }
- public override void WriteNode (XmlReader reader, bool defattr)
- {
- }
- public override void WriteProcessingInstruction (string name, string text)
- {
- }
- public override void WriteQualifiedName (string localName, string ns)
- {
- }
- public override void WriteRaw (string data)
- {
- }
- public override void WriteRaw (char [] buffer, int index, int count)
- {
- }
- public override void WriteStartAttribute (string prefix, string localName, string ns)
- {
- }
- public override void WriteStartDocument (bool standalone)
- {
- }
- public override void WriteStartDocument ()
- {
- }
- public override void WriteStartElement (string prefix, string localName, string ns)
- {
- }
- public override void WriteString (string text)
- {
- }
- public override void WriteSurrogateCharEntity (char lowChar, char highChar)
- {
- }
- public override void WriteWhitespace (string ws)
- {
- }
- public override WriteState WriteState {
- get {
- return WriteState.Start;
- }
- }
- public override string XmlLang {
- get {
- return null;
- }
- }
- public override XmlSpace XmlSpace {
- get {
- return XmlSpace.None;
- }
- }
- }
- }
|