From 30248645f9d8a60536b5810b1d8e3aee1b63cdc5 Mon Sep 17 00:00:00 2001 From: Kwak Byoung Min Date: Tue, 16 Jun 2026 12:04:58 +0900 Subject: [PATCH] gh-151526: Add csv writer tests for quote style edge cases --- Lib/test/test_csv.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 7327c1bd5f50530..d0d814293b306d3 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -49,8 +49,9 @@ def _test_arg_valid(self, ctor, arg): self.assertRaises(TypeError, ctor, arg, quoting=None) self.assertRaises(TypeError, ctor, arg, quoting=csv.QUOTE_ALL, quotechar='') - self.assertRaises(TypeError, ctor, arg, - quoting=csv.QUOTE_ALL, quotechar=None) + for quoting in csv.QUOTE_ALL, csv.QUOTE_STRINGS, csv.QUOTE_NOTNULL: + self.assertRaises(TypeError, ctor, arg, + quoting=quoting, quotechar=None) self.assertRaises(TypeError, ctor, arg, quoting=csv.QUOTE_NONE, quotechar='') self.assertRaises(ValueError, ctor, arg, delimiter='\n') @@ -259,6 +260,22 @@ def test_write_escape(self): self._write_test(['C\\', '6', '7', 'X"'], 'C\\\\,6,7,"X"""', escapechar='\\', quoting=csv.QUOTE_MINIMAL) + def test_write_quote_styles_escape(self): + self._write_test(['a"b', 'x\\y', 1, None], + '"a""b","x\\\\y",1,', + quoting=csv.QUOTE_STRINGS, escapechar='\\') + self._write_test(['a"b', 'x\\y', 1, None], + '"a\\"b","x\\\\y",1,', + quoting=csv.QUOTE_STRINGS, escapechar='\\', + doublequote=False) + self._write_test(['a"b', 'x\\y', 1, None], + '"a""b","x\\\\y","1",', + quoting=csv.QUOTE_NOTNULL, escapechar='\\') + self._write_test(['a"b', 'x\\y', 1, None], + '"a\\"b","x\\\\y","1",', + quoting=csv.QUOTE_NOTNULL, escapechar='\\', + doublequote=False) + def test_write_lineterminator(self): for lineterminator in '\r\n', '\n', '\r', '!@#', '\0': with self.subTest(lineterminator=lineterminator):