Viewing file: test_number_sort.py (15.77 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#Based on the XSLT spec: http://docs.local/REC-xslt-19991116.html#sorting and #http://docs.local/REC-xslt-19991116.html#number
from Xml.Xslt import test_harness
source_1="""<?xml version="1.0" encoding="utf-8"?> <employees> <employee> <name> <id>1024</id> <given>James</given> <family>Clark</family> </name> </employee> <employee> <name> <id>1099</id> <given>Uche</given> <family>Ogbuji</family> </name> </employee> <employee> <name> <id>1040</id> <given>Mike</given> <family>Olson</family> </name> </employee> <employee> <name> <id>1075</id> <given>Mike</given> <family>Doe</family> </name> </employee> <employee> <name> <id>1050</id> <given>James</given> <family>Doe</family> </name> </employee> </employees>"""
source_2="""<?xml version="1.0" encoding="utf-8"?> <taxonomy> <!-- Uche reads too much National Geographic --> <kingdom name="Animalia"> <phylum name="Chordata"> <class name="Mammalia"> <order name="Primates"> <family name="Hominidae"> <genus name="Homo"> <species name="Sapiens"/> </genus> <genus name="Pan"> <species name="Troglodytes"/> </genus> <genus name="Pan"> <species name="Paniscus"> <comment>Quite familiar to GNOME CORBA users</comment> </species> </genus> <genus name="Gorilla"> <species name="Gorilla"/> </genus> </family> </order> <order name="Carnivora"> <family name="Felidae"> <genus name="Felis"> <species name="Catus"/> </genus> <genus name="Panthera"> <species name="Pardus"/> </genus> <genus name="Panthera"> <species name="Tigris"/> </genus> <genus name="Panthera"> <species name="Leo"/> </genus> </family> <family name="Canidae"> <genus name="Canis"> <species name="Familiaris"/> </genus> <genus name="Canis"> <species name="Lupus"/> </genus> <genus name="Vulpes"> <species name="Vulpes"/> </genus> </family> </order> </class> </phylum> </kingdom> <kingdom name="Plantae"> <division name="Magnoliophyta"> <comment>Flowering plants</comment> <!-- Cronquist System --> <class name="Magnoliopsida"> <comment>Dicots</comment> <order name="Rutaceae"> <family name="Citrus"> <genus name="Citrus"> <species name="Aurantiifolia"/> </genus> <genus name="Citrus"> <species name="Limon"/> </genus> <genus name="Citrus"> <species name="Sinensis"/> </genus> </family> </order> </class> </division> </kingdom> <kingdom name="Protista"> </kingdom> <!-- Prokaryotes --> <kingdom name="Archaea"> </kingdom> <kingdom name="Eubacteria"> </kingdom> </taxonomy>"""
source_3 = """<?xml version="1.0" encoding="utf-8"?> <book> <div1> <head>Chapter 1</head> <para>Chapter 1 content.</para> <div2> <head>Section 1.1</head> <para>Section 1.1 content.</para> </div2> <div2> <head>Section 1.2</head> <para>Section 1.2 content.</para> </div2> </div1> <div1> <head>Chapter 2</head> <para>Chapter 2 content.</para> <div2> <head>Section 2.1</head> <para>Section 2.1 content.</para> </div2> <div2> <head>Section 2.2</head> <para>Section 2.2 content.</para> </div2> </div1> </book> """
sheet_1 = """<?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" indent="no"/>
<xsl:template match="text()"/>
<xsl:template match="employees"> <ul> <xsl:apply-templates select="employee"> <xsl:sort select="name/family"/> <xsl:sort select="name/given"/> </xsl:apply-templates> </ul> </xsl:template>
<xsl:template match="employee"> <li> <xsl:number value="position()" format="1. "/> <xsl:value-of select="name/given"/> <xsl:text> </xsl:text> <xsl:value-of select="name/family"/> </li> </xsl:template>
</xsl:stylesheet>"""
expected_1 = """<?xml version="1.0" encoding="UTF-8"?> <ul><li>1. James Clark</li><li>2. James Doe</li><li>3. Mike Doe</li><li>4. Uche Ogbuji</li><li>5. Mike Olson</li></ul>"""
sheet_2 = """<?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" indent="no"/>
<xsl:template match="text()"/>
<xsl:template match="employees"> <ul> <xsl:apply-templates select="employee"> <xsl:sort select="name/family" order="descending"/> <xsl:sort select="name/given" order="ascending"/> </xsl:apply-templates> </ul> </xsl:template>
<xsl:template match="employee"> <li> <xsl:value-of select="name/given"/> <xsl:text> </xsl:text> <xsl:value-of select="name/family"/> </li> </xsl:template>
</xsl:stylesheet>"""
expected_2 = """<?xml version="1.0" encoding="UTF-8"?> <ul><li>Mike Olson</li><li>Uche Ogbuji</li><li>James Doe</li><li>Mike Doe</li><li>James Clark</li></ul>"""
sheet_3 = """<?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" indent="no"/>
<xsl:template match="text()"/>
<xsl:template match="employees"> <ul> <xsl:apply-templates select="employee"> <xsl:sort select="name/family"/> <xsl:sort select="name/given" case-order="lower-first"/> </xsl:apply-templates> </ul> </xsl:template>
<xsl:template match="employee"> <li> <xsl:value-of select="name/given"/> <xsl:text> </xsl:text> <xsl:value-of select="name/family"/> </li> </xsl:template>
</xsl:stylesheet>"""
expected_3 = """<?xml version="1.0" encoding="UTF-8"?> <ul><li>James Clark</li><li>James Doe</li><li>Mike Doe</li><li>Uche Ogbuji</li><li>Mike Olson</li></ul>"""
sheet_4 = """<?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" indent="no"/>
<xsl:template match="text()"/>
<xsl:template match="employees"> <ul> <xsl:apply-templates select="employee"> <xsl:sort select="name/id" data-type="number"/> </xsl:apply-templates> </ul> </xsl:template>
<xsl:template match="employee"> <li> <xsl:value-of select="name/given"/> <xsl:text> </xsl:text> <xsl:value-of select="name/family"/> </li> </xsl:template>
</xsl:stylesheet>"""
expected_4 = """<?xml version="1.0" encoding="UTF-8"?> <ul><li>James Clark</li><li>Mike Olson</li><li>James Doe</li><li>Mike Doe</li><li>Uche Ogbuji</li></ul>"""
sheet_5 = """<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/"> <!-- Some number formatting tests --> <xsl:text>Format 1715 using "A": </xsl:text><xsl:number value="1715" format="A"/><xsl:text> </xsl:text> <xsl:apply-templates/> </xsl:template>
<xsl:template match="*"> <xsl:number format="==>I.A.1.a.i. " level="multiple" count="*[not(name()='comment')]"/> <xsl:value-of select="concat(name(), ': ' , @name, ' ')"/> <xsl:apply-templates select="*"/> </xsl:template>
<xsl:template match="comment"/>
</xsl:stylesheet>"""
expected_5 = """\ Format 1715 using "A": BMY ==>I. taxonomy:\x20 ==>I.A. kingdom: Animalia ==>I.A.1. phylum: Chordata ==>I.A.1.a. class: Mammalia ==>I.A.1.a.i. order: Primates ==>I.A.1.a.i.i. family: Hominidae ==>I.A.1.a.i.i.i. genus: Homo ==>I.A.1.a.i.i.i.i. species: Sapiens ==>I.A.1.a.i.i.ii. genus: Pan ==>I.A.1.a.i.i.ii.i. species: Troglodytes ==>I.A.1.a.i.i.iii. genus: Pan ==>I.A.1.a.i.i.iii.i. species: Paniscus ==>I.A.1.a.i.i.iv. genus: Gorilla ==>I.A.1.a.i.i.iv.i. species: Gorilla ==>I.A.1.a.ii. order: Carnivora ==>I.A.1.a.ii.i. family: Felidae ==>I.A.1.a.ii.i.i. genus: Felis ==>I.A.1.a.ii.i.i.i. species: Catus ==>I.A.1.a.ii.i.ii. genus: Panthera ==>I.A.1.a.ii.i.ii.i. species: Pardus ==>I.A.1.a.ii.i.iii. genus: Panthera ==>I.A.1.a.ii.i.iii.i. species: Tigris ==>I.A.1.a.ii.i.iv. genus: Panthera ==>I.A.1.a.ii.i.iv.i. species: Leo ==>I.A.1.a.ii.ii. family: Canidae ==>I.A.1.a.ii.ii.i. genus: Canis ==>I.A.1.a.ii.ii.i.i. species: Familiaris ==>I.A.1.a.ii.ii.ii. genus: Canis ==>I.A.1.a.ii.ii.ii.i. species: Lupus ==>I.A.1.a.ii.ii.iii. genus: Vulpes ==>I.A.1.a.ii.ii.iii.i. species: Vulpes ==>I.B. kingdom: Plantae ==>I.B.1. division: Magnoliophyta ==>I.B.1.a. class: Magnoliopsida ==>I.B.1.a.i. order: Rutaceae ==>I.B.1.a.i.i. family: Citrus ==>I.B.1.a.i.i.i. genus: Citrus ==>I.B.1.a.i.i.i.i. species: Aurantiifolia ==>I.B.1.a.i.i.ii. genus: Citrus ==>I.B.1.a.i.i.ii.i. species: Limon ==>I.B.1.a.i.i.iii. genus: Citrus ==>I.B.1.a.i.i.iii.i. species: Sinensis ==>I.C. kingdom: Protista ==>I.D. kingdom: Archaea ==>I.E. kingdom: Eubacteria """
sheet_6 = """<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*"> <xsl:number format="==>I,A$1*a!i:: " level="multiple" count="*"/> <xsl:value-of select="concat(name(), ': ' , @name, ' ')"/> <xsl:apply-templates select="*"/> </xsl:template>
<xsl:template match="comment"/>
</xsl:stylesheet>"""
expected_6 = """\ ==>I:: taxonomy:\x20 ==>I,A:: kingdom: Animalia ==>I,A$1:: phylum: Chordata ==>I,A$1*a:: class: Mammalia ==>I,A$1*a!i:: order: Primates ==>I,A$1*a!i!i:: family: Hominidae ==>I,A$1*a!i!i!i:: genus: Homo ==>I,A$1*a!i!i!i!i:: species: Sapiens ==>I,A$1*a!i!i!ii:: genus: Pan ==>I,A$1*a!i!i!ii!i:: species: Troglodytes ==>I,A$1*a!i!i!iii:: genus: Pan ==>I,A$1*a!i!i!iii!i:: species: Paniscus ==>I,A$1*a!i!i!iv:: genus: Gorilla ==>I,A$1*a!i!i!iv!i:: species: Gorilla ==>I,A$1*a!ii:: order: Carnivora ==>I,A$1*a!ii!i:: family: Felidae ==>I,A$1*a!ii!i!i:: genus: Felis ==>I,A$1*a!ii!i!i!i:: species: Catus ==>I,A$1*a!ii!i!ii:: genus: Panthera ==>I,A$1*a!ii!i!ii!i:: species: Pardus ==>I,A$1*a!ii!i!iii:: genus: Panthera ==>I,A$1*a!ii!i!iii!i:: species: Tigris ==>I,A$1*a!ii!i!iv:: genus: Panthera ==>I,A$1*a!ii!i!iv!i:: species: Leo ==>I,A$1*a!ii!ii:: family: Canidae ==>I,A$1*a!ii!ii!i:: genus: Canis ==>I,A$1*a!ii!ii!i!i:: species: Familiaris ==>I,A$1*a!ii!ii!ii:: genus: Canis ==>I,A$1*a!ii!ii!ii!i:: species: Lupus ==>I,A$1*a!ii!ii!iii:: genus: Vulpes ==>I,A$1*a!ii!ii!iii!i:: species: Vulpes ==>I,B:: kingdom: Plantae ==>I,B$1:: division: Magnoliophyta ==>I,B$1*b:: class: Magnoliopsida ==>I,B$1*b!ii:: order: Rutaceae ==>I,B$1*b!ii!i:: family: Citrus ==>I,B$1*b!ii!i!i:: genus: Citrus ==>I,B$1*b!ii!i!i!i:: species: Aurantiifolia ==>I,B$1*b!ii!i!ii:: genus: Citrus ==>I,B$1*b!ii!i!ii!i:: species: Limon ==>I,B$1*b!ii!i!iii:: genus: Citrus ==>I,B$1*b!ii!i!iii!i:: species: Sinensis ==>I,C:: kingdom: Protista ==>I,D:: kingdom: Archaea ==>I,E:: kingdom: Eubacteria """
sheet_7 = """<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="para"> <p> <xsl:apply-templates/> </p> </xsl:template>
<xsl:template match="div1"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="div2"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="div1/head"> <h2> <xsl:apply-templates select=".." mode="divnum"/> <xsl:apply-templates/> </h2> </xsl:template>
<xsl:template match="div2/head"> <h3> <xsl:apply-templates select=".." mode="divnum"/> <xsl:apply-templates/> </h3> </xsl:template>
<xsl:template mode="divnum" match="div1"> <xsl:number format="1 "/> </xsl:template>
<xsl:template mode="divnum" match="div2"> <xsl:number level="multiple" count="div1 | div2" format="1.1 "/> </xsl:template>
</xsl:stylesheet>"""
expected_7 = """<?xml version="1.0" encoding="UTF-8"?> <h2>1 Chapter 1</h2> <p>Chapter 1 content.</p> <h3>1.1 Section 1.1</h3> <p>Section 1.1 content.</p> <h3>1.2 Section 1.2</h3> <p>Section 1.2 content.</p> <h2>2 Chapter 2</h2> <p>Chapter 2 content.</p> <h3>2.1 Section 2.1</h3> <p>Section 2.1 content.</p> <h3>2.2 Section 2.2</h3> <p>Section 2.2 content.</p>"""
# http://bugs.4suite.org/1162303 # formatting bug reported by Nicholas Piper on 2003-09-09 # http://lists.fourthought.com/pipermail/4suite/2003-September/012132.html # (also affects sheet_6, above) # sheet_8="""<?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" indent="yes"/>
<xsl:template match="/"> <result> <xsl:apply-templates select="/taxonomy/kingdom/phylum/class/order/family/genus/species"/> </result> </xsl:template>
<xsl:template match="species"> <species> <xsl:number level="multiple" count="*" from="/" format="/1/1"/> <xsl:value-of select="concat(' ', @name)"/> </species> </xsl:template>
</xsl:stylesheet>"""
expected_8 = """<?xml version="1.0" encoding="UTF-8"?> <result> <species>/1/1/1/1/1/1/1/1 Sapiens</species> <species>/1/1/1/1/1/1/2/1 Troglodytes</species> <species>/1/1/1/1/1/1/3/1 Paniscus</species> <species>/1/1/1/1/1/1/4/1 Gorilla</species> <species>/1/1/1/1/2/1/1/1 Catus</species> <species>/1/1/1/1/2/1/2/1 Pardus</species> <species>/1/1/1/1/2/1/3/1 Tigris</species> <species>/1/1/1/1/2/1/4/1 Leo</species> <species>/1/1/1/1/2/2/1/1 Familiaris</species> <species>/1/1/1/1/2/2/2/1 Lupus</species> <species>/1/1/1/1/2/2/3/1 Vulpes</species> </result>"""
def Test(tester):
tester.startGroup('xsl:sort and xsl:number')
source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_1) test_harness.XsltTest(tester, source, [sheet], expected_1, title='xsl:sort and xsl:number in combination')
source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_2) test_harness.XsltTest(tester, source, [sheet], expected_2, title='xsl:sort 1')
source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_3) test_harness.XsltTest(tester, source, [sheet], expected_3, title='xsl:sort 2')
source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_4) test_harness.XsltTest(tester, source, [sheet], expected_4, title='xsl:sort 3')
source = test_harness.FileInfo(string=source_2) sheet = test_harness.FileInfo(string=sheet_5) test_harness.XsltTest(tester, source, [sheet], expected_5, title='xsl:number 1')
source = test_harness.FileInfo(string=source_2) sheet = test_harness.FileInfo(string=sheet_6) test_harness.XsltTest(tester, source, [sheet], expected_6, title='xsl:number 2')
# From http://bugs.4suite.org/225186 source = test_harness.FileInfo(string=source_3) sheet = test_harness.FileInfo(string=sheet_7) test_harness.XsltTest(tester, source, [sheet], expected_7, title='xsl:number 3')
source = test_harness.FileInfo(string=source_2) sheet = test_harness.FileInfo(string=sheet_8) test_harness.XsltTest(tester, source, [sheet], expected_8, title='xsl:number 4')
tester.groupDone() return
|