aboutsummaryrefslogtreecommitdiff
path: root/tests/builder/engine.test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/builder/engine.test.py')
-rw-r--r--tests/builder/engine.test.py42
1 files changed, 38 insertions, 4 deletions
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"))