#Lars Marius Garshol <larsga@garshol.priv.no> reports bugs

from xml.xslt import XsltException, Error
from Xslt import test_harness

sheet_1 = """<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:foo="http://foo.org/xslt/extensions"
                extension-element-prefixes="foo"
                version="1.0">

  <xsl:template match = "/">
    <foo:bar really-useful-attribute = "bing">
      [...proceed to use the foo:bar instruction for something
    useful...]

      <xsl:fallback>
        <xsl:message terminate="yes">
        Sorry, support for the foo:bar element required to run this
        stylesheet. Try using the XSLT processor from foo.org instead!
        </xsl:message>
      </xsl:fallback>
    </foo:bar>
  </xsl:template>

</xsl:stylesheet>"""


sheet_2 = """<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:foo="http://foo.org/xslt/extensions"
                extension-element-prefixes="foo"
                version="1.0">

<xsl:output indent="yes"
    doctype-system="http://www.python.org/topics/xml/dtds/xbel-1.0.dtd"
    doctype-public="+//IDN python.org//DTD XML Bookmark Exchange
    Language 1.0//EN//XML" />

  <xsl:template match = "/">
    <spam/>
  </xsl:template>

</xsl:stylesheet>"""


sheet_3 = """<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

  <xsl:template match = "/">
    <spam>
    <xsl:processing-instruction name="xsl-stylesheet">
      bing.xslt
    </xsl:processing-instruction>
    </spam>
  </xsl:template>

</xsl:stylesheet>"""

source_1 = "<xbel/>"


expected_1 = """"""


expected_2 = """<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE spam PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange     Language 1.0//EN//XML" "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
<spam/>"""


expected_3 = """<?xml version='1.0' encoding='UTF-8'?>\012<spam><?xsl-stylesheet bing.xslt?></spam>"""


def Test(tester):

    tester.startGroup("Borrowed: lmg_20001031, test 1")
    source = test_harness.FileInfo(string=source_1)
    sty = test_harness.FileInfo(string=sheet_1)
    xtest = test_harness.XsltTester(source,
                                    [sty],
                                    expected_1,
                                    compareFunc = cmp,
                                    expectedException=XsltException,
                                    exceptionValues={'errorCode':Error.STYLESHEET_REQUESTED_TERMINATION},
                                    )

    xtest.test(tester)
    tester.groupDone()

    tester.startGroup("Borrowed: lmg_20001031, test 2")
    source = test_harness.FileInfo(string=source_1)
    sty = test_harness.FileInfo(string=sheet_2)
    xtest = test_harness.XsltTester(source,
                                    [sty],
                                    expected_2,
                                    )

    xtest.test(tester)
    tester.groupDone()

    tester.startGroup("Borrowed: lmg_20001031, test 3")
    source = test_harness.FileInfo(string=source_1)
    sty = test_harness.FileInfo(string=sheet_3)
    xtest = test_harness.XsltTester(source,
                                    [sty],
                                    expected_3,
                                    )

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