diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-10-10 20:12:25 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-10-10 20:12:25 -0400 |
| commit | d2410df9cab8fb1bff8828e45541aff2c553dfe1 (patch) | |
| tree | 072e41c53d29f6f91dec8eaf3872e97e72bf82af /lib/sqlalchemy/testing | |
| parent | 084b559b44bba73becc7e7fa7636d4c5ac99bb55 (diff) | |
| download | sqlalchemy-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.py | 15 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/suite/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/suite/test_types.py | 94 |
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 |
