Skip to content

Commit e3bb37e

Browse files
committed
Fix doctests with unicode literals on Python 3
Provide an adaptive doctests OutputChecker that replaces unicode literals with simple strings and replaces an exception name with its qualified name.
1 parent 3166f70 commit e3bb37e

File tree

7 files changed

+23
-13
lines changed

7 files changed

+23
-13
lines changed

couchdb/tests/client.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
# you should have received as part of this distribution.
88

99
from datetime import datetime
10-
import doctest
1110
import os
1211
import os.path
1312
import shutil
@@ -789,7 +788,6 @@ def test_startkey(self):
789788
def test_nullkeys(self):
790789
self.assertEqual(len(list(self.db.iterview('test/nulls', 10))), self.num_docs)
791790

792-
793791
def suite():
794792
suite = unittest.TestSuite()
795793
suite.addTest(unittest.makeSuite(ServerTestCase, 'test'))
@@ -798,7 +796,7 @@ def suite():
798796
suite.addTest(unittest.makeSuite(ShowListTestCase, 'test'))
799797
suite.addTest(unittest.makeSuite(UpdateHandlerTestCase, 'test'))
800798
suite.addTest(unittest.makeSuite(ViewIterationTestCase, 'test'))
801-
suite.addTest(doctest.DocTestSuite(client))
799+
suite.addTest(testutil.doctest_suite(client))
802800
return suite
803801

804802

couchdb/tests/couchhttp.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# This software is licensed as described in the file COPYING, which
77
# you should have received as part of this distribution.
88

9-
import doctest
109
import socket
1110
import time
1211
import unittest
@@ -79,7 +78,7 @@ def test_remove_miss(self):
7978

8079
def suite():
8180
suite = unittest.TestSuite()
82-
suite.addTest(doctest.DocTestSuite(http))
81+
suite.addTest(testutil.doctest_suite(http))
8382
suite.addTest(unittest.makeSuite(SessionTestCase, 'test'))
8483
suite.addTest(unittest.makeSuite(ResponseBodyTestCase, 'test'))
8584
suite.addTest(unittest.makeSuite(CacheTestCase, 'test'))

couchdb/tests/design.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# This software is licensed as described in the file COPYING, which
77
# you should have received as part of this distribution.
88

9-
import doctest
109
import unittest
1110

1211
from couchdb import design
@@ -52,7 +51,7 @@ def test_sync_many(self):
5251
def suite():
5352
suite = unittest.TestSuite()
5453
suite.addTest(unittest.makeSuite(DesignTestCase))
55-
suite.addTest(doctest.DocTestSuite(design))
54+
suite.addTest(testutil.doctest_suite(design))
5655
return suite
5756

5857

couchdb/tests/mapping.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
# you should have received as part of this distribution.
88

99
from decimal import Decimal
10-
import doctest
1110
import unittest
1211

1312
from couchdb import design, mapping
@@ -253,7 +252,7 @@ def test_query(self):
253252

254253
def suite():
255254
suite = unittest.TestSuite()
256-
suite.addTest(doctest.DocTestSuite(mapping))
255+
suite.addTest(testutil.doctest_suite(mapping))
257256
suite.addTest(unittest.makeSuite(DocumentTestCase, 'test'))
258257
suite.addTest(unittest.makeSuite(ListFieldTestCase, 'test'))
259258
suite.addTest(unittest.makeSuite(WrappingTestCase, 'test'))

couchdb/tests/multipart.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
# This software is licensed as described in the file COPYING, which
77
# you should have received as part of this distribution.
88

9-
import doctest
109
import unittest
1110

1211
from couchdb import multipart
1312
from couchdb.util import StringIO
13+
from couchdb.tests import testutil
1414

1515
class ReadMultipartTestCase(unittest.TestCase):
1616

@@ -211,7 +211,7 @@ def test_unicode_headers(self):
211211

212212
def suite():
213213
suite = unittest.TestSuite()
214-
suite.addTest(doctest.DocTestSuite(multipart))
214+
suite.addTest(testutil.doctest_suite(multipart))
215215
suite.addTest(unittest.makeSuite(ReadMultipartTestCase, 'test'))
216216
suite.addTest(unittest.makeSuite(WriteMultipartTestCase, 'test'))
217217
return suite

couchdb/tests/testutil.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,25 @@
66
# This software is licensed as described in the file COPYING, which
77
# you should have received as part of this distribution.
88

9+
import doctest
910
import random
11+
import re
1012
import sys
13+
1114
from couchdb import client
1215

16+
class Py23DocChecker(doctest.OutputChecker):
17+
def check_output(self, want, got, optionflags):
18+
if sys.version_info[0] > 2:
19+
want = re.sub("u'(.*?)'", "'\\1'", want)
20+
want = re.sub('u"(.*?)"', '"\\1"', want)
21+
want = want.replace('ResourceConflict:',
22+
'couchdb.http.ResourceConflict:')
23+
return doctest.OutputChecker.check_output(self, want, got, optionflags)
24+
25+
def doctest_suite(mod):
26+
return doctest.DocTestSuite(mod, checker=Py23DocChecker())
27+
1328
class TempDatabaseMixin(object):
1429

1530
temp_dbs = None

couchdb/tests/view.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
# This software is licensed as described in the file COPYING, which
77
# you should have received as part of this distribution.
88

9-
import doctest
109
import unittest
1110

1211
from couchdb.util import StringIO
1312
from couchdb import view
13+
from couchdb.tests import testutil
1414

1515

1616
class ViewServerTestCase(unittest.TestCase):
@@ -105,7 +105,7 @@ def test_reduce_empty(self):
105105

106106
def suite():
107107
suite = unittest.TestSuite()
108-
suite.addTest(doctest.DocTestSuite(view))
108+
suite.addTest(testutil.doctest_suite(view))
109109
suite.addTest(unittest.makeSuite(ViewServerTestCase, 'test'))
110110
return suite
111111

0 commit comments

Comments
 (0)