diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index 43864820688bd4..829b0813cdd61b 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -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'''\n'''
- b'''\xf8'''))
+ b'''\xf8''')
def test_write_to_filename_as_unicode(self):
self.addCleanup(os_helper.unlink, TESTFN)
@@ -4357,6 +4357,25 @@ def test_write_to_binary_file(self):
with open(TESTFN, 'rb') as f:
self.assertEqual(f.read(), b'''ø''')
+ 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('''\x0a'''))
+ 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('''\xf8'''))
diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index 85766e02b531ce..6d3b61df001c0e 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -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