From 34694646345ce2a43c12df6fcb214371f3ee06c0 Mon Sep 17 00:00:00 2001 From: natsuoto <279971144+natsuoto@users.noreply.github.com> Date: Wed, 15 Jul 2026 13:51:38 +0530 Subject: feat(engine): route to_regex(engine=re|regex) through a backend layer; regex is a deferred-import extra --- tests/builder/engine.test.py | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'tests/builder/engine.test.py') diff --git a/tests/builder/engine.test.py b/tests/builder/engine.test.py index e569c71..c6a32d1 100644 --- a/tests/builder/engine.test.py +++ b/tests/builder/engine.test.py @@ -1,19 +1,53 @@ +import sys + import pytest from edify import RegexBuilder -from edify.errors.engine import EngineNotWiredError +from edify.errors.backend import MissingRegexBackendError def test_engine_defaults_to_re_and_compiles(): compiled = RegexBuilder().digit().to_regex() assert compiled.source == "\\d" + assert compiled.engine == "re" -def test_engine_re_explicit_is_accepted(): +def test_engine_re_explicit_compiles_via_stdlib(): compiled = RegexBuilder().digit().to_regex(engine="re") assert compiled.source == "\\d" + assert compiled.engine == "re" + assert compiled.compiled.__class__.__module__ == "re" + + +def test_engine_regex_compiles_via_third_party_module(): + compiled = RegexBuilder().digit().to_regex(engine="regex") + assert compiled.source == "\\d" + assert compiled.engine == "regex" + assert compiled.compiled.__class__.__module__.endswith("regex") + + +def test_engine_regex_and_engine_re_are_not_equal_for_the_same_source(): + left = RegexBuilder().digit().to_regex(engine="re") + right = RegexBuilder().digit().to_regex(engine="regex") + assert left != right -def test_engine_regex_raises_until_wired(): - with pytest.raises(EngineNotWiredError, match="engine='regex'"): +def test_engine_regex_raises_clean_import_error_without_the_extra(monkeypatch): + monkeypatch.setitem(sys.modules, "regex", None) + with pytest.raises(MissingRegexBackendError, match="engine='regex'") as excinfo: RegexBuilder().digit().to_regex(engine="regex") + text = str(excinfo.value) + assert "pip install edify[regex]" in text + assert "= note:" in text + + +def test_missing_regex_backend_error_chains_from_underlying_import_error(monkeypatch): + monkeypatch.setitem(sys.modules, "regex", None) + with pytest.raises(MissingRegexBackendError) as excinfo: + RegexBuilder().digit().to_regex(engine="regex") + assert isinstance(excinfo.value.__cause__, ImportError) + + +def test_regex_engine_flags_propagate(): + compiled = RegexBuilder().string("ABC").to_regex(engine="regex", ignore_case=True) + assert bool(compiled.search("abc")) -- cgit v1.2.3