summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-10-10 20:12:25 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-10-10 20:12:25 -0400
commitd2410df9cab8fb1bff8828e45541aff2c553dfe1 (patch)
tree072e41c53d29f6f91dec8eaf3872e97e72bf82af /lib/sqlalchemy/testing
parent084b559b44bba73becc7e7fa7636d4c5ac99bb55 (diff)
downloadsqlalchemy-d2410df9cab8fb1bff8828e45541aff2c553dfe1.tar.gz
- create new sqlalchemy.testing.suite.test_types, starting with Unicode round trip tests.
- clean out existing test_types:UnicodeTest to be strictly individual unit tests against Unicode(), String(), etc. with no database access.
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r--lib/sqlalchemy/testing/requirements.py15
-rw-r--r--lib/sqlalchemy/testing/suite/__init__.py1
-rw-r--r--lib/sqlalchemy/testing/suite/test_types.py94
3 files changed, 110 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py
index bdd619bad..9681750b2 100644
--- a/lib/sqlalchemy/testing/requirements.py
+++ b/lib/sqlalchemy/testing/requirements.py
@@ -168,3 +168,18 @@ class SuiteRequirements(Requirements):
"""Target database must support VARCHAR with no length"""
return exclusions.open()
+
+ @property
+ def unicode_data(self):
+ """Target database/dialect must support Python unicode objects with
+ non-ASCII characters represented, delivered as bound parameters
+ as well as in result rows.
+
+ """
+ return exclusions.open()
+
+ @property
+ def empty_strings(self):
+ """target database can persist/return an empty string."""
+
+ return exclusions.open()
diff --git a/lib/sqlalchemy/testing/suite/__init__.py b/lib/sqlalchemy/testing/suite/__init__.py
index 28b48bea5..bb0465c9e 100644
--- a/lib/sqlalchemy/testing/suite/__init__.py
+++ b/lib/sqlalchemy/testing/suite/__init__.py
@@ -3,3 +3,4 @@ from sqlalchemy.testing.suite.test_ddl import *
from sqlalchemy.testing.suite.test_insert import *
from sqlalchemy.testing.suite.test_update_delete import *
from sqlalchemy.testing.suite.test_reflection import *
+from sqlalchemy.testing.suite.test_types import *
diff --git a/lib/sqlalchemy/testing/suite/test_types.py b/lib/sqlalchemy/testing/suite/test_types.py
new file mode 100644
index 000000000..4c1f57bc9
--- /dev/null
+++ b/lib/sqlalchemy/testing/suite/test_types.py
@@ -0,0 +1,94 @@
+# coding: utf-8
+
+from .. import fixtures, config
+from ..assertions import eq_
+from ..config import requirements
+from sqlalchemy import Integer, Unicode, UnicodeText, select
+from ..schema import Table, Column
+
+
+class UnicodeTest(fixtures.TablesTest):
+ __requires__ = 'unicode_data',
+
+ data = u"Alors vous imaginez ma surprise, au lever du jour, "\
+ u"quand une drôle de petite voix m’a réveillé. Elle "\
+ u"disait: « S’il vous plaît… dessine-moi un mouton! »"
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('unicode_table', metadata,
+ Column('id', Integer, primary_key=True,
+ test_needs_autoincrement=True),
+ Column('unicode_varchar', Unicode(250)),
+ Column('unicode_text', UnicodeText),
+ )
+
+ def test_round_trip(self):
+ unicode_table = self.tables.unicode_table
+
+ config.db.execute(
+ unicode_table.insert(),
+ {
+ 'unicode_varchar': self.data,
+ 'unicode_text': self.data
+ }
+ )
+
+ row = config.db.execute(
+ select([
+ unicode_table.c.unicode_varchar,
+ unicode_table.c.unicode_text
+ ])
+ ).first()
+
+ eq_(
+ row,
+ (self.data, self.data)
+ )
+ assert isinstance(row[0], unicode)
+ assert isinstance(row[1], unicode)
+
+ def test_round_trip_executemany(self):
+ unicode_table = self.tables.unicode_table
+
+ config.db.execute(
+ unicode_table.insert(),
+ [
+ {
+ 'unicode_varchar': self.data,
+ 'unicode_text': self.data
+ }
+ for i in xrange(3)
+ ]
+ )
+
+ rows = config.db.execute(
+ select([
+ unicode_table.c.unicode_varchar,
+ unicode_table.c.unicode_text
+ ])
+ ).fetchall()
+ eq_(
+ rows,
+ [(self.data, self.data) for i in xrange(3)]
+ )
+ for row in rows:
+ assert isinstance(row[0], unicode)
+ assert isinstance(row[1], unicode)
+
+
+ @requirements.empty_strings
+ def test_empty_strings(self):
+ unicode_table = self.tables.unicode_table
+
+ config.db.execute(
+ unicode_table.insert(),
+ {"unicode_varchar": u''}
+ )
+ row = config.db.execute(
+ select([unicode_table.c.unicode_varchar])
+ ).first()
+ eq_(row, (u'',))
+
+
+__all__ = ('UnicodeTest',) \ No newline at end of file