Repository: heavyai/sqlalchemy-heavyai (language: python)

Issue:
TST: Decrease the usage of the filter parameter for pytest command line
Currently, the tests are using filters to deselect tests that are failing or that are breaking the test suite.

The tests that should be skipped should use the same approach used here: https://github.com/pauldex/sqlalchemy-firebird/blob/master/test/test_suite.py

So, the class should be recreated, skipping just the necessary tests.


Discussion / hints:

Fix patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ae7f3d5..9d60fbe 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,14 +1,10 @@
 repos:
     - repo: https://github.com/pre-commit/pre-commit-hooks
-      rev: v2.5.0
+      rev: v4.0.1
       hooks:
         - id: trailing-whitespace
         - id: end-of-file-fixer
 
-    - repo: https://github.com/asottile/seed-isort-config
-      rev: v2.2.0
-      hooks:
-        - id: seed-isort-config
     - repo: https://github.com/timothycrosley/isort
       rev: 5.9.3
       hooks:
@@ -16,7 +12,7 @@ repos:
           exclude: ^docs/
 
     - repo: https://github.com/psf/black
-      rev: 21.8b0
+      rev: 21.9b0
       hooks:
         - id: black
           exclude: ^docs/
diff --git a/Makefile b/Makefile
index 9b7f9d9..ab5e67c 100644
--- a/Makefile
+++ b/Makefile
@@ -114,115 +114,5 @@ docker-omnisci-bash:
 
 # tests
 
-# skipping for the following tests because they breaking the tests
-define PYTEST_EXPR
-not (\
-	ExpandingBoundInTest_omnisci and (\
-		test_null_in_empty_set_is_false_bindparam \
-		or test_null_in_empty_set_is_false_direct \
-	)\
-	or FetchLimitOffsetTest \
-	or HasIndexTest \
-	or index \
-	or IsOrIsNotDistinctFromTest and (\
-		nottest_is_or_is_not_distinct_from \
-		or test_is_or_is_not_distinct_from \
-	) \
-	or JoinTest \
-	or QuotedNameArgumentTest and (\
-		test_get_check_constraints \
-		or test_get_columns \
-		or test_get_foreign_keys \
-		or test_get_pk_constraint \
-		or test_get_indexes \
-		or test_get_table_comment \
-		or test_get_table_options \
-		or test_get_unique_constraints \
-		or test_get_view_definition \
-	) \
-	or SimpleUpdateDeleteTest and (\
-		test_delete \
-		or test_update \
-	) \
-	or CollateTest and test_collate_order_by \
-	or DateTest and (\
-		test_null \
-		or test_null_bound_comparison \
-		or test_round_trip \
-		or test_round_trip_decorated \
-	) \
-	or DateTimeCoercedToDateTimeTest and ( \
-		test_null \
-		or test_null_bound_comparison \
-		or test_round_trip \
-		or test_round_trip_decorated \
-	) \
-	or DateTimeMicrosecondsTest and (\
-		test_null \
-		or test_null_bound_comparison \
-		or test_round_trip \
-		or test_round_trip_decorated \
-	) \
-	or DateTimeTest and (\
-		test_null \
-		or test_null_bound_comparison \
-		or test_round_trip \
-		or test_round_trip_decorated \
-	) \
-	or DifficultParametersTest and test_round_trip \
-	or ExistsTest and ( \
-		test_select_exists \
-		or test_select_exists_false \
-	) \
-	or ExpandingBoundInTest and ( \
-		test_empty_set_against_string_bindparam \
-		or test_empty_set_against_string_direct \
-		or test_empty_set_against_string_negation_bindparam \
-		or test_empty_set_against_string_negation_direct \
-	) \
-	or LikeFunctionsTest and (\
-		test_contains_autoescape \
-		or test_contains_autoescape_escape \
-		or test_contains_escape \
-		or test_contains_unescaped \
-		or test_endswith_autoescape \
-		or test_endswith_autoescape_escape \
-		or test_endswith_escape \
-		or test_endswith_sqlexpr \
-		or test_endswith_unescaped \
-		or test_startswith_autoescape \
-		or test_startswith_autoescape_escape \
-		or test_startswith_escape \
-		or test_startswith_sqlexpr \
-		or test_startswith_unescaped \
-	) \
-	or LongNameBlowoutTest and test_long_convention_name \
-	or NormalizedNameTest and test_reflect_lowercase_forced_tables \
-	or OrderByLabelTest and test_composed_multiple \
-	or UnicodeTextTest \
-	or UnicodeVarcharTest \
-	or CastTypeDecoratorTest and test_special_type \
-    or ComponentReflectionTest\
-    or test_get_schema_names \
-    or CompoundSelectTest and test_distinct_selectable_in_unions \
-    or CompoundSelectTest and test_limit_offset_aliased_selectable_in_unions \
-    or CompoundSelectTest and test_plain_union \
-    or CompoundSelectTest and test_select_from_plain_union \
-    or DeprecatedCompoundSelectTest and test_distinct_selectable_in_unions \
-    or DeprecatedCompoundSelectTest and test_limit_offset_aliased_selectable_in_unions \
-    or DeprecatedCompoundSelectTest and test_plain_union \
-    or DateTimeMicrosecondsTest and test_round_trip \
-    or DateTimeMicrosecondsTest and test_round_trip_decorated \
-    or TimeMicrosecondsTest and test_round_trip \
-    or TimeMicrosecondsTest and test_round_trip_decorated \
-    or ExceptionTest and test_integrity_error \
-    or NormalizedNameTest and test_get_table_names \
-    or NumericTest and test_decimal_coerce_round_trip_w_cast \
-    or NumericTest and test_numeric_as_decimal \
-    or NumericTest and test_render_literal_numeric \
-    or TextTest and test_text_empty_strings \
-)
-endef
-
 run-tests:
