| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878 |
- //
- // System.Xml.Xsl.XslTransformTests.cs
- //
- // Author:
- // Atsushi Enomoto <[email protected]>
- //
- // (C) 2002 Atsushi Enomoto
- //
- using System;
- using System.Globalization;
- using System.IO;
- using System.Text;
- using System.Xml;
- using System.Xml.XPath;
- using System.Xml.Xsl;
- using NUnit.Framework;
- namespace MonoTests.System.Xml.Xsl
- {
- [TestFixture]
- public class XslTransformTests
- {
- XmlDocument doc;
- XslTransform xslt;
- XmlDocument result;
- [SetUp]
- public void GetReady()
- {
- doc = new XmlDocument ();
- xslt = new XslTransform ();
- result = new XmlDocument ();
- }
- [Test]
- public void TestBasicTransform ()
- {
- doc.LoadXml ("<root/>");
- xslt.Load ("Test/XmlFiles/xsl/empty.xsl");
- xslt.Transform ("Test/XmlFiles/xsl/empty.xsl", "Test/XmlFiles/xsl/result.xml");
- result.Load ("Test/XmlFiles/xsl/result.xml");
- Assert.AreEqual (2, result.ChildNodes.Count, "count");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void InvalidStylesheet ()
- {
- XmlDocument doc = new XmlDocument ();
- doc.LoadXml ("<xsl:element xmlns:xsl='http://www.w3.org/1999/XSL/Transform' />");
- XslTransform t = new XslTransform ();
- t.Load (doc);
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void EmptyStylesheet ()
- {
- XmlDocument doc = new XmlDocument ();
- XslTransform t = new XslTransform ();
- t.Load (doc);
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void InvalidStylesheet2 ()
- {
- string xsl = @"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
- <xsl:template match='/root'>
- <xsl:call-template name='foo'>
- <xsl:with-param name='name' value='text()' />
- </xsl:call-template>
- </xsl:template>
- <xsl:template name='foo'>
- <xsl:param name='name' />
- <result>
- <xsl:if test='1'>
- <xsl:variable name='last' value='text()' />
- <xsl:value-of select='$last' />
- </xsl:if>
- </result>
- </xsl:template>
- </xsl:stylesheet>
- ";
- XslTransform xslt = new XslTransform ();
- xslt.Load (new XPathDocument (new XmlTextReader (xsl, XmlNodeType.Document, null)));
- }
- [Test()]
- [Category ("NotWorking")] // it depends on "mcs" existence
- public void MsxslTest() {
- string _styleSheet = @"
- <xslt:stylesheet xmlns:xslt=""http://www.w3.org/1999/XSL/Transform"" version=""1.0""
- xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" xmlns:stringutils=""urn:schemas-sourceforge.net-blah"">
- <xslt:output method=""text"" />
- <msxsl:script language=""C#"" implements-prefix=""stringutils"">
- <![CDATA[
- string PadRight( string str, int padding) {
- return str.PadRight(padding);
- }
- ]]>
- </msxsl:script>
- <xslt:template match=""test"">
- <xslt:value-of select=""stringutils:PadRight(@name, 20)"" />
- </xslt:template>
- </xslt:stylesheet>";
- StringReader stringReader = new StringReader(_styleSheet);
-
- XslTransform transform = new XslTransform();
- XmlTextReader reader = new XmlTextReader(stringReader);
- transform.Load(reader, new XmlUrlResolver(), AppDomain.CurrentDomain.Evidence);
- StringBuilder sb = new StringBuilder();
- StringWriter writer = new StringWriter(sb, CultureInfo.InvariantCulture);
- XsltArgumentList arguments = new XsltArgumentList();
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.LoadXml("<test name=\"test\" />");
- // Do transformation
- transform.Transform(xmlDoc, new XsltArgumentList(), writer, new XmlUrlResolver());
- Assert.AreEqual ("test".PadRight(20), sb.ToString());
- }
- [Test]
- public void MSXslNodeSet ()
- {
- string xsl = @"<xsl:stylesheet version='1.0'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
- <xsl:template match='/'>
- <root>
- <xsl:variable name='var'>
- <xsl:copy-of select='root/foo' />
- </xsl:variable>
- <xsl:for-each select='msxsl:node-set($var)/foo'>
- <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
- </xsl:for-each>
- </root>
- </xsl:template>
- </xsl:stylesheet>";
- StringWriter sw = new StringWriter ();
- XslTransform t = new XslTransform ();
- t.Load (new XPathDocument (new StringReader (xsl)));
- t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
- Assert.AreEqual (@"<?xml version=""1.0"" encoding=""utf-16""?><root xmlns:msxsl=""urn:schemas-microsoft-com:xslt"">foo: Afoo: Bfoo: C</root>", sw.ToString ());
- }
- [Test]
- [Category ("NotDotNet")]
- // Actually MS.NET here throws XsltException, but Mono returns
- // XPathException (since XPath evaluation engine generally
- // catches (should catch) static error. It is implementation
- // dependent matter.
- [ExpectedException (typeof (XPathException))]
- public void MSXslNodeSetRejectsNodeSet ()
- {
- string xsl = @"<xsl:stylesheet version='1.0'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
- <xsl:template match='/'>
- <root>
- <!-- msxsl:node-set() does not accept a node set -->
- <xsl:for-each select='msxsl:node-set(root/foo)'>
- <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
- </xsl:for-each>
- </root>
- </xsl:template>
- </xsl:stylesheet>";
- StringWriter sw = new StringWriter ();
- XslTransform t = new XslTransform ();
- t.Load (new XPathDocument (new StringReader (xsl)));
- t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
- }
- [Test]
- public void EvaluateEmptyVariableAsBoolean ()
- {
- string xsl = @"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
- <xsl:template match='/'>
- <xsl:variable name='var'><empty /></xsl:variable>
- <root><xsl:if test='$var'>true</xsl:if></root>
- </xsl:template>
- </xsl:stylesheet>";
- XslTransform t = new XslTransform ();
- t.Load (new XPathDocument (new StringReader (xsl)));
- StringWriter sw = new StringWriter ();
- t.Transform (
- new XPathDocument (new StringReader ("<root/>")),
- null,
- sw);
- Assert.IsTrue (sw.ToString ().IndexOf ("true") > 0);
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void NotAllowedPatternAxis ()
- {
- string xsl = @"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
- <xsl:template match='/descendant-or-self::node()/elem'>
- <ERROR/>
- </xsl:template>
- </xsl:stylesheet>";
- new XslTransform ().Load (new XPathDocument (
- new StringReader (xsl)));
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void ImportIncorrectlyLocated ()
- {
- string xsl = @"<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
- <xsl:template match='/'></xsl:template>
- <xsl:import href='dummy.xsl' />
- </xsl:transform>";
- new XslTransform ().Load (new XPathDocument (
- new StringReader (xsl)));
- }
- private WeakReference StylesheetLoad (XslTransform t, string xsl)
- {
- XPathDocument doc = new XPathDocument (
- new StringReader (xsl));
- WeakReference wr = new WeakReference (doc);
- t.Load (doc);
- return wr;
- }
- private WeakReference StylesheetTransform (XslTransform t, string xml)
- {
- XPathDocument doc = new XPathDocument (
- new StringReader (xml));
- WeakReference wr = new WeakReference (doc);
- t.Transform (doc, null, TextWriter.Null, null);
- return wr;
- }
- [Test]
- // bug #75663.
- public void ErrorOnDocumentResolution ()
- {
- // XslTransform recovers from errors on document resolution.
- string xslText = @"<xsl:stylesheet
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
- version='1.0'>
- <xsl:variable name='n'
- select='document(""notexist.xml"")' />
- <xsl:template match='/'>xx</xsl:template>
- </xsl:stylesheet>";
- string xmlText = @"<root />";
- XslTransform transform = new XslTransform ();
- XPathDocument doc = new XPathDocument (
- new XmlTextReader ("a.xsl", new StringReader (xslText)));
- transform.Load (doc);
- XPathDocument xmlDocument = new XPathDocument (new StringReader (xmlText));
- StringWriter sw = new StringWriter ();
- transform.Transform (xmlDocument, null, sw);
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "xx", sw.ToString ());
- }
- // bug #76046
- [Test]
- public void LoadStyleFromNonRoot ()
- {
- XmlDocument doc = new XmlDocument ();
- XslTransform xslt = new XslTransform ();
- doc.LoadXml ("<root><dummy /><xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' /></root>");
- XmlNode node = doc.ChildNodes [0].ChildNodes [1];
- xslt.Load (node, null, null);
- }
- [Test]
- public void ReturnEmptyResultsAsXmlReader ()
- {
- // bug #76115
- XmlDocument doc = new XmlDocument ();
- doc.LoadXml ("<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' />");
- XslTransform xslt = new XslTransform ();
- xslt.Load (doc, null, null);
- XmlReader reader = xslt.Transform(doc, null, new XmlUrlResolver ());
- reader.Read ();
- // another case - with xsl:output standalone='yes'
- doc.LoadXml ("<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0' ><xsl:output standalone='yes' indent='no'/><xsl:template match='/'><foo/></xsl:template></xsl:transform>");
- xslt = new XslTransform ();
- xslt.Load (doc, null, null);
- reader = xslt.Transform (doc, null, new XmlUrlResolver ());
- while (!reader.EOF)
- reader.Read (); // btw no XMLdecl output.
- }
- [Test] // bug #76530
- // http://www.w3.org/TR/xslt#section-Creating-Elements-with-xsl:element
- // "If the namespace attribute is not present then the QName
- // is expanded into an expanded-name using the namespace
- // declarations in effect for the xsl:element element,
- // including any default namespace declaration."
- public void LREDefaultNamespace ()
- {
- string xsl = @"<xsl:stylesheet version='1.0' xmlns='urn:foo' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
- <xsl:template match='/*'>
- <xsl:element name='{local-name()}' />
- </xsl:template>
- </xsl:stylesheet>";
- string xml = "<root/>";
- XslTransform t = new XslTransform ();
- t.Load (new XPathDocument (new StringReader (xsl)));
- StringWriter sw = new StringWriter ();
- XmlTextWriter xw = new XmlTextWriter (sw);
- t.Transform (
- new XPathDocument (new StringReader (xml)),
- null, xw);
- Assert.AreEqual ("<root xmlns=\"urn:foo\" />",
- sw.ToString ());
- string xsl2 = @"<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns='urn:foo'>
- <xsl:template match='/*'>
- <root>
- <xsl:element name='{local-name()}' />
- </root>
- </xsl:template>
- </xsl:stylesheet>";
- string xml2 = "<page/>";
- t.Load (new XPathDocument (new StringReader (xsl2)));
- sw = new StringWriter ();
- xw = new XmlTextWriter (sw);
- t.Transform (
- new XPathDocument (new StringReader (xml2)),
- null, xw);
- Assert.AreEqual ("<root xmlns=\"urn:foo\"><page /></root>",
- sw.ToString ());
- }
- [Test]
- // http://lists.ximian.com/pipermail/mono-devel-list/2005-November/015812.html
- public void WhitespaceHandling ()
- {
- string ref_out = @"XML
- Extensible Markup language
- Great stuffs
- XSLT
- Extensible Markup language
- Great stuffs
- XPATH
- Extensible Markup language
- Great stuffs
- XSD
- Extensible Markup language
- Great stuffs
- ";
- XmlDocument d = new XmlDocument ();
- d.Load ("Test/XmlFiles/xsl/91834.xml");
- XslTransform t = new XslTransform ();
- t.Load ("Test/XmlFiles/xsl/91834.xsl");
- StringWriter sw_raw = new StringWriter ();
- t.Transform (d, null, sw_raw);
- Assert.AreEqual (ref_out, sw_raw.ToString ().Replace ("\r\n", "\n"));
- }
- // http://support.microsoft.com/default.aspx?scid=kb;en-us;829014
- [Test]
- public void EmptyNodeSetSort ()
- {
- string xmlFragment = @"<?xml version=""1.0"" encoding=""utf-8""?>
- <EMPLOYEES>
- <EMPLOYEE>
- <NAME>Steve</NAME>
- <DEPT>IT</DEPT>
- <SKILL>C++</SKILL>
- <SKILL>C#</SKILL>
- </EMPLOYEE>
- <EMPLOYEE>
- <NAME>John</NAME>
- <DEPT>IT</DEPT>
- <SKILL>VB.NET</SKILL>
- <SKILL>SQl Server</SKILL>
- </EMPLOYEE>
- </EMPLOYEES>";
- string xsltFragment = @"<?xml version=""1.0""?>
- <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
- <xsl:output omit-xml-declaration=""yes"" />
- <xsl:preserve-space elements=""*"" />
- <xsl:template match=""/EMPLOYEES"">
- <xsl:for-each select=""EMPLOYEE[DEPT='Finance']"">
- <xsl:sort select=""NAME""/>
- <xsl:value-of select=""NAME""/>
- </xsl:for-each>
- </xsl:template>
- </xsl:stylesheet>";
- XmlTextReader xmlRdr = new XmlTextReader (new StringReader (xmlFragment));
- XmlTextReader xsltRdr = new XmlTextReader (new StringReader (xsltFragment));
- XslTransform stylesheet = new XslTransform ();
- stylesheet.Load (xsltRdr, new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- StringWriter sw = new StringWriter ();
- stylesheet.Transform (new XPathDocument (xmlRdr), new XsltArgumentList (),
- sw, new XmlUrlResolver ());
- Assert.AreEqual (0, sw.ToString ().Length);
- }
- // http://support.microsoft.com/default.aspx?scid=kb;en-us;834667
- [Test]
- #if NET_1_1
- [Category ("NotDotNet")]
- #endif
- public void LocalParameter ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:param name=""param1"" select=""'global-param1-default'"" />
- <xsl:param name=""param2"" select=""'global-param2-default'"" />
- <xsl:output method=""text"" encoding=""ascii"" />
- <xsl:template match=""/"">
- <xsl:call-template name=""Test"">
- <xsl:with-param name=""param1"" select=""'local-param1-arg'"" />
- <xsl:with-param name=""param2"" select=""'local-param2-arg'"" />
- </xsl:call-template>
- </xsl:template>
- <xsl:template name=""Test"">
- <xsl:param name=""param1"" select=""'local-param1-default'"" />
- <xsl:param name=""param2"" select=""'local-param2-default'"" />
- <xsl:value-of select=""$param1"" /><xsl:text>/</xsl:text><xsl:value-of select=""$param2"" />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- StringWriter sw = new StringWriter ();
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- xsltArgs.AddParam ("param1", string.Empty, "global-param1-arg");
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual ("local-param1-arg/local-param2-arg", sw.ToString ());
- }
- [Test]
- public void Output_Standalone ()
- {
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output {0} />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format(xsltFragment, "standalone=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"" +
- " standalone=\"yes\"?><root />", sw.ToString (), "#1");
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "standalone=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"" +
- " standalone=\"no\"?><root />", sw.ToString (), "#2");
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#3");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_Standalone_Invalid ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output standalone=""Yes"" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- public void Output_Standalone_ForwardsCompatible ()
- {
- StringWriter sw = new StringWriter ();
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.5"">
- <xsl:output standalone=""{0}"" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- // standalone is "Yes"
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "Yes"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // standalone is empty
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_Standalone_Empty ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output standalone="""" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- public void Output_OmitXmlDeclaration ()
- {
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output {0} />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "omit-xml-declaration=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual ("<root />", sw.ToString (), "#1");
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "omit-xml-declaration=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_OmitXmlDeclaration_Invalid ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output omit-xml-declaration=""Yes"" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_OmitXmlDeclaration_Empty ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output omit-xml-declaration="""" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- public void Output_OmitXmlDeclaration_ForwardsCompatible ()
- {
- StringWriter sw = new StringWriter ();
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.5"">
- <xsl:output omit-xml-declaration=""{0}"" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- // omit-xml-declaration is "Yes"
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "Yes"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // omit-xml-declaration is empty
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- }
- [Test]
- public void Output_DocType_Xml ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- // set both doctype-system and doctype-public
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><abc /></test>", sw.ToString (), "#1");
- // only set doctype-public
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<test><abc /></test>", sw.ToString (), "#2");
- // only set doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- indent=""no""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test SYSTEM \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><abc /></test>", sw.ToString (), "#3");
- // set empty doctype-public and empty doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- doctype-public=""""
- doctype-system="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test PUBLIC \"\" \"\">" +
- "<test><abc /></test>", sw.ToString (), "#4");
- // set empty doctype-public
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- indent=""no""
- doctype-public="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<test><abc /></test>", sw.ToString (), "#5");
- // set empty doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- doctype-system="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test SYSTEM \"\">" +
- "<test><abc /></test>", sw.ToString (), "#6");
- }
- [Test]
- public void Output_DocType_Html ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- // set both doctype-system and doctype-public
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><abc></abc></test>", sw.ToString (), "#1");
- // only set doctype-public
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" >" +
- "<test><abc></abc></test>", sw.ToString (), "#2");
- // only set doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html SYSTEM \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><abc></abc></test>", sw.ToString (), "#3");
- // set empty doctype-public and empty doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-public="""" doctype-system="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html PUBLIC \"\" \"\">" +
- "<test><abc></abc></test>", sw.ToString (), "#4");
- // set empty doctype-public
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-public="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html PUBLIC \"\" >" +
- "<test><abc></abc></test>", sw.ToString (), "#5");
- // set empty doctype-system
- xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- indent=""no""
- doctype-system="""" />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""abc"" />
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<!DOCTYPE html SYSTEM \"\">" +
- "<test><abc></abc></test>", sw.ToString (), "#6");
- }
- [Test]
- public void Output_Indent_Xml_DocType ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd""
- {0} />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""something"">
- <xsl:element name=""else"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // set indent to yes
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
- "<!DOCTYPE test PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">{0}" +
- "<test>{0}" +
- " <something>{0}" +
- " <else />{0}" +
- " </something>{0}" +
- "</test>", Environment.NewLine), sw.ToString (), "#1");
- // set indent to no
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><something><else /></something></test>", sw.ToString (),
- "#2");
- // indent not set
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<!DOCTYPE test PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><something><else /></something></test>", sw.ToString (),
- "#3");
- }
- [Test]
- [Category ("NotWorking")] // bug #77081: mono does not output newline and indentation for non-html elements
- public void Output_Indent_Html_DocType ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- doctype-public=""-//W3C//DTD XHTML 1.0 Strict//EN""
- doctype-system=""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd""
- {0} />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""something"">
- <xsl:element name=""else"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // set indent to yes
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">{0}" +
- "<test>{0}" +
- " <something>{0}" +
- " <else>{0}" +
- " </else>{0}" +
- " </something>{0}" +
- "</test>", Environment.NewLine), sw.ToString (), "#1");
- // set indent to no
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" +
- "<test><something><else></else></something></test>",
- Environment.NewLine), sw.ToString (), "#2");
- // indent not set
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">{0}" +
- "<test>{0}" +
- " <something>{0}" +
- " <else>{0}" +
- " </else>{0}" +
- " </something>{0}" +
- "</test>", Environment.NewLine), sw.ToString (), "#3");
- }
- [Test]
- public void Output_Indent_Xml ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- {0} />
- <xsl:template match=""/"">
- <xsl:element name=""test"">
- <xsl:element name=""something"">
- <xsl:element name=""else"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // set indent to yes
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
- "<test>{0}" +
- " <something>{0}" +
- " <else />{0}" +
- " </something>{0}" +
- "</test>", Environment.NewLine), sw.ToString (), "#1");
- // set indent to no
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<test><something><else /></something></test>", sw.ToString (),
- "#2");
- // indent not set
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<test><something><else /></something></test>", sw.ToString (),
- "#3");
- }
- [Test]
- [Category ("NotWorking")] // bug #77081: mono does not output newline and indentation for non-html elements
- public void Output_Indent_Html ()
- {
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output
- method=""html""
- {0} />
- <xsl:template match=""/"">
- <xsl:element name=""html"">
- <xsl:element name=""body"">
- <xsl:element name=""p"" />
- <xsl:element name=""p"">
- <xsl:text>something</xsl:text>
- </xsl:element>
- <xsl:element name=""p"">
- <xsl:element name=""div"" />
- </xsl:element>
- <xsl:element name=""p"">
- <xsl:element name=""whatever"" />
- </xsl:element>
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // set indent to yes
- StringWriter sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"yes\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- " <body>{0}" +
- " <p>{0}" +
- " </p>{0}" +
- " <p>something</p>{0}" +
- " <p>{0}" +
- " <div>{0}" +
- " </div>{0}" +
- " </p>{0}" +
- " <p>{0}" +
- " <whatever>{0}" +
- " </whatever>{0}" +
- " </p>{0}" +
- " </body>{0}" +
- "</html>", Environment.NewLine), sw.ToString (), "#1");
- // set indent to no
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "indent=\"no\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html><body><p></p><p>something</p><p><div></div></p>" +
- "<p><whatever></whatever></p></body></html>",
- Environment.NewLine), sw.ToString (), "#2");
- // indent not set
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- " <body>{0}" +
- " <p>{0}" +
- " </p>{0}" +
- " <p>something</p>{0}" +
- " <p>{0}" +
- " <div>{0}" +
- " </div>{0}" +
- " </p>{0}" +
- " <p>{0}" +
- " <whatever>{0}" +
- " </whatever>{0}" +
- " </p>{0}" +
- " </body>{0}" +
- "</html>", Environment.NewLine), sw.ToString (), "#3");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_Indent_Invalid ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output indent=""Yes"" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_Indent_Empty ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output indent="""" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- public void Output_Indent_ForwardsCompatible ()
- {
- StringWriter sw = new StringWriter ();
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.5"">
- <xsl:output indent=""{0}"" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- // indent is "Yes"
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "Yes"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // indent is empty
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, ""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- }
- [Test]
- public void Output_MediaType ()
- {
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output media-type=""whatever"" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString ());
- }
- [Test]
- public void Output_Encoding_TextWriter ()
- {
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output {0} />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // no encoding
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, string.Empty))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // valid encoding
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format(xsltFragment, "encoding=\"iso-8859-1\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // invalid encoding
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "encoding=\"doesnotexist\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- // empty encoding
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "encoding=\"\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#3");
- }
- [Test]
- public void Output_Encoding_Stream ()
- {
- MemoryStream ms = null;
- string result = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output {0} />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // no encoding
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, string.Empty))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
- "<root />", result, "#1");
- // valid encoding
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "encoding=\"iso-8859-1\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>" +
- "<root />", result, "#2");
- // invalid encoding
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "encoding=\"doesnotexist\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
- "<root />", result, "#3");
- // empty encoding
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "encoding=\"\""))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
- "<root />", result, "#4");
- }
- [Test]
- public void Output_Version ()
- {
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output version=""{0}"" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // version 1.0
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "1.0"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- // version 2.0
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "2.0"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#2");
- // version BLABLA
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, "BLABLA"))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#3");
- }
- [Test]
- public void Output_Method_Html_TextWriter ()
- {
- string options = null;
- StringWriter sw = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output method=""html"" {0} />
- <xsl:template match=""/"">
- <xsl:element name=""html"">
- <xsl:element name=""head"">
- <xsl:element name=""title"">Output Test</xsl:element>
- </xsl:element>
- <xsl:element name=""Body"">
- <xsl:element name=""BR"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // indent not set, media-type not set
- sw = new StringWriter ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, string.Empty))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-16\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", Environment.NewLine, " "), sw.ToString (), "#1");
- // indent no, media-type not set
- options = "indent=\"no\"";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, options))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-16\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", string.Empty, string.Empty), sw.ToString (), "#2");
- // indent yes, media-type "bla", omit-xml-declaration "no"
- options = "indent=\"yes\" media-type=\"bla\"" +
- " encoding=\"iso-8859-1\" omit-xml-declaration=\"no\"";
- sw.GetStringBuilder ().Length = 0;
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, options))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"bla; charset=utf-16\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", Environment.NewLine, " "), sw.ToString (), "#3");
- }
- [Test]
- public void Output_Method_Html_Stream ()
- {
- string options = null;
- MemoryStream ms = null;
- string result = null;
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output method=""html"" {0} />
- <xsl:template match=""/"">
- <xsl:element name=""html"">
- <xsl:element name=""head"">
- <xsl:element name=""title"">Output Test</xsl:element>
- </xsl:element>
- <xsl:element name=""Body"">
- <xsl:element name=""BR"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- // indent not set, media-type not set
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, string.Empty))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", Environment.NewLine, " "), result, "#1");
- // indent no, media-type not set
- options = "indent=\"no\"";
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, options))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", string.Empty, string.Empty), result, "#2");
- // indent yes, media-type "bla", omit-xml-declaration "no"
- options = "indent=\"yes\" media-type=\"bla\"" +
- " encoding=\"iso-8859-1\" omit-xml-declaration=\"no\"";
- ms = new MemoryStream ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (
- string.Format (xsltFragment, options))),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, ms, new XmlUrlResolver ());
- ms.Position = 0;
- using (StreamReader sr = new StreamReader (ms, true)) {
- result = sr.ReadToEnd ();
- }
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<html>{0}" +
- "{1}<head>{0}" +
- "{1}{1}<META http-equiv=\"Content-Type\" content=\"bla; charset=iso-8859-1\">{0}" +
- "{1}{1}<title>Output Test</title>{0}" +
- "{1}</head>{0}" +
- "{1}<Body>{0}" +
- "{1}{1}<BR>{0}" +
- "{1}</Body>{0}" +
- "</html>", Environment.NewLine, " "), result, "#3");
- }
- [Test]
- [ExpectedException (typeof (XsltCompileException))]
- public void Output_Unknown_Attribute ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
- <xsl:output whatever="""" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- [Test]
- public void Output_Unknown_Attribute_ForwardsCompatible ()
- {
- StringWriter sw = new StringWriter ();
- XsltArgumentList xsltArgs = new XsltArgumentList ();
- XslTransform xsltProcessor = new XslTransform ();
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<dummy />");
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.5"">
- <xsl:output whatever="""" />
- <xsl:template match=""/"">
- <root />
- </xsl:template>
- </xsl:stylesheet>";
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
- Assert.AreEqual (
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
- "<root />", sw.ToString (), "#1");
- }
- [Test]
- public void Output_Unknown_Attribute_NonDefaultNamespace ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
- <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:tst=""something"" version=""1.0"">
- <xsl:output tst:whatever="""" />
- </xsl:stylesheet>";
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- }
- // http://support.microsoft.com/kb/832757/en-us
- [Test]
- public void FormatNumber_KB_832757 ()
- {
- string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8""?>
- <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
- <xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes"" />
- <xsl:template match=""/"">
- <table>
- <xsl:apply-templates />
- </table>
- </xsl:template>
- <xsl:template match=""number"">
- <tr><td><xsl:value-of select=""format-number(.,'#,##0;(#,##0)')""/></td></tr>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<root><number>1000</number></root>");
- StringWriter sw = new StringWriter ();
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, new XsltArgumentList (), sw,
- new XmlUrlResolver ());
- Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
- "<table>{0}" +
- " <tr>{0}" +
- " <td>1,000</td>{0}" +
- " </tr>{0}" +
- "</table>", Environment.NewLine), sw.ToString ());
- }
- // http://support.microsoft.com/kb/293469/en-us
- [Test]
- public void FormatNumber_KB_293469 ()
- {
- string xsltFragment = @"<?xml version=""1.0""?>
- <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
- <xsl:output method=""xml"" indent=""yes"" />
- <xsl:decimal-format name=""european"" decimal-separator="","" grouping-separator=""."" />
- <xsl:template match=""/"">
- <xsl:element name=""html"">
- <xsl:element name=""body"">
- <xsl:apply-templates select=""root/amount"" />
- </xsl:element>
- </xsl:element>
- </xsl:template>
- <xsl:template match=""amount"">
- <xsl:value-of select=""format-number(., '###.###,00', 'european')""/>
- </xsl:template>
- </xsl:stylesheet>";
- XmlDocument xmlDoc = new XmlDocument ();
- xmlDoc.LoadXml ("<root><amount currency='USD'>44442.7</amount></root>");
- StringWriter sw = new StringWriter ();
- XslTransform xsltProcessor = new XslTransform ();
- xsltProcessor.Load (new XmlTextReader (new StringReader (xsltFragment)),
- new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
- xsltProcessor.Transform (xmlDoc, new XsltArgumentList (), sw,
- new XmlUrlResolver ());
- Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
- "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
- "<html>{0}" +
- " <body>44.442,70</body>{0}" +
- "</html>", Environment.NewLine), sw.ToString ());
- }
- [Test]
- [Category ("NotDotNet")]
- // MS bug: the output must be well-formed XML general entity
- // (doctype must not appear after text nodes).
- public void DocTypeAfterText ()
- {
- string xsl = @"
- <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
- <xsl:output doctype-system='system'/>
- <xsl:template match='/'>
- <xsl:text xml:space='preserve'> a </xsl:text>
- <foo/>
- </xsl:template>
- </xsl:stylesheet>";
- XslTransform t = new XslTransform ();
- t.Load (new XmlTextReader (xsl, XmlNodeType.Document, null));
- XmlDocument doc = new XmlDocument ();
- try {
- t.Transform (new XPathDocument (
- new StringReader ("<root/>")),
- null, TextWriter.Null);
- Assert.Fail ("should fail; doctype is not allowed after whitespace. See XSLT 1.0 section 16.1.");
- } catch {
- }
- }
- }
- }
|