File: af_20000919.py

package info (click to toggle)
qm 1.1.3-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 8,628 kB
  • ctags: 10,249
  • sloc: python: 41,482; ansic: 20,611; xml: 12,837; sh: 485; makefile: 226
file content (172 lines) | stat: -rw-r--r-- 6,637 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
import cStringIO
from xml.dom import DOMException
from xml.dom import NAMESPACE_ERR
from xml.dom.ext import Print, PrettyPrint
from xml.dom.ext.reader import Sax2

def GetExceptionName(code):
    import types
    from xml import dom
    for (name,value) in vars(dom).items():
        if (type(value) == types.IntType and value == code):
            return name

source_1 = """<?xml version = "1.0"?>
<!DOCTYPE ADDRBOOK SYSTEM "addr_book.dtd">
<ADDRBOOK xmlns:xlink="http://www.w3.org/XML/XLink/0.9">
        <ENTRY ID="pa">
                <NAME>Pieter Aaron</NAME>
                <ADDRESS>404 Error Way</ADDRESS>
                <PHONENUM DESC="Work">404-555-1234</PHONENUM>
                <PHONENUM DESC="Fax">404-555-4321</PHONENUM>
                <PHONENUM DESC="Pager">404-555-5555</PHONENUM>
                <EMAIL>pieter.aaron@inter.net</EMAIL>
        </ENTRY>
        <ENTRY-LINK xlink:link="simple" xlink:href="addr_book2.xml"/>
        <ENTRY ID="en">
                <NAME>Emeka Ndubuisi</NAME>
                <ADDRESS>42 Spam Blvd</ADDRESS>
                <PHONENUM DESC="Work">767-555-7676</PHONENUM>
                <PHONENUM DESC="Fax">767-555-7642</PHONENUM>
                <PHONENUM DESC="Pager">800-SKY-PAGEx767676</PHONENUM>
                <EMAIL>endubuisi@spamtron.com</EMAIL>
        </ENTRY>
        <ENTRY ID="vz">
                <NAME>Vasia Zhugenev</NAME>
                <ADDRESS>2000 Disaster Plaza</ADDRESS>
                <PHONENUM DESC="Work">000-987-6543</PHONENUM>
                <PHONENUM DESC="Cell">000-000-0000</PHONENUM>
                <EMAIL>vxz@magog.ru</EMAIL>
        </ENTRY>
</ADDRBOOK>"""
        
expected_1 = """<doc><elt xmlns:spam='http://logilab' spam:att='value1'/></doc>"""

expected_2 = """<doc>
  <elt xmlns:spam='http://logilab' spam:att='value1'/>
</doc>
"""

expected_3 = """
        <ENTRY ID='pa'>
                <NAME>Pieter Aaron</NAME>
                <ADDRESS>404 Error Way</ADDRESS>
                <PHONENUM DESC='Work'>404-555-1234</PHONENUM>
                <PHONENUM DESC='Fax'>404-555-4321</PHONENUM>
                <PHONENUM DESC='Pager'>404-555-5555</PHONENUM>
                <EMAIL>pieter.aaron@inter.net</EMAIL>
        </ENTRY>
        <ENTRY-LINK xmlns:xlink='http://www.w3.org/XML/XLink/0.9' xlink:href='addr_book2.xml' xlink:link='simple'/>
        <ENTRY ID='en'>
                <NAME>Emeka Ndubuisi</NAME>
                <ADDRESS>42 Spam Blvd</ADDRESS>
                <PHONENUM DESC='Work'>767-555-7676</PHONENUM>
                <PHONENUM DESC='Fax'>767-555-7642</PHONENUM>
                <PHONENUM DESC='Pager'>800-SKY-PAGEx767676</PHONENUM>
                <EMAIL>endubuisi@spamtron.com</EMAIL>
        </ENTRY>
        <ENTRY ID='vz'>
                <NAME>Vasia Zhugenev</NAME>
                <ADDRESS>2000 Disaster Plaza</ADDRESS>
                <PHONENUM DESC='Work'>000-987-6543</PHONENUM>
                <PHONENUM DESC='Cell'>000-000-0000</PHONENUM>
                <EMAIL>vxz@magog.ru</EMAIL>
        </ENTRY>

"""