-	pytest -vv -s -k "${PYTEST_EXPR}" ${TEST_PARAMS} tests/
+	pytest -vv -s ${TEST_PARAMS} tests/
diff --git a/pyproject.toml b/pyproject.toml
index f24b79f..bdeff52 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,5 +4,22 @@ build-backend = "setuptools.build_meta"
 
 [tool.black]
 line-length = 79
-target-version = ["py34", "py35", "py36", "py37", "py38"]
+target-version = ["py36", "py37", "py38"]
 exclude = "docs/"
+
+[tool.isort]
+ensure_newline_before_comments = true
+line_length = 79
+multi_line_output = 3
+include_trailing_comma = true
+use_parentheses = true
+skip = "docs/"
+
+[tool.mypy]
+ignore_missing_imports = true
+strict_optional = true
+files = "sqlalchemy_omnisci"
+
+[tool.pytest]
+addopts= "--tb native -v -r fxX -p no:warnings"
+python_files = "tests/*test_*.py"
diff --git a/setup.cfg b/setup.cfg
index 8dee1f5..b1fcd23 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,27 +3,10 @@ exclude = tests,build,dist,docs,.git,__pycache__,.tox,.eggs,*.egg,.asv,conftest.
 max-line-length = 79
 ignore = D202,D203,W503,E203
 
-[mypy]
-ignore_missing_imports = True
-strict_optional = True
-files = sqlalchemy_omnisci
-
-[isort]
-known_third_party = pytest,setuptools,sqlalchemy,superset,werkzeug
-ensure_newline_before_comments=true
-line_length = 79
-multi_line_output = 3
-include_trailing_comma = true
-skip = docs/
-
 [aliases]
 # Define setup.py command aliases here
 test = pytest
 
-[tool:pytest]
-addopts= --tb native -v -r fxX -p no:warnings
-python_files=tests/*test_*.py
-
 [sqla_testing]
 requirement_cls=sqlalchemy_omnisci.requirements:Requirements
 profile_file=tests/profiles.txt
diff --git a/setup.py b/setup.py
index 820860a..c190cca 100644
--- a/setup.py
+++ b/setup.py
@@ -14,7 +14,7 @@
     "pyomnisci>=0.27.0",
 ]
 
-setup_requirements = ["pytest-runner"]
+setup_requirements = ["setuptools-scm"]
 
 test_requirements = ["pytest"]
 lint_requirements = [
@@ -24,7 +24,7 @@
     "pre-commit",
 ]
 docs_requirements = ["sphinx"]
-release_requirements = ["twine", "re-ver"]
+release_requirements = ["twine", "wheel", "build"]
 
 dev_requirements = (
     requirements


Test patch:
diff --git a/tests/conftest.py b/tests/conftest.py
index 55b2cf9..104a808 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -177,5 +177,8 @@ def pytest_sessionstart(session):
 def pytest_sessionfinish(session, exitstatus):
     """Run a hook for pytest sessionfinish."""
     engine, _ = get_engine(db_params=SETUP_PARAMETERS)
-    # engine.execute(f"DROP DATABASE {DATABASE_TESTING};")
-    testing.plugin.pytestplugin.pytest_sessionfinish(session)
+    try:
+        testing.plugin.pytestplugin.pytest_sessionfinish(session)
+        engine.execute(f"DROP DATABASE {DATABASE_TESTING};")
+    except Exception:
+        ...
diff --git a/tests/test_suite.py b/tests/test_suite.py
index 7c05e37..9f9097e 100644
--- a/tests/test_suite.py
+++ b/tests/test_suite.py
@@ -1,2 +1,549 @@
-"""Re-use the sqlalchemy test suite."""
+"""
+Re-use the sqlalchemy test suite.
+
+# isort:skip_file
+"""
+import pytest
+
 from sqlalchemy.testing.suite import *  # noqa: F403, F401
+from sqlalchemy.testing.suite import (
+    CastTypeDecoratorTest as _CastTypeDecoratorTest,
+    CollateTest as _CollateTest,
+    ComponentReflectionTest as _ComponentReflectionTest,
+    CompoundSelectTest as _CompoundSelectTest,
+    DateTest as _DateTest,
+    DateTimeCoercedToDateTimeTest as _DateTimeCoercedToDateTimeTest,
+    DateTimeMicrosecondsTest as _DateTimeMicrosecondsTest,
+    DateTimeTest as _DateTimeTest,
+    DeprecatedCompoundSelectTest as _DeprecatedCompoundSelectTest,
+    DifficultParametersTest as _DifficultParametersTest,
+    ExceptionTest as _ExceptionTest,
+    ExistsTest as _ExistsTest,
+    ExpandingBoundInTest as _ExpandingBoundInTest,
+    FetchLimitOffsetTest as _FetchLimitOffsetTest,
+    HasIndexTest as _HasIndexTest,
+    IsOrIsNotDistinctFromTest as _IsOrIsNotDistinctFromTest,
+    JoinTest as _JoinTest,
+    LikeFunctionsTest as _LikeFunctionsTest,
+    LongNameBlowoutTest as _LongNameBlowoutTest,
+    NormalizedNameTest as _NormalizedNameTest,
+    NumericTest as _NumericTest,
+    OrderByLabelTest as _OrderByLabelTest,
+    QuotedNameArgumentTest as _QuotedNameArgumentTest,
+    SimpleUpdateDeleteTest as _SimpleUpdateDeleteTest,
+    TextTest as _TextTest,
+    TimeMicrosecondsTest as _TimeMicrosecondsTest,
+    UnicodeTextTest as _UnicodeTextTest,
+    UnicodeVarcharTest as _UnicodeVarcharTest,
+)
+
+
+class ExpandingBoundInTest(_ExpandingBoundInTest):
+    """Skip tests for ExpandingBoundInTest."""
+
+    @pytest.mark.skip()
+    def test_null_in_empty_set_is_false_bindparam(self, *args, **kwargs):
+        """Skip test."""
+        assert True
+
+    @pytest.mark.skip()
+    def test_null_in_empty_set_is_false_direct(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_empty_set_against_string_bindparam(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_empty_set_against_string_direct(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_empty_set_against_string_negation_bindparam(
+        self, *args, **kwargs
+    ):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_empty_set_against_string_negation_direct(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class FetchLimitOffsetTest(_FetchLimitOffsetTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class HasIndexTest(_HasIndexTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class IsOrIsNotDistinctFromTest(_IsOrIsNotDistinctFromTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def nottest_is_or_is_not_distinct_from(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_is_or_is_not_distinct_from(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class JoinTest(_JoinTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class QuotedNameArgumentTest(_QuotedNameArgumentTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_get_check_constraints(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_columns(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_foreign_keys(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_pk_constraint(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_indexes(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_table_comment(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_table_options(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_unique_constraints(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_view_definition(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class SimpleUpdateDeleteTest(_SimpleUpdateDeleteTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_delete(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_update(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class CollateTest(_CollateTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_collate_order_by(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DateTest(_DateTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_null(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_null_bound_comparison(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip_decorated(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DateTimeCoercedToDateTimeTest(_DateTimeCoercedToDateTimeTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_null(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_null_bound_comparison(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip_decorated(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DateTimeMicrosecondsTest(_DateTimeMicrosecondsTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_null(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_null_bound_comparison(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip_decorated(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DateTimeTest(_DateTimeTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_null(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_null_bound_comparison(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip_decorated(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DifficultParametersTest(_DifficultParametersTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class ExistsTest(_ExistsTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_select_exists(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_select_exists_false(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class LikeFunctionsTest(_LikeFunctionsTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_contains_autoescape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_contains_autoescape_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_contains_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_contains_unescaped(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_endswith_autoescape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_endswith_autoescape_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_endswith_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_endswith_sqlexpr(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_endswith_unescaped(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_startswith_autoescape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_startswith_autoescape_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_startswith_escape(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_startswith_sqlexpr(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_startswith_unescaped(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class LongNameBlowoutTest(_LongNameBlowoutTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_long_convention_name(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class NormalizedNameTest(_NormalizedNameTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_reflect_lowercase_forced_tables(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_get_table_names(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class OrderByLabelTest(_OrderByLabelTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_composed_multiple(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class UnicodeTextTest(_UnicodeTextTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            """Skip all tests."""
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class UnicodeVarcharTest(_UnicodeVarcharTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class CastTypeDecoratorTest(_CastTypeDecoratorTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_special_type(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class ComponentReflectionTest(_ComponentReflectionTest):
+    """Skip test."""
+
+    def __init__(self, *args, **kwargs):
+        """Skip all tests."""
+        for attr in dir(self):
+            if attr.startswith("test"):
+                setattr(self, attr, pytest.mark.skip()(lambda v: v))
+
+
+class CompoundSelectTest(_CompoundSelectTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_distinct_selectable_in_unions(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_limit_offset_aliased_selectable_in_unions(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_plain_union(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_select_from_plain_union(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class DeprecatedCompoundSelectTest(_DeprecatedCompoundSelectTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_distinct_selectable_in_unions(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_limit_offset_aliased_selectable_in_unions(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_plain_union(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class TimeMicrosecondsTest(_TimeMicrosecondsTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_round_trip(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_round_trip_decorated(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class ExceptionTest(_ExceptionTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_integrity_error(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class NumericTest(_NumericTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_decimal_coerce_round_trip_w_cast(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_numeric_as_decimal(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+    @pytest.mark.skip()
+    def test_render_literal_numeric(self, *args, **kwargs):
+        """Skip test."""
+        return
+
+
+class TextTest(_TextTest):
+    """Skip test."""
+
+    @pytest.mark.skip()
+    def test_text_empty_strings(self, *args, **kwargs):
+        """Skip test."""
+        return