Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions Lib/test/test_xml_etree.py
Original file line number Diff line number Diff line change
Expand Up @@ -4312,9 +4312,9 @@ def test_write_to_filename_with_encoding(self):

tree.write(TESTFN, encoding='ISO-8859-1')
with open(TESTFN, 'rb') as f:
self.assertEqual(f.read(), convlinesep(
self.assertEqual(f.read(),
b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n'''
b'''<site>\xf8</site>'''))
b'''<site>\xf8</site>''')

def test_write_to_filename_as_unicode(self):
self.addCleanup(os_helper.unlink, TESTFN)
Expand Down Expand Up @@ -4357,6 +4357,25 @@ def test_write_to_binary_file(self):
with open(TESTFN, 'rb') as f:
self.assertEqual(f.read(), b'''<site>&#248;</site>''')

def test_write_with_and_without_context_manager_same_output(self):
self.addCleanup(os_helper.unlink, TESTFN)
testfn2 = TESTFN + '2'
self.addCleanup(os_helper.unlink, testfn2)

tree = ET.ElementTree(ET.XML('''<site>\x0a</site>'''))
tree.write(TESTFN, encoding='utf-8')
with open(TESTFN, 'rb') as f:
output_without_context_manager = f.read()

with open(testfn2, 'wb') as f:
tree.write(f, encoding='utf-8')
self.assertFalse(f.closed)
with open(testfn2, 'rb') as f:
output_with_context_manager = f.read()

self.assertEqual(output_without_context_manager,
output_with_context_manager)

def test_write_to_binary_file_with_encoding(self):
self.addCleanup(os_helper.unlink, TESTFN)
tree = ET.ElementTree(ET.XML('''<site>\xf8</site>'''))
Expand Down
2 changes: 1 addition & 1 deletion Lib/xml/etree/ElementTree.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,7 +756,7 @@ def _get_writer(file_or_filename, encoding):
if encoding.lower() == "unicode":
encoding="utf-8"
with open(file_or_filename, "w", encoding=encoding,
errors="xmlcharrefreplace") as file:
errors="xmlcharrefreplace", newline="\n") as file:
yield file.write, encoding
else:
# file_or_filename is a file-like object
Expand Down
Loading