From d2410df9cab8fb1bff8828e45541aff2c553dfe1 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 10 Oct 2012 20:12:25 -0400 Subject: - 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. --- lib/sqlalchemy/testing/requirements.py | 15 +++++ lib/sqlalchemy/testing/suite/__init__.py | 1 + lib/sqlalchemy/testing/suite/test_types.py | 94 ++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 lib/sqlalchemy/testing/suite/test_types.py (limited to 'lib/sqlalchemy/testing') 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 -- cgit v1.2.1