**** Merged from MCS ****
[mono-project.git] / mcs / class / System.XML / Test / System.Xml.Xsl / MsxslScriptTests.cs
blobd89db06b7d6d815484978243d641303113eb01a1
1 //
2 // System.Xml.Xsl.MsxslScriptTests.cs
3 //
4 // Author:
5 // Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // (C) 2004 Novell Inc.
8 //
10 using System;
11 using System.IO;
12 using System.Xml;
13 using System.Xml.Xsl;
14 using NUnit.Framework;
16 namespace MonoTests.System.Xml.Xsl
18 [TestFixture]
19 public class MsxslScriptTests : Assertion
21 // PI calc stuff are one of MSDN samples.
23 static XmlDocument doc;
24 static MsxslScriptTests ()
26 string inputxml = @"<?xml version='1.0'?>
27 <data>
28 <circle>
29 <radius>12</radius>
30 </circle>
31 <circle>
32 <radius>37.5</radius>
33 </circle>
34 </data>";
35 doc = new XmlDocument ();
36 doc.LoadXml (inputxml);
39 static string xslstring = @"<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
40 xmlns:msxsl='urn:schemas-microsoft-com:xslt'
41 xmlns:user='urn:my-scripts'>
43 ***** rewrite here *****
45 <xsl:template match='data'>
46 <circles>
48 <xsl:for-each select='circle'>
49 <circle>
50 <xsl:copy-of select='node()'/>
51 <circumference>
52 <!-- xsl:value-of select='user:circumference(radius)'/ -->
53 TEST:
54 <xsl:value-of select='user:PadRight(&quot;test-string&quot;, 20)'/>
55 </circumference>
56 </circle>
57 </xsl:for-each>
58 </circles>
59 </xsl:template>
60 </xsl:stylesheet>";
62 string cs1 = @"<msxsl:script language='C#' implements-prefix='user' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
63 <![CDATA[
64 string PadRight( string str, int padding) {
65 return str.PadRight(padding);
67 ]]>
68 </msxsl:script>";
69 string cs2 = @"<msxsl:script language='C#' implements-prefix='user' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
70 <![CDATA[
71 public double circumference(double radius){
72 double pi = 3.14;
73 double circ = pi*radius*2;
74 return circ;
76 ]]>
77 </msxsl:script>";
78 string vb1 = @"<msxsl:script language='VB' implements-prefix='user' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
79 <![CDATA[
80 public function circumference(radius as double) as double
81 dim pi as double = 3.14
82 dim circ as double = pi*radius*2
83 return circ
84 end function
85 public function greet () as string
86 return " + "\"Hey! you should not depend on proprietary scripting!!\"" + @"
87 end function
88 ]]>
89 </msxsl:script>";
90 string js1 = @"<msxsl:script language='JScript' implements-prefix='user' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
91 <![CDATA[
92 function circumference(radius : double) : double {
93 var pi : double = 3.14;
94 var circ : double = pi*radius*2;
95 return circ;
97 function greet () : String {
98 return " + "\"Hey! you should not depend on proprietary scripting!!\"" + @";
101 </msxsl:script>";
104 XslTransform xslt;
106 [SetUp]
107 public void GetReady ()
109 xslt = new XslTransform ();
112 [Test]
113 public void TestCSharp ()
115 XmlTextReader xr = new XmlTextReader (cs1, XmlNodeType.Document, null);
116 xslt.Load (xr);
117 xslt.Transform (doc.CreateNavigator (), null, new XmlTextWriter (new StringWriter ()));
119 xr = new XmlTextReader (cs2, XmlNodeType.Document, null);
120 xslt.Load (xr);
121 xslt.Transform (doc.CreateNavigator (), null, new XmlTextWriter (new StringWriter ()));
124 [Test]
125 public void TestVB ()
127 XmlTextReader xr = new XmlTextReader (vb1, XmlNodeType.Document, null);
128 xslt.Load (xr);
129 xslt.Transform (doc.CreateNavigator (), null, new XmlTextWriter (new StringWriter ()));
132 [Test]
133 public void TestJScript ()
135 XmlTextReader xr = new XmlTextReader (js1, XmlNodeType.Document, null);
136 xslt.Load (xr);
137 xslt.Transform (doc.CreateNavigator (), null, new XmlTextWriter (new StringWriter ()));
140 [Test]
141 [ExpectedException (typeof (XsltCompileException))]
142 public void InvalidScript ()
144 string script = @"<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:user='urn:my-scripts'
145 xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
146 <!-- -->
147 <xsl:output method='html' indent='no' />
148 <!-- -->
149 <xsl:template match='/project'>
150 <xsl:if test='user:BadScriptFunction(&apos;test&apos;)'></xsl:if>
151 </xsl:template>
152 <!-- -->
153 <msxsl:script language='C#' implements-prefix='user'>
154 <![CDATA[
155 string BadScriptFunction(string test) {
156 xxx;
159 </msxsl:script>
160 <!-- -->
161 </xsl:stylesheet>";
162 xslt.Load (new XmlTextReader (script, XmlNodeType.Document, null));