Changeset 572


Ignore:
Timestamp:
Nov 21, 2015, 11:19:59 AM (4 years ago)
Author:
cito
Message:

Get the classic_functions tests running in Py 2/3

Location:
trunk/module
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/module/TEST_PyGreSQL_classic_functions.py

    r571 r572  
    1818    import unittest
    1919
     20import re
     21
     22import pg  # the module under test
     23
    2024try:
    2125    long
     
    2327    long = int
    2428
    25 import re
    26 
    27 import pg  # the module under test
     29unicode_strings = str is not bytes
    2830
    2931
     
    265267    def testEscapeString(self):
    266268        f = pg.escape_string
    267         self.assertEqual(f('plain'), 'plain')
    268         self.assertEqual(f("that's k\xe4se"), "that''s k\xe4se")
    269         self.assertEqual(f(r"It's fine to have a \ inside."),
    270             r"It''s fine to have a \\ inside.")
     269        r = f('plain')
     270        self.assertIsInstance(r, str)
     271        self.assertEqual(r, 'plain')
     272        if unicode_strings:
     273            r = f(b'plain')
     274            self.assertIsInstance(r, str)
     275            self.assertEqual(r, 'plain')
     276        r = f("das is' kÀse")
     277        self.assertIsInstance(r, str)
     278        self.assertEqual(r, "das is'' kÀse")
     279        if unicode_strings:
     280            r = f("das is' kÀse".encode('utf-8'))
     281            self.assertIsInstance(r, str)
     282            self.assertEqual(r, "das is'' kÀse")
     283        r = f(r"It's fine to have a \ inside.")
     284        self.assertEqual(r, r"It''s fine to have a \\ inside.")
    271285
    272286    def testEscapeBytea(self):
    273287        f = pg.escape_bytea
    274         self.assertEqual(f('plain'), 'plain')
    275         self.assertEqual(f("that's k\xe4se"), "that''s k\\\\344se")
    276         self.assertEqual(f('O\x00ps\xff!'), r'O\\000ps\\377!')
     288        r = f('plain')
     289        self.assertIsInstance(r, str)
     290        self.assertEqual(r, 'plain')
     291        if unicode_strings:
     292            r = f(b'plain')
     293            self.assertIsInstance(r, str)
     294            self.assertEqual(r, 'plain')
     295        r = f("das is' kÀse")
     296        self.assertIsInstance(r, str)
     297        self.assertEqual(r, r"das is'' k\\303\\244se")
     298        if unicode_strings:
     299            r = f("das is' kÀse".encode('utf-8'))
     300            self.assertIsInstance(r, str)
     301            self.assertEqual(r, r"das is'' k\\303\\244se")
     302        r = f(b'O\x00ps\xff!')
     303        self.assertEqual(r, r'O\\000ps\\377!')
    277304
    278305    def testUnescapeBytea(self):
    279306        f = pg.unescape_bytea
    280         self.assertEqual(f('plain'), 'plain')
    281         self.assertEqual(f("that's k\\344se"), "that's k\xe4se")
    282         self.assertEqual(f(r'O\000ps\377!'), 'O\x00ps\xff!')
     307        r = f('plain')
     308        self.assertIsInstance(r, str)
     309        self.assertEqual(r, 'plain')
     310        if unicode_strings:
     311            r = f(b'plain')
     312            self.assertIsInstance(r, str)
     313            self.assertEqual(r, 'plain')
     314        r = f(r"das is' k\303\244se")
     315        self.assertIsInstance(r, str)
     316        self.assertEqual(r, "das is' kÀse")
     317        if unicode_strings:
     318            r = f(u"das is' k\\303\\244se")
     319            self.assertIsInstance(r, str)
     320            self.assertEqual(r, "das is' kÀse")
     321        r = f(r'O\\000ps\\377!')
     322        self.assertEqual(r, r'O\000ps\377!')
    283323
    284324
  • trunk/module/pgmodule.c

    r566 r572  
    37173717        unsigned char *from; /* our string argument */
    37183718        unsigned char *to; /* the result */
     3719        int from_length; /* length of string */
    37193720        size_t to_length; /* length of result string */
    37203721        PyObject *ret; /* string object to return */
    37213722
    3722         if (!PyArg_ParseTuple(args, "s", &from))
     3723        if (!PyArg_ParseTuple(args, "s#", &from, &from_length))
    37233724                return NULL;
    37243725        to = PQunescapeBytea(from, &to_length);
     3726        if (!to)
     3727            return NULL;
    37253728        ret = Py_BuildValue("s#", to, (int)to_length);
    37263729        if (to)
    3727                 PQfreemem((void *)to);
     3730            PQfreemem((void *)to);
    37283731        if (!ret) /* pass on exception */
    37293732                return NULL;
Note: See TracChangeset for help on using the changeset viewer.