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
PyGreSQL@Vex.Net
https://mail.vex.net/mailman/listinfo.cgi/pygresql

Reply via email to