Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
452196fe
Commit
452196fe
authored
Jan 05, 2011
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #5485: Add tests for the UseForeignDTD method of expat parser objects.
Patch by Jean-Paul Calderone and Sandro Tosi.
parent
a83878e6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
57 additions
and
5 deletions
+57
-5
Lib/test/test_pyexpat.py
Lib/test/test_pyexpat.py
+54
-5
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_pyexpat.py
View file @
452196fe
...
...
@@ -155,6 +155,14 @@ class ParseTest(unittest.TestCase):
'ElementDeclHandler'
,
'AttlistDeclHandler'
,
'SkippedEntityHandler'
,
]
def
_hookup_callbacks
(
self
,
parser
,
handler
):
"""
Set each of the callbacks defined on handler and named in
self.handler_names on the given parser.
"""
for
name
in
self
.
handler_names
:
setattr
(
parser
,
name
,
getattr
(
handler
,
name
))
def
_verify_parse_output
(
self
,
operations
):
expected_operations
=
[
(
'XML declaration'
,
(
'1.0'
,
'iso-8859-1'
,
0
)),
...
...
@@ -196,8 +204,7 @@ class ParseTest(unittest.TestCase):
# Try the parse again, this time producing Unicode output
out
=
self
.
Outputter
()
parser
=
expat
.
ParserCreate
(
namespace_separator
=
'!'
)
for
name
in
self
.
handler_names
:
setattr
(
parser
,
name
,
getattr
(
out
,
name
))
self
.
_hookup_callbacks
(
parser
,
out
)
parser
.
Parse
(
data
,
1
)
...
...
@@ -210,8 +217,7 @@ class ParseTest(unittest.TestCase):
# Try parsing a file
out
=
self
.
Outputter
()
parser
=
expat
.
ParserCreate
(
namespace_separator
=
'!'
)
for
name
in
self
.
handler_names
:
setattr
(
parser
,
name
,
getattr
(
out
,
name
))
self
.
_hookup_callbacks
(
parser
,
out
)
file
=
BytesIO
(
data
)
parser
.
ParseFile
(
file
)
...
...
@@ -613,6 +619,48 @@ class ErrorMessageTest(unittest.TestCase):
errors
.
codes
[
errors
.
XML_ERROR_UNCLOSED_TOKEN
])
class
ForeignDTDTests
(
unittest
.
TestCase
):
"""
Tests for the UseForeignDTD method of expat parser objects.
"""
def
test_use_foreign_dtd
(
self
):
"""
If UseForeignDTD is passed True and a document without an external
entity reference is parsed, ExternalEntityRefHandler is first called
with None for the public and system ids.
"""
handler_call_args
=
[]
def
resolve_entity
(
context
,
base
,
system_id
,
public_id
):
handler_call_args
.
append
((
public_id
,
system_id
))
return
1
parser
=
expat
.
ParserCreate
()
parser
.
UseForeignDTD
(
True
)
parser
.
SetParamEntityParsing
(
expat
.
XML_PARAM_ENTITY_PARSING_ALWAYS
)
parser
.
ExternalEntityRefHandler
=
resolve_entity
parser
.
Parse
(
"<?xml version='1.0'?><element/>"
)
self
.
assertEqual
(
handler_call_args
,
[(
None
,
None
)])
def
test_ignore_use_foreign_dtd
(
self
):
"""
If UseForeignDTD is passed True and a document with an external
entity reference is parsed, ExternalEntityRefHandler is called with
the public and system ids from the document.
"""
handler_call_args
=
[]
def
resolve_entity
(
context
,
base
,
system_id
,
public_id
):
handler_call_args
.
append
((
public_id
,
system_id
))
return
1
parser
=
expat
.
ParserCreate
()
parser
.
UseForeignDTD
(
True
)
parser
.
SetParamEntityParsing
(
expat
.
XML_PARAM_ENTITY_PARSING_ALWAYS
)
parser
.
ExternalEntityRefHandler
=
resolve_entity
parser
.
Parse
(
"<?xml version='1.0'?><!DOCTYPE foo PUBLIC 'bar' 'baz'><element/>"
)
self
.
assertEqual
(
handler_call_args
,
[(
"bar"
,
"baz"
)])
def
test_main
():
run_unittest
(
SetAttributeTest
,
ParseTest
,
...
...
@@ -624,7 +672,8 @@ def test_main():
sf1296433Test
,
ChardataBufferTest
,
MalformedInputTest
,
ErrorMessageTest
)
ErrorMessageTest
,
ForeignDTDTests
)
if
__name__
==
"__main__"
:
test_main
()
Misc/NEWS
View file @
452196fe
...
...
@@ -153,6 +153,9 @@ Tools/Demos
Tests
-----
- Issue #5485: Add tests for the UseForeignDTD method of expat parser objects.
Patch by Jean-Paul Calderone and Sandro Tosi.
- Issue #6293: Have regrtest.py echo back sys.flags. This is done by default
in whole runs and enabled selectively using ``--header`` when running an
explicit list of tests. Original patch by Collin Winter.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment