From: Mike Bayer Date: Sat, 9 Nov 2019 18:12:13 +0000 (-0500) Subject: Fix exclusions for multiple fails_on X-Git-Tag: rel_1_3_11~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b20919c67f2f6ecebcefa25051331d1d2d7e3e57;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fix exclusions for multiple fails_on The fails_on decorator was not being interpreted correctly when multiple were present. Remove obsolete fails_on from test_types that no longer take place for MySQL, Oracle Ensure test_types tests are using __backend__ mark currently failing Oracle interval tests Change-Id: If8db0c02b31a8008fd1673c2380f1f974c3806a6 (cherry picked from commit 56dff403b7cbaf2de342c83d496d0937f5b719b1) --- diff --git a/lib/sqlalchemy/testing/exclusions.py b/lib/sqlalchemy/testing/exclusions.py index d205354cff..02014e4b2e 100644 --- a/lib/sqlalchemy/testing/exclusions.py +++ b/lib/sqlalchemy/testing/exclusions.py @@ -141,19 +141,18 @@ class compound(object): def _expect_success(self, config, name="block"): if not self.fails: return + for fail in self.fails: - if not fail(config): - break - else: - raise AssertionError( - "Unexpected success for '%s' (%s)" - % ( - name, - " and ".join( - fail._as_string(config) for fail in self.fails - ), + if fail(config): + raise AssertionError( + "Unexpected success for '%s' (%s)" + % ( + name, + " and ".join( + fail._as_string(config) for fail in self.fails + ), + ) ) - ) def requires_tag(tagname): diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index 159fa241ae..4959049078 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -1796,8 +1796,6 @@ class SchemaTest(fixtures.TestBase): ) @testing.requires.schemas - @testing.fails_on("sqlite", "FIXME: unknown") - @testing.fails_on("sybase", "FIXME: unknown") def test_explicit_default_schema(self): engine = testing.db engine.connect().close() diff --git a/test/orm/test_naturalpks.py b/test/orm/test_naturalpks.py index 57f9506edb..e9b9ac44f6 100644 --- a/test/orm/test_naturalpks.py +++ b/test/orm/test_naturalpks.py @@ -536,7 +536,6 @@ class NaturalPKTest(fixtures.MappedTest): self._test_manytomany(True) @testing.requires.non_updating_cascade - @testing.requires.sane_multi_rowcount.not_() def test_manytomany_nonpassive(self): self._test_manytomany(False) diff --git a/test/sql/test_types.py b/test/sql/test_types.py index 346978b4dc..34247e9c3e 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -762,6 +762,8 @@ class UserDefinedTest( class TypeCoerceCastTest(fixtures.TablesTest): + __backend__ = True + @classmethod def define_tables(cls, metadata): class MyType(types.TypeDecorator): @@ -777,10 +779,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): Table("t", metadata, Column("data", String(50))) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_insert_round_trip_cast(self): self._test_insert_round_trip(cast) @@ -798,12 +796,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [("BIND_INd1BIND_OUT",)], ) - @testing.fails_on( - "oracle", - "ORA-00906: missing left parenthesis - " - "seems to be CAST(:param AS type)", - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_coerce_from_nulltype_cast(self): self._test_coerce_from_nulltype(cast) @@ -828,10 +820,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [("BIND_INTHISISMYOBJBIND_OUT",)], ) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_vs_non_coerced_cast(self): self._test_vs_non_coerced(cast) @@ -851,10 +839,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [("BIND_INd1", "BIND_INd1BIND_OUT")], ) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_vs_non_coerced_alias_cast(self): self._test_vs_non_coerced_alias(cast) @@ -876,10 +860,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [("BIND_INd1", "BIND_INd1BIND_OUT")], ) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_vs_non_coerced_where_cast(self): self._test_vs_non_coerced_where(cast) @@ -910,10 +890,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [("BIND_INd1", "BIND_INd1BIND_OUT")], ) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_coerce_none_cast(self): self._test_coerce_none(cast) @@ -941,10 +917,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): [], ) - @testing.fails_on( - "oracle", "oracle doesn't like CAST in the VALUES of an INSERT" - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_resolve_clause_element_cast(self): self._test_resolve_clause_element(cast) @@ -1036,12 +1008,6 @@ class TypeCoerceCastTest(fixtures.TablesTest): else [("x", "xBIND_OUT")], ) - @testing.fails_on( - "oracle", - "ORA-00906: missing left parenthesis - " - "seems to be CAST(:param AS type)", - ) - @testing.fails_on("mysql", "mysql dialect warns on skipped CAST") def test_cast_existing_typed(self): MyType = self.MyType coerce_fn = cast @@ -1522,11 +1488,6 @@ class EnumTest(AssertsCompiledSQL, fixtures.TablesTest): [("footwo",), ("footwo",), ("fooone",)], ) - @testing.fails_on( - "postgresql+zxjdbc", - 'zxjdbc fails on ENUM: column "XXX" is of type XXX ' - "but expression is of type character varying", - ) def test_round_trip(self): enum_table = self.tables["enum_table"] @@ -2799,6 +2760,8 @@ class NumericRawSQLTest(fixtures.TestBase): """ + __backend__ = True + def _fixture(self, metadata, type_, data): t = Table("t", metadata, Column("val", type_)) metadata.create_all() @@ -2848,6 +2811,9 @@ interval_table = metadata = None class IntervalTest(fixtures.TestBase, AssertsExecutionResults): + + __backend__ = True + @classmethod def setup_class(cls): global interval_table, metadata @@ -2875,6 +2841,7 @@ class IntervalTest(fixtures.TestBase, AssertsExecutionResults): def teardown_class(cls): metadata.drop_all() + @testing.fails_on("oracle", "See issue #4971") def test_non_native_adapt(self): interval = Interval(native=False) adapted = interval.dialect_impl(testing.db.dialect) @@ -2882,6 +2849,10 @@ class IntervalTest(fixtures.TestBase, AssertsExecutionResults): assert adapted.native is False eq_(str(adapted), "DATETIME") + @testing.fails_on( + "oracle", + "ORA-01873: the leading precision of the interval is too small", + ) def test_roundtrip(self): small_delta = datetime.timedelta(days=15, seconds=5874) delta = datetime.timedelta(414) @@ -2895,6 +2866,9 @@ class IntervalTest(fixtures.TestBase, AssertsExecutionResults): eq_(row["native_interval_args"], delta) eq_(row["non_native_interval"], delta) + @testing.fails_on( + "oracle", "ORA-00932: inconsistent datatypes: expected NUMBER got DATE" + ) def test_null(self): interval_table.insert().execute( id=1, native_inverval=None, non_native_interval=None @@ -2914,6 +2888,8 @@ class BooleanTest( """ + __backend__ = True + @classmethod def define_tables(cls, metadata): Table(