summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/testing')
-rw-r--r--lib/sqlalchemy/testing/plugin/noseplugin.py7
-rw-r--r--lib/sqlalchemy/testing/requirements.py50
-rw-r--r--lib/sqlalchemy/testing/suite/test_types.py112
3 files changed, 166 insertions, 3 deletions
diff --git a/lib/sqlalchemy/testing/plugin/noseplugin.py b/lib/sqlalchemy/testing/plugin/noseplugin.py
index 1651886b8..37f7b29f5 100644
--- a/lib/sqlalchemy/testing/plugin/noseplugin.py
+++ b/lib/sqlalchemy/testing/plugin/noseplugin.py
@@ -348,7 +348,12 @@ class NoseSQLAlchemy(Plugin):
test_suite.__name__ = cls.__name__
for requirement in cls.__requires__:
check = getattr(config.requirements, requirement)
- check(test_suite)()
+
+ if not check.enabled:
+ raise SkipTest(
+ "'%s' unsupported on DB implementation '%s'" % (
+ cls.__name__, config.db.name)
+ )
if cls.__unsupported_on__:
spec = exclusions.db_spec(*cls.__unsupported_on__)
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py
index 163e04947..d58538db9 100644
--- a/lib/sqlalchemy/testing/requirements.py
+++ b/lib/sqlalchemy/testing/requirements.py
@@ -178,6 +178,56 @@ class SuiteRequirements(Requirements):
"""
return exclusions.open()
+
+ @property
+ def datetime(self):
+ """target dialect supports representation of Python
+ datetime.datetime() objects."""
+
+ return exclusions.open()
+
+ @property
+ def datetime_microseconds(self):
+ """target dialect supports representation of Python
+ datetime.datetime() with microsecond objects."""
+
+ return exclusions.open()
+
+ @property
+ def datetime_historic(self):
+ """target dialect supports representation of Python
+ datetime.datetime() objects with historic (pre 1970) values."""
+
+ return exclusions.closed()
+
+ @property
+ def date(self):
+ """target dialect supports representation of Python
+ datetime.date() objects."""
+
+ return exclusions.open()
+
+ @property
+ def date_historic(self):
+ """target dialect supports representation of Python
+ datetime.datetime() objects with historic (pre 1970) values."""
+
+ return exclusions.closed()
+
+ @property
+ def time(self):
+ """target dialect supports representation of Python
+ datetime.time() objects."""
+
+ return exclusions.open()
+
+ @property
+ def time_microseconds(self):
+ """target dialect supports representation of Python
+ datetime.time() with microsecond objects."""
+
+ return exclusions.open()
+
@property
def text_type(self):
"""Target database must support an unbounded Text() "
diff --git a/lib/sqlalchemy/testing/suite/test_types.py b/lib/sqlalchemy/testing/suite/test_types.py
index cd7b61f42..259cccff3 100644
--- a/lib/sqlalchemy/testing/suite/test_types.py
+++ b/lib/sqlalchemy/testing/suite/test_types.py
@@ -4,8 +4,9 @@ from .. import fixtures, config
from ..assertions import eq_
from ..config import requirements
from sqlalchemy import Integer, Unicode, UnicodeText, select
+from sqlalchemy import Date, DateTime, Time, MetaData, String
from ..schema import Table, Column
-
+import datetime
class _UnicodeFixture(object):
__requires__ = 'unicode_data',
@@ -101,4 +102,111 @@ class UnicodeTextTest(_UnicodeFixture, fixtures.TablesTest):
def test_empty_strings(self):
self._test_empty_strings()
-__all__ = ('UnicodeVarcharTest', 'UnicodeTextTest') \ No newline at end of file
+
+class StringTest(fixtures.TestBase):
+ @requirements.unbounded_varchar
+ def test_nolength_string(self):
+ metadata = MetaData()
+ foo = Table('foo', metadata,
+ Column('one', String)
+ )
+
+ foo.create(config.db)
+ foo.drop(config.db)
+
+class _DateFixture(object):
+ compare = None
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table('date_table', metadata,
+ Column('id', Integer, primary_key=True,
+ test_needs_autoincrement=True),
+ Column('date_data', cls.datatype),
+ )
+
+ def test_round_trip(self):
+ date_table = self.tables.date_table
+
+ config.db.execute(
+ date_table.insert(),
+ {'date_data': self.data}
+ )
+
+ row = config.db.execute(
+ select([
+ date_table.c.date_data,
+ ])
+ ).first()
+
+ compare = self.compare or self.data
+ eq_(row,
+ (compare, ))
+ assert isinstance(row[0], type(compare))
+
+ def test_null(self):
+ date_table = self.tables.date_table
+
+ config.db.execute(
+ date_table.insert(),
+ {'date_data': None}
+ )
+
+ row = config.db.execute(
+ select([
+ date_table.c.date_data,
+ ])
+ ).first()
+ eq_(row, (None,))
+
+
+class DateTimeTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'datetime',
+ datatype = DateTime
+ data = datetime.datetime(2012, 10, 15, 12, 57, 18)
+
+class DateTimeMicrosecondsTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'datetime_microseconds',
+ datatype = DateTime
+ data = datetime.datetime(2012, 10, 15, 12, 57, 18, 396)
+
+class TimeTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'time',
+ datatype = Time
+ data = datetime.time(12, 57, 18)
+
+class TimeMicrosecondsTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'time_microseconds',
+ datatype = Time
+ data = datetime.time(12, 57, 18, 396)
+
+class DateTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'date',
+ datatype = Date
+ data = datetime.date(2012, 10, 15)
+
+class DateTimeCoercedToDateTimeTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'date',
+ datatype = Date
+ data = datetime.datetime(2012, 10, 15, 12, 57, 18)
+ compare = datetime.date(2012, 10, 15)
+
+class DateTimeHistoricTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'datetime_historic',
+ datatype = DateTime
+ data = datetime.datetime(1850, 11, 10, 11, 52, 35)
+
+class DateHistoricTest(_DateFixture, fixtures.TablesTest):
+ __requires__ = 'date_historic',
+ datatype = Date
+ data = datetime.date(1727, 4, 1)
+
+
+__all__ = ('UnicodeVarcharTest', 'UnicodeTextTest',
+ 'DateTest', 'DateTimeTest',
+ 'DateTimeHistoricTest', 'DateTimeCoercedToDateTimeTest',
+ 'TimeMicrosecondsTest', 'TimeTest', 'DateTimeMicrosecondsTest',
+ 'DateHistoricTest', 'StringTest')
+
+
+