This should assist with helping to document the reasons for testing failures.
Currently unspecified failures are defaulted to 'FIXME: unknown'.
except tsa.exc.DBAPIError:
assert True
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'rowcount returns -1')
def test_empty_insert(self):
"""test that execute() interprets [] as a list with no params"""
result = testing.db.execute(users.insert().values(user_name=bindparam('name')), [])
self.assertEquals(result.rowcount, 1)
class ProxyConnectionTest(TestBase):
- @testing.fails_on('firebird') # Data type unknown
+ @testing.fails_on('firebird', 'Data type unknown')
def test_proxy(self):
stmts = []
meta.drop_all()
engine.dispose()
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_invalidate_on_results(self):
conn = engine.connect()
assert buf.index("CREATE TABLE someschema.table2") > -1
@testing.crashes('firebird', 'No schema support')
- @testing.fails_on('sqlite')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
# fixme: revisit these below.
- @testing.fails_on('access', 'sybase')
+ @testing.fails_on('access', 'FIXME: unknown')
+ @testing.fails_on('sybase', 'FIXME: unknown')
def test_explicit_default_schema(self):
engine = testing.db
connection.close()
@testing.requires.two_phase_transactions
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_two_phase_recover(self):
# MySQL recovery doesn't currently seem to work correctly
# Prepared transactions disappear when connections are closed and even
self.assert_(len(errors) == 0)
@testing.crashes('mssql', 'FIXME: unknown')
- @testing.fails_on('mysql') # no support for NOWAIT
+ @testing.fails_on('mysql', 'No support for NOWAIT')
@testing.crashes('firebird', 'FIXME: unknown')
@testing.crashes('sybase', 'FIXME: unknown')
@testing.crashes('access', 'FIXME: unknown')
lazy=False,
backref=backref('middle', lazy=False)))),
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_eager_terminate(self):
"""Eager query generation does not include the same mapper's table twice.
class Stat(_base.BasicEntity):
pass
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_nesting_with_functions(self):
mapper(Data, datas)
class Employee(_base.BasicEntity):
pass
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_basic(self):
mapper(Employee, employees)
class Joined(_base.ComparableEntity):
pass
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_nested_joins(self):
# this is testing some subtle column resolution stuff,
backref=backref('entries', lazy=False,
order_by=entries.c.entry_id))))
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_eagerload_on_path(self):
session = create_session()
sess.flush()
sess.close()
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_orphan(self):
sess = create_session()
assert prefs.count().scalar() == 2
assert extra.count().scalar() == 2
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_orphan_on_update(self):
sess = create_session()
sess.rollback()
eq_(u1.addresses.all(), [Address(email_address='lala@hoho.com')])
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_delete_nocascade(self):
mapper(User, users, properties={
assert testing.db.scalar(addresses.count(addresses.c.user_id != None)) ==0
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_delete_cascade(self):
mapper(User, users, properties={
assert testing.db.scalar(addresses.count()) ==0
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_remove_orphans(self):
mapper(User, users, properties={
assert 'orders' not in noeagers[0].__dict__
assert 'addresses' not in noeagers[0].__dict__
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_limit(self):
"""Limit operations combined with lazy-load relationships."""
assert self.static.user_address_result == l
self.assert_sql_count(testing.db, go, 1)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_limit_2(self):
mapper(Keyword, keywords)
assert self.static.item_keyword_result[1:3] == l
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_limit_3(self):
"""test that the ORDER BY is propagated from the inner select to the outer select, when using the
assert [User(id=7, address=Address(id=1))] == l
self.assert_sql_count(testing.db, go, 1)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_many_to_one(self):
mapper(Address, addresses, properties = dict(
Column('parent_id', Integer, ForeignKey('nodes.id')),
Column('data', String(30)))
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_basic(self):
class Node(_base.ComparableEntity):
)
)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_no_depth(self):
class Node(_base.ComparableEntity):
s.expire(u)
assert len(u.addresses) == 3
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_refresh2(self):
"""test a hang condition that was occuring on expire/refresh"""
assert res.order_by([Foo.bar])[0].bar == 5
assert res.order_by([sa.desc(Foo.bar)])[0].bar == 95
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_slice(self):
sess = create_session()
query = create_session().query(func.sum(foo.c.bar))
assert query.filter(foo.c.bar<30).one() == (435,)
- @testing.fails_on('firebird', 'mssql')
+ @testing.fails_on('firebird', 'FIXME: unknown')
+ @testing.fails_on('mssql', 'AVG produces an average as the original column type on mssql.')
@testing.resolve_artifact_names
def test_aggregate_2(self):
query = create_session().query(func.avg(foo.c.bar))
avg = query.filter(foo.c.bar < 30).one()[0]
eq_(round(avg, 1), 14.5)
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'AVG produces an average as the original column type on mssql.')
@testing.resolve_artifact_names
def test_aggregate_3(self):
query = create_session().query(Foo)
Column('foo_id', Integer, ForeignKey('foo.id'))
)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testbasic(self):
class Foo(object): pass
class Bar(Foo): pass
found = repr(l[0]) + repr(sorted([repr(o) for o in l[0].foos]))
self.assertEqual(found, compare)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testadvanced(self):
class Foo(object):
def __init__(self, data=None):
table1_mapper.compile()
assert table1_mapper.primary_key == [table1.c.id], table1_mapper.primary_key
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testone(self):
self.do_testlist([Table1, Table2, Table1, Table2])
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testtwo(self):
self.do_testlist([Table3])
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testthree(self):
self.do_testlist([Table2, Table1, Table1B, Table3, Table3, Table1B, Table1B, Table2, Table1])
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testfour(self):
self.do_testlist([
Table2('t2', [Data('data1'), Data('data2')]),
# 'Raises a "expression evaluation not supported" error at prepare time
- @testing.fails_on('firebird')
+ @testing.fails_on('firebird', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_function(self):
"""Mapping to a SELECT statement that has functions in it."""
class OptionsTest(_fixtures.FixtureTest):
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_synonym_options(self):
mapper(User, users, properties=dict(
eq_(l, self.static.user_address_result)
self.sql_count_(0, go)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_eager_options_with_limit(self):
mapper(User, users, properties=dict(
eq_(u.id, 8)
eq_(len(u.addresses), 3)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_lazy_options_with_limit(self):
mapper(User, users, properties=dict(
assert sess.query(User).get('ed').fullname == 'jack'
- @testing.fails_on('mysql')
- @testing.fails_on('sqlite')
+ @testing.fails_on('mysql', 'FIXME: unknown')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
def test_onetomany_passive(self):
self._test_onetomany(True)
self.assertEquals(User(username='fred', fullname='jack'), u1)
- @testing.fails_on('sqlite')
- @testing.fails_on('mysql')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_manytoone_passive(self):
self._test_manytoone(True)
sess.clear()
self.assertEquals([Address(username='ed'), Address(username='ed')], sess.query(Address).all())
- @testing.fails_on('sqlite')
- @testing.fails_on('mysql')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_bidirectional_passive(self):
self._test_bidirectional(True)
self.assertEquals([Address(username='fred'), Address(username='fred')], sess.query(Address).all())
- @testing.fails_on('sqlite')
- @testing.fails_on('mysql')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_manytomany_passive(self):
self._test_manytomany(True)
class Address(_base.ComparableEntity):
pass
- @testing.fails_on('sqlite')
- @testing.fails_on('mysql')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_onetomany_passive(self):
self._test_onetomany(True)
def test_basic(self):
assert [User(id=7), User(id=8), User(id=9),User(id=10)] == create_session().query(User).all()
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def test_limit(self):
assert [User(id=8), User(id=9)] == create_session().query(User).order_by(User.id).limit(2).offset(1).all()
q2 = q.select_from(sel).filter(users.c.id==8).filter(users.c.id>sel.c.id).values(users.c.name, sel.c.name, User.name)
self.assertEquals(list(q2), [(u'ed', u'jack', u'jack')])
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'FIXME: unknown')
def test_values_specific_order_by(self):
sess = create_session()
q2 = q.select_from(sel).filter(u2.id>1).order_by([User.id, sel.c.id, u2.id]).values(User.name, sel.c.name, u2.name)
self.assertEquals(list(q2), [(u'jack', u'jack', u'jack'), (u'jack', u'jack', u'ed'), (u'jack', u'jack', u'fred'), (u'jack', u'jack', u'chuck'), (u'ed', u'ed', u'jack'), (u'ed', u'ed', u'ed'), (u'ed', u'ed', u'fred'), (u'ed', u'ed', u'chuck')])
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'FIXME: unknown')
def test_values_with_boolean_selects(self):
"""Tests a values clause that works with select boolean evaluations"""
sess = create_session()
eq_(sess.query(User).order_by(User.id).all(), [jack,jane])
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_delete_fallback(self):
sess = create_session(bind=testing.db, autocommit=False)
assert session.connection().execute("select count(1) from users").scalar() == 2
@testing.crashes('mssql', 'test causes mssql to hang')
- @testing.fails_on('sqlite')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_transactions_isolated(self):
mapper(User, users)
# not supported on sqlite since sqlite's auto-pk generation only works with
# single column primary keys
- @testing.fails_on('sqlite')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_primary_key(self):
mapper(Entry, multipk1)
class Secondary(_base.ComparableEntity):
pass
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown on the parameter')
@testing.resolve_artifact_names
def test_insert(self):
mapper(Hoho, default_t)
self.assert_(h2.foober == h3.foober == h4.foober == 'im foober')
eq_(h5.foober, 'im the new foober')
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown on the parameter')
@testing.resolve_artifact_names
def test_eager_defaults(self):
mapper(Hoho, default_t, eager_defaults=True)
eq_(h1.foober, "im foober")
self.sql_count_(0, go)
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown on the parameter')
@testing.resolve_artifact_names
def test_update(self):
mapper(Hoho, default_t)
session.flush()
eq_(h1.foober, 'im the update')
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown on the parameter')
@testing.resolve_artifact_names
def test_used_in_relation(self):
"""A server-side default can be used as the target of a foreign key"""
# why no support on oracle ? because oracle doesn't save
# "blank" strings; it saves a single space character.
- @testing.fails_on('oracle')
+ @testing.fails_on('oracle', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_dont_update_blanks(self):
mapper(User, users)
def tearDownAll(self):
info_table.drop()
- @testing.fails_on('firebird', 'maxdb')
+ @testing.fails_on('firebird', 'FIXME: unknown')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.requires.subqueries
def testcase(self):
inner = select([case([
self.assert_compile(case([(t.c.col1==7, "y")], else_="z"), "CASE WHEN (test.col1 = :col1_1) THEN :param_1 ELSE :param_2 END")
- @testing.fails_on('firebird', 'maxdb')
+ @testing.fails_on('firebird', 'FIXME: unknown')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def testcase_with_dict(self):
query = select([case({
info_table.c.pk < 3: 'lessthan3',
)
metadata.create_all()
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_check_constraint(self):
foo = Table('foo', metadata,
Column('id', Integer, primary_key=True),
for fn in fn1, fn2, fn3, fn4, fn5, fn6, fn7, fn8:
c = sa.ColumnDefault(fn)
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_standalone(self):
c = testing.db.engine.contextual_connect()
x = c.execute(t.c.col1.default)
has_('col7', 'default', 'server_default', 'onupdate')
has_('col8', 'default', 'server_default', 'onupdate', 'server_onupdate')
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_insert(self):
r = t.insert().execute()
assert r.lastrow_has_defaults()
[(54, 'imthedefault', f, ts, ts, ctexec, True, False,
12, today, None)])
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_insertmany(self):
# MySQL-Python 1.2.2 breaks functions in execute_many :(
if (testing.against('mysql') and
l = t.select().execute()
eq_(50, l.fetchone()['col3'])
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_updatemany(self):
# MySQL-Python 1.2.2 breaks functions in execute_many :(
if (testing.against('mysql') and
(53, 'im the update', f2, ts, ts, ctexec, True, False,
13, today, 'py')])
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_update(self):
r = t.insert().execute()
pk = r.last_inserted_ids()[0]
13, datetime.date.today(), 'py'))
eq_(11, f2)
- @testing.fails_on('firebird') # 'Data type unknown'
+ @testing.fails_on('firebird', 'Data type unknown')
def test_update_values(self):
r = t.insert().execute()
pk = r.last_inserted_ids()[0]
default=sa.select([func.max(t2.c.nextid)]).as_scalar()),
Column('data', String(30)))
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'FIXME: unknown')
@testing.resolve_artifact_names
def test_basic(self):
t2.insert().execute(nextid=1)
Column('str1', String(20)))
# TODO: add coverage for increment on a secondary column in a key
- @testing.fails_on('firebird') # data type unknown
+ @testing.fails_on('firebird', 'Data type unknown')
@testing.resolve_artifact_names
def _test_autoincrement(self, bind):
ids = set()
class EmptyInsertTest(testing.TestBase):
@testing.exclude('sqlite', '<', (3, 3, 8), 'no empty insert support')
- @testing.fails_on('oracle')
+ @testing.fails_on('oracle', 'FIXME: unknown')
def test_empty_insert(self):
metadata = MetaData(testing.db)
t1 = Table('t1', metadata,
id_ = r.last_inserted_ids()[0]
nodes.insert().execute(data='bar', parent_id=id_)
- @testing.fails_on('sqlite')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
def test_non_autoincrement(self):
# sqlite INT primary keys can be non-unique! (only for ints)
nonai = Table("nonaitest", self.metadata,
cartitems.select().execute().fetchall()
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
# maxdb db-api seems to double-execute NEXTVAL internally somewhere,
# throwing off the numbers for these tests...
def test_implicit_sequence_exec(self):
finally:
s.drop()
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def teststandalone_explicit(self):
s = Sequence("my_sequence")
s.create(bind=testing.db)
s.drop(testing.db, checkfirst=False)
s.drop(testing.db, checkfirst=True)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def teststandalone2(self):
x = cartitems.c.cart_id.sequence.execute()
self.assert_(1 <= x <= 4)
l.append(row)
self.assert_(len(l) == 3)
- @testing.fails_on('firebird') # Data type unknown
+ @testing.fails_on('firebird', 'Data type unknown')
@testing.requires.subqueries
def test_anonymous_rows(self):
users.insert().execute(
self.assert_(not (rp != equal))
self.assert_(not (equal != equal))
- @testing.fails_on('mssql', 'oracle')
+ @testing.fails_on('mssql', 'No support for boolean logic in column select.')
+ @testing.fails_on('oracle', 'FIXME: unknown')
def test_or_and_as_columns(self):
true, false = literal(True), literal(False)
r = s.execute(search_key=None).fetchall()
assert len(r) == 0
- @testing.fails_on('firebird', 'maxdb', 'oracle', 'mssql')
+ @testing.fails_on('firebird', 'FIXME: unknown')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
+ @testing.fails_on('oracle', 'FIXME: unknown')
+ @testing.fails_on('mssql', 'FIXME: unknown')
def test_in_filtering_advanced(self):
"""test the behavior of the in_() function when comparing against an empty collection."""
r = users.select(limit=3, order_by=[users.c.user_id]).execute().fetchall()
self.assert_(r == [(1, 'john'), (2, 'jack'), (3, 'ed')], repr(r))
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def test_select_limit_offset(self):
"""Test the interaction between limit and offset"""
self.assert_(len(r) == 3, repr(r))
self.assert_(r[0] != r[1] and r[1] != r[2], repr(r))
- @testing.fails_on('mssql')
+ @testing.fails_on('mssql', 'FIXME: unknown')
def test_select_distinct_offset(self):
"""Test the interaction between distinct and offset"""
('ccc', 'aaa')]
self.assertEquals(u.execute().fetchall(), wanted)
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
@testing.requires.subqueries
def test_union_ordered_alias(self):
(s1, s2) = (
self.assertEquals(u.alias('bar').select().execute().fetchall(), wanted)
@testing.crashes('oracle', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('mysql')
- @testing.fails_on('sqlite')
+ @testing.fails_on('mysql', 'FIXME: unknown')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
def test_union_all(self):
e = union_all(
select([t1.c.col3]),
@testing.crashes('firebird', 'Does not support intersect')
@testing.crashes('sybase', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_intersect(self):
i = intersect(
select([t2.c.col3, t2.c.col4]),
@testing.crashes('firebird', 'Does not support except')
@testing.crashes('oracle', 'FIXME: unknown, verify not fails_on')
@testing.crashes('sybase', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_except_style1(self):
e = except_(union(
select([t1.c.col3, t1.c.col4]),
@testing.crashes('firebird', 'Does not support except')
@testing.crashes('oracle', 'FIXME: unknown, verify not fails_on')
@testing.crashes('sybase', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_except_style2(self):
e = except_(union(
select([t1.c.col3, t1.c.col4]),
@testing.crashes('firebird', 'Does not support except')
@testing.crashes('oracle', 'FIXME: unknown, verify not fails_on')
@testing.crashes('sybase', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('mysql')
- @testing.fails_on('sqlite')
+ @testing.fails_on('mysql', 'FIXME: unknown')
+ @testing.fails_on('sqlite', 'FIXME: unknown')
def test_except_style3(self):
# aaa, bbb, ccc - (aaa, bbb, ccc - (ccc)) = ccc
e = except_(
[('ccc',)])
@testing.crashes('firebird', 'Does not support intersect')
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_composite(self):
u = intersect(
select([t2.c.col3, t2.c.col4]),
self.assertEquals(found, wanted)
@testing.crashes('firebird', 'Does not support intersect')
- @testing.fails_on('mysql')
+ @testing.fails_on('mysql', 'FIXME: unknown')
def test_composite_alias(self):
ua = intersect(
select([t2.c.col3, t2.c.col4]),
def tearDownAll(self):
metadata.drop_all()
- @testing.fails_on('maxdb')
+ @testing.fails_on('maxdb', 'FIXME: unknown')
def test_modulo(self):
self.assertEquals(
select([flds.c.intcol % 3],
finally:
unicode_engine.dispose()
- @testing.fails_on('oracle')
+ @testing.fails_on('oracle', 'FIXME: unknown')
def test_blank_strings(self):
unicode_table.insert().execute(unicode_varchar=u'')
assert select([unicode_table.c.unicode_varchar]).scalar() == u''
testing.db.engine.dialect.convert_unicode = prev_assert
@testing.crashes('oracle', 'FIXME: unknown, verify not fails_on')
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown')
def test_length_function(self):
"""checks the database correctly understands the length of a unicode string"""
teststr = u'aaa\x1234'
assert expr.right.type.__class__ == test_table.c.avalue.type.__class__
assert testing.db.execute(test_table.select().where(expr), {"somevalue":25}).fetchall() == [(1, 'somedata', datetime.date(2007, 10, 15), 25)]
- @testing.fails_on('firebird') # "Data type unknown" on the parameter
+ @testing.fails_on('firebird', 'Data type unknown on the parameter')
def test_operator_adapt(self):
"""test type-based overloading of operators"""
t.drop(checkfirst=True)
class StringTest(TestBase, AssertsExecutionResults):
- @testing.fails_on('mysql', 'oracle')
+ @testing.fails_on('mysql', 'FIXME: unknown')
+ @testing.fails_on('oracle', 'FIXME: unknown')
def test_nolength_string(self):
metadata = MetaData(testing.db)
foo = Table('foo', metadata, Column('one', String))
"Unexpected success for future test '%s'" % fn_name)
return _function_named(decorated, fn_name)
-def fails_on(*dbs):
- """Mark a test as expected to fail on one or more database implementations.
+def fails_on(dbs, reason):
+ """Mark a test as expected to fail on the specified database
+ implementation.
Unlike ``crashes``, tests marked as ``fails_on`` will be run
for the named databases. The test is expected to fail and the unit test
def decorate(fn):
fn_name = fn.__name__
def maybe(*args, **kw):
- if config.db.name not in dbs:
+ if config.db.name != dbs:
return fn(*args, **kw)
else:
try:
except Exception, ex:
print ("'%s' failed as expected on DB implementation "
"'%s': %s" % (
- fn_name, config.db.name, str(ex)))
+ fn_name, config.db.name, reason))
return True
else:
raise AssertionError(