| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918 |
- //
- // 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 {
- }
- }
- [Test]
- public void StripSpace ()
- {
- string result = @"
- MonoDevelop
- ProjectTemplates
- FileTemplates
- IDE
- StartupHandlers
- FileTemplateTypes
- Workspace
- Applications
- Services
- ";
- XslTransform t = new XslTransform ();
- t.Load ("Test/XmlFiles/xsl/stripspace.xsl");
- XPathDocument d = new XPathDocument (
- "Test/XmlFiles/xsl/stripspace.xml", XmlSpace.Preserve);
- StringWriter sw = new StringWriter ();
- t.Transform (d, null, sw);
- Assert.AreEqual (result, sw.ToString ());
- }
- [Test]
- public void CurrentInSelect ()
- {
- XslTransform t = new XslTransform ();
- t.Load ("Test/XmlFiles/xsl/current-in-select.xsl");
- XPathDocument d = new XPathDocument (
- "Test/XmlFiles/xsl/current-in-select.xml", XmlSpace.Preserve);
- StringWriter sw = new StringWriter ();
- t.Transform (d, null, sw);
- using (StreamReader sr = File.OpenText (
- "Test/XmlFiles/xsl/current-in-select.ref")) {
- string s = sr.ReadToEnd ();
- Assert.AreEqual (s, sw.ToString ());
- }
- }
- }
- }
|