Test moved to the right module, cleanup, but same problem

This commit is contained in:
Daniele Varrazzo 2016-07-01 16:57:25 +01:00
parent bada1f1f8e
commit 2e8e61b8d4
4 changed files with 43 additions and 46 deletions

View File

@ -87,8 +87,7 @@ qstring_quote(qstringObject *self)
/* if the wrapped object is not a string, this is an error */ /* if the wrapped object is not a string, this is an error */
else { else {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError, "can't quote non-string object");
"can't quote non-string object (or missing encoding)");
goto exit; goto exit;
} }

View File

@ -29,6 +29,7 @@ import psycopg2
import psycopg2.extensions import psycopg2.extensions
from psycopg2.extensions import b from psycopg2.extensions import b
class QuotingTestCase(ConnectingTestCase): class QuotingTestCase(ConnectingTestCase):
r"""Checks the correct quoting of strings and binary objects. r"""Checks the correct quoting of strings and binary objects.
@ -51,7 +52,7 @@ class QuotingTestCase(ConnectingTestCase):
data = """some data with \t chars data = """some data with \t chars
to escape into, 'quotes' and \\ a backslash too. to escape into, 'quotes' and \\ a backslash too.
""" """
data += "".join(map(chr, range(1,127))) data += "".join(map(chr, range(1, 127)))
curs = self.conn.cursor() curs = self.conn.cursor()
curs.execute("SELECT %s;", (data,)) curs.execute("SELECT %s;", (data,))
@ -90,13 +91,13 @@ class QuotingTestCase(ConnectingTestCase):
if server_encoding != "UTF8": if server_encoding != "UTF8":
return self.skipTest( return self.skipTest(
"Unicode test skipped since server encoding is %s" "Unicode test skipped since server encoding is %s"
% server_encoding) % server_encoding)
data = u"""some data with \t chars data = u"""some data with \t chars
to escape into, 'quotes', \u20ac euro sign and \\ a backslash too. to escape into, 'quotes', \u20ac euro sign and \\ a backslash too.
""" """
data += u"".join(map(unichr, [ u for u in range(1,65536) data += u"".join(map(unichr, [u for u in range(1, 65536)
if not 0xD800 <= u <= 0xDFFF ])) # surrogate area if not 0xD800 <= u <= 0xDFFF])) # surrogate area
self.conn.set_client_encoding('UNICODE') self.conn.set_client_encoding('UNICODE')
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE, self.conn) psycopg2.extensions.register_type(psycopg2.extensions.UNICODE, self.conn)
@ -183,9 +184,45 @@ class TestQuotedIdentifier(ConnectingTestCase):
self.assertEqual(quote_ident(snowman, self.conn), quoted) self.assertEqual(quote_ident(snowman, self.conn), quoted)
class TestStringAdapter(ConnectingTestCase):
def test_encoding_default(self):
from psycopg2.extensions import adapt
a = adapt("hello")
self.assertEqual(a.encoding, 'latin1')
self.assertEqual(a.getquoted(), "'hello'")
egrave = u'\xe8'
self.assertEqual(adapt(egrave).getquoted(), "'\xe8'")
def test_encoding_error(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
self.assertRaises(UnicodeEncodeError, a.getquoted)
def test_set_encoding(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
a.encoding = 'utf8'
self.assertEqual(a.encoding, 'utf8')
self.assertEqual(a.getquoted(), "'\xe2\x98\x83'")
def test_connection_wins_anyway(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
a.encoding = 'latin9'
self.conn.set_client_encoding('utf8')
a.prepare(self.conn)
self.assertEqual(a.encoding, 'utf_8')
self.assertEqual(a.getquoted(), "'\xe2\x98\x83'")
def test_suite(): def test_suite():
return unittest.TestLoader().loadTestsFromName(__name__) return unittest.TestLoader().loadTestsFromName(__name__)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -344,43 +344,6 @@ class TypesBasicTests(ConnectingTestCase):
self.assertEqual(a, [2,4,'nada']) self.assertEqual(a, [2,4,'nada'])
class TestStringAdapter(ConnectingTestCase):
def test_encoding_default(self):
from psycopg2.extensions import adapt
a = adapt("hello")
self.assertEqual(a.encoding, 'latin1')
self.assertEqual(a.getquoted(), "'hello'")
egrave = u'\xe8'
self.assertEqual(adapt(egrave).getquoted(), "'\xe8'")
def test_encoding_error(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
self.assertRaises(UnicodeEncodeError, a.getquoted)
def test_set_encoding(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
a.encoding = 'utf8'
self.assertEqual(a.encoding, 'utf8')
self.assertEqual(a.getquoted(), "'\xe2\x98\x83'")
def test_connection_wins_anyway(self):
from psycopg2.extensions import adapt
snowman = u"\u2603"
a = adapt(snowman)
a.encoding = 'latin9'
self.conn.set_client_encoding('utf8')
a.prepare(self.conn)
self.assertEqual(a.encoding, 'utf_8')
self.assertEqual(a.getquoted(), "'\xe2\x98\x83'")
class AdaptSubclassTest(unittest.TestCase): class AdaptSubclassTest(unittest.TestCase):
def test_adapt_subtype(self): def test_adapt_subtype(self):
from psycopg2.extensions import adapt from psycopg2.extensions import adapt

View File

@ -34,5 +34,3 @@ if dbuser is not None:
dsn += ' user=%s' % dbuser dsn += ' user=%s' % dbuser
if dbpass is not None: if dbpass is not None:
dsn += ' password=%s' % dbpass dsn += ' password=%s' % dbpass