Hi, We maintain a base set of XSLs for each client project (similar to Forrest). We have a need to update or 'fix' XSL's. This requires some functional testing. We first transform to an XML document that describes the structure. Here is a snippet of the XSLT:
<xsl:template match="xsl:stylesheet"> <stylesheet id="basic_1col.xsl"> <doc>A basic 1 column layout. This is a primary stylesheet. Each primary stylesheet includes global_definitions.xsl, which in turn includes the common XSL pages. Much of the layout can be affected just by changing the /css/project.css. When a page is requested/generated, a source XML (always /WEB-INF/styling/site.xml) is transformed against a primary XSL.</doc> <doc>global_definitions.xsl includes the common XSL templates, gathers parameters sent in from the server and sets up common global variables.</doc> <xsl:choose> <xsl:when test="boolean(xsl:include[@href='global_definitions.xsl'])"> <include href="global_definitions.xsl" present="true"/> </xsl:when> <xsl:otherwise> <include href="global_definitions.xsl" present="false"/> </xsl:otherwise> </xsl:choose> <doc>Depending on the value of this variable paths will be built starting from root relative if true, or document relative if falses.</doc> <xsl:choose> <xsl:when test="boolean(xsl:variable[@name='root_relative'])"> <variable name="root_relative" select="{xsl:variable/@select}" present="true"/> </xsl:when> <xsl:otherwise> <variable name="root_relative" select="{xsl:variable/@select}" present="false"/> </xsl:otherwise> </xsl:choose> <doc>match the document root to start setting up the HTML page structure</doc> <xsl:choose> <xsl:when test="boolean(xsl:template[@match='/'])"> <template match="/" present="true"> <xsl:choose> <xsl:when test="boolean(xsl:template/html)"> <html present="true"> <doc>call to head.xsl to set up the HTML HEAD</doc> <xsl:choose> <xsl:when test="boolean(xsl:template/html/xsl:call-template[@name='head'])"> <call-template name="head" present="true"/> </xsl:when> <xsl:otherwise> <call-template name="head" present="false"/> </xsl:otherwise> </xsl:choose> ........etc...... ------------------------------------- Then this output is transformed to a report and or used to update/fix existing XSL best, -Rob > -----Original Message----- > From: Stephen Ng [mailto:[EMAIL PROTECTED]] > Sent: Thursday, August 29, 2002 6:49 AM > To: [EMAIL PROTECTED] > Subject: RE: Unit testing xslt > > > I have unit tests for all my xslt. > > I'm not using XSLTUnit (which is a fine program)--in my case, for each > xslt file, I have a one or more test input files and corresponding > reference files which are the expected result when I run the transform. > I use file names/extensions to group them: > > myScript.xslt > myScript.simpleTest.xml > myScript.simpleTest.ref > myScript.complexTest.xml > myScript.complexTest.ref > > I use a combination of batch jobs and ant scripts to match up the files, > run the tests, and compare the results. > > I don't always do test-first--sometimes it's just easier to test your > code inside your app. So what I often do is write the code, test it in > the app, and then write the tests. I then back out my change, and run > the tests again. The tests should fail--if they don't, I've done > something wrong in my test code. I then reintroduce my changes one bit > at a time, and make sure sure my tests start to succeed again. > > I think unit testing xslt's is a great thing. > > HTH, > > Steve > > > -----Original Message----- > > From: Robert Leftwich [mailto:[EMAIL PROTECTED]] > > Sent: Wednesday, August 28, 2002 9:58 PM > > To: [EMAIL PROTECTED] > > Subject: Unit testing xslt > > > > > > Given Cocoon's big focus on transforms, I was wondering if > > anyone is using > > unit tests and/or test-first design when developing their xslt? I'd > > appreciate any comments on its effectiveness and what tools > > you are using > > (XSLTunit for example?). > > > > Robert> --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>