Author: cito
Date: Wed Oct 31 14:42:47 2012
New Revision: 456
Log:
Make test_pg less locale dependent.
Modified:
trunk/module/test_pg.py
Modified: trunk/module/test_pg.py
==============================================================================
--- trunk/module/test_pg.py Wed Oct 31 09:35:56 2012 (r455)
+++ trunk/module/test_pg.py Wed Oct 31 14:42:47 2012 (r456)
@@ -15,34 +15,30 @@
There are a few drawbacks:
* A local PostgreSQL database must be up and running, and
the database user who is running the tests must be a trusted superuser.
+ * The PostgreSQL database cluster must have been created with UTF-8 encoding.
* The performance of the API is not tested.
* Connecting to a remote host is not tested.
* Passing user, password and options is not tested.
* Table privilege problems (e.g. insert but no select) are not tested.
* Status and error messages from the connection are not tested.
* It would be more reasonable to create a test for the underlying
- shared library functions in the _pg module and assume they are ok.
+ shared library functions in the _pg module and assume they are ok.vi
The pg and pgdb modules should be tested against _pg mock functions.
"""
import pg
import unittest
+import locale
debug = False
-# Try to load German locale for umlaut tests
-german = True
-try:
- import locale
- locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
-except Exception:
- try:
- locale.setlocale(locale.LC_ALL, 'german')
- except Exception:
- import warnings
- warnings.warn('Cannot set German locale.')
- german = False
+locale.setlocale(locale.LC_ALL, '')
+encoding = locale.getlocale()[1] or 'utf-8'
+if encoding.lower() == 'utf-8':
+ recode = lambda s: s
+else:
+ recode = lambda s: s.decode('utf-8').encode(encoding)
try:
frozenset
@@ -108,15 +104,16 @@
self.assert_(not f('ab0'))
self.assert_(not f('abc'))
self.assert_(not f('abc'))
- if german:
- self.assert_(not f('\xe4'))
- self.assert_(f('\xc4'))
- self.assert_(not f('k\xe4se'))
- self.assert_(f('K\xe4se'))
- self.assert_(not f('emmentaler_k\xe4se'))
- self.assert_(f('emmentaler k\xe4se'))
- self.assert_(f('EmmentalerK\xe4se'))
- self.assert_(f('Emmentaler K\xe4se'))
+ if recode('ä').isalpha():
+ e = lambda s: f(recode(s))
+ self.assert_(not e('ä'))
+ self.assert_(e('Ä'))
+ self.assert_(not e('käse'))
+ self.assert_(e('Käse'))
+ self.assert_(not e('emmentaler_käse'))
+ self.assert_(e('emmentaler käse'))
+ self.assert_(e('EmmentalerKäse'))
+ self.assert_(e('Emmentaler Käse'))
def testIsUnquoted(self):
f = pg._is_unquoted
@@ -142,14 +139,16 @@
self.assert_(f('ab'))
self.assert_(f('ab0'))
self.assert_(f('abc'))
- self.assert_(f('\xe4'))
- self.assert_(f('\xc4'))
- self.assert_(f('k\xe4se'))
- self.assert_(f('K\xe4se'))
- self.assert_(f('emmentaler_k\xe4se'))
- self.assert_(not f('emmentaler k\xe4se'))
- self.assert_(f('EmmentalerK\xe4se'))
- self.assert_(not f('Emmentaler K\xe4se'))
+ if recode('ä').isalpha():
+ e = lambda s: f(recode(s))
+ self.assert_(e('ä'))
+ self.assert_(e('Ä'))
+ self.assert_(e('käse'))
+ self.assert_(e('Käse'))
+ self.assert_(e('emmentaler_käse'))
+ self.assert_(not e('emmentaler käse'))
+ self.assert_(e('EmmentalerKäse'))
+ self.assert_(not e('Emmentaler Käse'))
def testSplitFirstPart(self):
f = pg._split_first_part
@@ -918,7 +917,10 @@
received = {}
def notice_receiver(notice):
for attr in dir(notice):
- received[attr] = getattr(notice, attr)
+ value = getattr(notice, attr)
+ if isinstance(value, str):
+ value = value.replace('WARNUNG', 'WARNING')
+ received[attr] = value
c.set_notice_receiver(notice_receiver)
c.query('''select bilbo_notice()''')
self.assertEqual(received, dict(
@@ -1818,10 +1820,9 @@
except pg.Error:
pass
c.query("create database " + dbname
- + " template=template0")
+ + " template=template0 encoding='UTF8'")
for s in ('client_min_messages = warning',
'client_encoding = UTF8',
- 'lc_messages = C',
'date_style = ISO, MDY',
'default_with_oids = on',
'standard_conforming_strings = off',
_______________________________________________
PyGreSQL mailing list
[email protected]
https://mail.vex.net/mailman/listinfo.cgi/pygresql