diff -r 71a1f53c8203 -r 0eb420ce6567 Lib/test/test_csv.py --- a/Lib/test/test_csv.py Wed Jul 06 07:31:38 2011 +0200 +++ b/Lib/test/test_csv.py Wed Jul 06 23:02:13 2011 +0200 @@ -124,6 +124,12 @@ self.assertEqual(fileobj.read(), expect + writer.dialect.lineterminator) + def _write_test_vary_doublequote(self, fields, expect, **kwargs): + kwargs.update(doublequote=True) + self._write_test(fields, expect, **kwargs) + kwargs.update(doublequote=False) + self._write_test(fields, expect, **kwargs) + def test_write_arg_valid(self): self.assertRaises(csv.Error, self._write_test, None, '') self._write_test((), '') @@ -183,6 +189,48 @@ self._write_test(['a',1,'p,q'], 'a,1,p\\,q', escapechar='\\', quoting = csv.QUOTE_NONE) + def test_write_escape_escapechar(self): + dialect_qminimal = dict(escapechar = '/', + quoting = csv.QUOTE_MINIMAL) + + dialect_qnone = dict(escapechar = '/', + quoting = csv.QUOTE_NONE) + + dialect_qall = dict(escapechar = '/', + quoting = csv.QUOTE_ALL) + + fields = ['a/',1] + self._write_test_vary_doublequote(fields, '"a//",1', + **dialect_qminimal) + self._write_test_vary_doublequote(fields, 'a//,1', + **dialect_qnone) + self._write_test_vary_doublequote(fields, '"a//","1"', + **dialect_qall) + + fields = ['a/b',1] + self._write_test_vary_doublequote(fields, '"a//b",1', + **dialect_qminimal) + self._write_test_vary_doublequote(fields, 'a//b,1', + **dialect_qnone) + self._write_test_vary_doublequote(fields, '"a//b","1"', + **dialect_qall) + + fields = ['/',2] + self._write_test_vary_doublequote(fields, '"//",2', + **dialect_qminimal) + self._write_test_vary_doublequote(fields, '//,2', + **dialect_qnone) + self._write_test_vary_doublequote(fields, '"//","2"', + **dialect_qall) + + fields = ['a',1,'p/q'] + self._write_test_vary_doublequote(fields, 'a,1,"p//q"', + **dialect_qminimal) + self._write_test_vary_doublequote(fields, 'a,1,p//q', + **dialect_qnone) + self._write_test_vary_doublequote(fields, '"a","1","p//q"', + **dialect_qall) + def test_writerows(self): class BrokenFile: def write(self, buf): diff -r 71a1f53c8203 -r 0eb420ce6567 Modules/_csv.c --- a/Modules/_csv.c Wed Jul 06 07:31:38 2011 +0200 +++ b/Modules/_csv.c Wed Jul 06 23:02:13 2011 +0200 @@ -996,8 +996,11 @@ else want_escape = 1; } - if (!want_escape) + if (!want_escape) { *quoted = 1; + if (c == dialect->escapechar) + want_escape = 1; + } } if (want_escape) { if (!dialect->escapechar) {