expected_4 = """<!DOCTYPE ADDRBOOK SYSTEM "addr_book.dtd" ><ADDRBOOK xmlns:xlink='http://www.w3.org/XML/XLink/0.9'>
        <ENTRY ID='pa'>
                <NAME>Pieter Aaron</NAME>
                <ADDRESS>404 Error Way</ADDRESS>
                <PHONENUM DESC='Work'>404-555-1234</PHONENUM>
                <PHONENUM DESC='Fax'>404-555-4321</PHONENUM>
                <PHONENUM DESC='Pager'>404-555-5555</PHONENUM>
                <EMAIL>pieter.aaron@inter.net</EMAIL>
        </ENTRY>
        <ENTRY-LINK xlink:href='addr_book2.xml' xlink:link='simple'/>
        <ENTRY ID='en'>
                <NAME>Emeka Ndubuisi</NAME>
                <ADDRESS>42 Spam Blvd</ADDRESS>
                <PHONENUM DESC='Work'>767-555-7676</PHONENUM>
                <PHONENUM DESC='Fax'>767-555-7642</PHONENUM>
                <PHONENUM DESC='Pager'>800-SKY-PAGEx767676</PHONENUM>
                <EMAIL>endubuisi@spamtron.com</EMAIL>
        </ENTRY>
        <ENTRY ID='vz'>
                <NAME>Vasia Zhugenev</NAME>
                <ADDRESS>2000 Disaster Plaza</ADDRESS>
                <PHONENUM DESC='Work'>000-987-6543</PHONENUM>
                <PHONENUM DESC='Cell'>000-000-0000</PHONENUM>
                <EMAIL>vxz@magog.ru</EMAIL>
        </ENTRY>
</ADDRBOOK>
"""

        
def Test(tester):

    tester.startGroup("Alexander Fayolle's Problems and variations")

    tester.startTest('Bad setAttNS test')
    d=Sax2.FromXml('<doc/>')
    e = d.createElementNS('', 'elt')
    d.documentElement.appendChild(e)
    try:
        e.setAttributeNS('http://logilab', 'att', 'value1')
    except DOMException, x:
        if x.code != NAMESPACE_ERR:
            name = getExceptionName(x.code)
            tester.error("Wrong exception '%s', expected NAMESPACE_ERR" % name)
    else:
        tester.error('setAttributeNS with no prefix and non-null URI doesn\'t raise exception.')
    e.setAttributeNS('http://logilab', 'spam:att', 'value1')
    stream = cStringIO.StringIO()
    Print(d, stream=stream)
    result = stream.getvalue()
    if result != expected_1:
        tester.error('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_1), repr(result)))

    stream = cStringIO.StringIO()
    PrettyPrint(d, stream=stream)
    result = stream.getvalue()
    if result != expected_2:
        tester.error('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_2), repr(result)))
    tester.testDone()

    tester.startTest('Document Fragment Printing')
    d = Sax2.FromXml(source_1)
    df = d.createDocumentFragment()
    for n in d.documentElement.childNodes:
        df.appendChild(n.cloneNode(1))
    if len(df.childNodes) != len(d.documentElement.childNodes):
        tester.error('Docfrag append error')
    if df.childNodes.length != d.documentElement.childNodes.length:
        tester.error('Docfrag append error')
    stream = cStringIO.StringIO()
    PrettyPrint(df, stream=stream)
    result = stream.getvalue()
    if result != expected_3:
        raise Exception('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_3), repr(result)))
    tester.testDone()

    tester.startTest('Document Type Printing')
    d = Sax2.FromXml(source_1)
    d.doctype.__dict__['__systemId'] = "addr_book.dtd"
    stream = cStringIO.StringIO()
    PrettyPrint(d, stream=stream)
    result = stream.getvalue()
    if result != expected_4:
        raise Exception('Expected\n"""%s"""\ngot\n"""%s"""'%(repr(expected_4), repr(result)))
    tester.testDone()

    return tester.groupDone()


if __name__ == '__main__':
    import sys
    import TestSuite

    tester = TestSuite.TestSuite()
    retVal = Test(tester)
    sys.exit(retVal)