#Example from Michael Kay's to Sanjay on 9 Dec 1999, with minor corrections to produce well-formed XML

from Xslt import test_harness

sheet_1 = """<xsl:transform
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0"
>
<xsl:template match="/">
    <top>
    <xsl:apply-templates select="/FORMS/CONTAINERS"/>
    </top>
</xsl:template>
<xsl:template match="/FORMS/CONTAINERS"> 
    <xsl:for-each select="CONTAINER"> 

        <xsl:copy-of select="//*[name(.)=current()/PRE_HTML]" /> 
        <xsl:value-of select="TITLE"/>
        <xsl:comment>Do some more things here</xsl:comment>

        <xsl:copy-of select="//*[name(.)=current()/POST_HTML]" /> 

    </xsl:for-each> 
</xsl:template> 
</xsl:transform>"""

source_1 = """<FORMS>
    <CONTAINERS>
        <CONTAINER>
            <PRE_HTML>DEPT_PREHTML</PRE_HTML>
            <TITLE>Departments</TITLE>
            <POST_HTML>DEPT_POSTHTML</POST_HTML>
        </CONTAINER>

        <CONTAINER>
            <PRE_HTML>EMP_PREHTML</PRE_HTML>
            <TITLE>Employees</TITLE>
            <POST_HTML>EMP_POSTHTML</POST_HTML>
        </CONTAINER>
    </CONTAINERS>

    <DEPT_PREHTML>
        <!-- Well-formed HTML. -->
        <DIV id="Layer1" style="position: absolute">
            <IMG src="/images/edu.gif" width="917"
                 height="104"/>
        </DIV>
    </DEPT_PREHTML>

    <DEPT_POSTHTML>
        <P>DEPT_POSTHTML: Some more well-formed HTML. </P>
    </DEPT_POSTHTML>

    <EMP_PREHTML>
        <P>EMP_PREHTML: Some more well-formed HTML. </P>
    </EMP_PREHTML>

    <EMP_POSTHTML>
        <P>EMP_POSTHTML: Some more well-formed HTML. </P>
    </EMP_POSTHTML>
</FORMS>"""


saxon_expected = """<?xml version="1.0"?>
<top><DEPT_PREHTML>
        <!-- Well-formed HTML. -->
        <DIV id="Layer1" style="position: absolute">
            <IMG src="/images/edu.gif" width="917" height="104"></IMG>
        </DIV>
    </DEPT_PREHTML>Departments<!--Do some more things here--><DEPT_POSTHTML>

        <P>DEPT_POSTHTML: Some more well-formed HTML. </P>
    </DEPT_POSTHTML><EMP_PREHTML>
        <P>EMP_PREHTML: Some more well-formed HTML. </P>
    </EMP_PREHTML>Employees<!--Do some more things here--><EMP_POSTHTML>
        <P>EMP_POSTHTML: Some more well-formed HTML. </P>
    </EMP_POSTHTML></top>"""


#Note that XML processors are not required to pass on comments
expected_1a = """<?xml version='1.0' encoding='UTF-8'?>
<top><DEPT_PREHTML>
        <!-- Well-formed HTML. -->
        <DIV style='position: absolute' id='Layer1'>
            <IMG height='104' width='917' src='/images/edu.gif'/>
        </DIV>
    </DEPT_PREHTML>Departments<!--Do some more things here--><DEPT_POSTHTML>
        <P>DEPT_POSTHTML: Some more well-formed HTML. </P>
    </DEPT_POSTHTML><EMP_PREHTML>
        <P>EMP_PREHTML: Some more well-formed HTML. </P>
    </EMP_PREHTML>Employees<!--Do some more things here--><EMP_POSTHTML>
        <P>EMP_POSTHTML: Some more well-formed HTML. </P>
    </EMP_POSTHTML></top>"""
    #Note that XML processors are not required to pass on comments

expected_1b = """<?xml version='1.0' encoding='UTF-8'?>
<top><DEPT_PREHTML>
        
        <DIV style='position: absolute' id='Layer1'>
            <IMG height='104' width='917' src='/images/edu.gif'/>
        </DIV>
    </DEPT_PREHTML>Departments<!--Do some more things here--><DEPT_POSTHTML>
        <P>DEPT_POSTHTML: Some more well-formed HTML. </P>
    </DEPT_POSTHTML><EMP_PREHTML>
        <P>EMP_PREHTML: Some more well-formed HTML. </P>
    </EMP_PREHTML>Employees<!--Do some more things here--><EMP_POSTHTML>
        <P>EMP_POSTHTML: Some more well-formed HTML. </P>
    </EMP_POSTHTML></top>"""


def Test(tester):

    tester.startGroup("Borrowed: km_19991209")
    source = test_harness.FileInfo(string=source_1)
    sty = test_harness.FileInfo(string=sheet_1)
    xtest = test_harness.XsltTester(source,
                                    [sty],
                                    expected_1a,
                                    cDomletteExpected=expected_1a
                                    )

    xtest.test(tester)
    tester.groupDone()
    return