From 2ed04f0177369cae2088141fe72447801bd7e0c9 Mon Sep 17 00:00:00 2001 From: durawat <123456+durawat@users.noreply.github.com> Date: Fri, 24 Apr 2026 22:02:44 -0400 Subject: [PATCH] Co-authored-by: Copilot --- Lib/test/test_xml_etree.py | 23 +++++++++++++++++++++-- Lib/xml/etree/ElementTree.py | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) 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