From ae8c0be22fb3cf1740072e6a4e2707c61c8f11dc Mon Sep 17 00:00:00 2001 From: Bobby <30593201+luciferreeves@users.noreply.github.com> Date: Fri, 2 Sep 2022 17:33:01 -0400 Subject: Added Extra Tests --- tests/test_builder.py | 423 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 423 insertions(+) diff --git a/tests/test_builder.py b/tests/test_builder.py index a48cdb5..4ba9a76 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -2,6 +2,48 @@ import re from edify import RegexBuilder +simple_se = RegexBuilder().string('hello').any_char().string('world') +flags_se = ( + RegexBuilder() + .multi_line() + .ignore_case() + .string('hello') + .any_char() + .string('world') +) +start_end_se = ( + RegexBuilder() + .start_of_input() + .string('hello') + .any_char() + .string('world') + .end_of_input() +) +nc_se = ( + RegexBuilder() + .named_capture('module') + .exactly(2).any_char() + .end() + .named_back_reference('module') +) +indexed_back_reference_se = ( + RegexBuilder() + .capture() + .exactly(2).any_char() + .end() + .back_reference(1) +) +nested_se = RegexBuilder().exactly(2).any_char() +first_layer_se = ( + RegexBuilder() + .string('outer begin') + .named_capture('inner_subexpression') + .optional() + .subexpression(nested_se) + .end() + .string('outer end') +) + def regex_equality(regex, rb_expression): regex_str = str(regex) @@ -262,3 +304,384 @@ def test_back_reference(): ) regex_equality('/(hello\\ \\w!)\\1/', expr) regex_compilation('(hello\\ \\w!)\\1', expr) + + +def test_back_reference_no_cg_exists(): + try: + RegexBuilder().back_reference(1) + except Exception as e: + assert isinstance(e, Exception) + + +def test_group(): + expr = ( + RegexBuilder() + .group() + .string('hello ') + .word() + .char('!') + .end() + ) + regex_equality('/(?:hello\\ \\w!)/', expr) + regex_compilation('(?:hello\\ \\w!)', expr) + + +def test_error_when_called_with_no_stack(): + try: + RegexBuilder().end() + except Exception as e: + assert isinstance(e, Exception) + +def test_assert_ahead(): + expr = ( + RegexBuilder() + .assert_ahead() + .range('a', 'f') + .end() + .range('a', 'z') + ) + regex_equality('/(?=[a-f])[a-z]/', expr) + regex_compilation('(?=[a-f])[a-z]', expr) + + +def test_assert_behind(): + expr = ( + RegexBuilder() + .assert_behind() + .string('hello ') + .end() + .range('a', 'z') + ) + regex_equality('/(?<=hello\\ )[a-z]/', expr) + regex_compilation('(?<=hello\\ )[a-z]', expr) + + +def test_assert_not_ahead(): + expr = ( + RegexBuilder() + .assert_not_ahead() + .range('a', 'f') + .end() + .range('0', '9') + ) + regex_equality('/(?![a-f])[0-9]/', expr) + regex_compilation('(?![a-f])[0-9]', expr) + + +def test_assert_not_behind(): + expr = ( + RegexBuilder() + .assert_not_behind() + .string('hello ') + .end() + .range('a', 'z') + ) + regex_equality('/(?.{2})\\k[0-9]/', expr) + try: + expr.to_regex() + except Exception as e: + assert isinstance(e, Exception) + + +def test_namespacing(): + expr = ( + RegexBuilder() + .at_least(3).digit() + .subexpression(nc_se, {'namespace': 'yolo'}) + .range('0', '9') + ) + regex_equality('/\\d{3,}(?P.{2})\\k[0-9]/', expr) + try: + expr.to_regex() + except Exception as e: + assert isinstance(e, Exception) + +def test_group_name_collision_error(): + try: + ( + RegexBuilder() + .namedCapture('module') + .at_least(3).digit() + .end() + .subexpression(nc_se) + .range('0', '9') + ) + except Exception as e: + assert isinstance(e, Exception) + + +def test_group_name_collision_error_after_namespacing(): + try: + ( + RegexBuilder() + .namedCapture('module') + .at_least(3).digit() + .end() + .subexpression(nc_se, {'namespace': 'yolo'}) + .range('0', '9') + ) + except Exception as e: + assert isinstance(e, Exception) + +def test_indexed_back_referencing(): + expr = ( + RegexBuilder() + .capture() + .at_least(3).digit() + .end() + .subexpression(indexed_back_reference_se) + .back_reference(1) + .range('0', '9') + ) + regex_equality('/(\\d{3,})(.{2})\\2\\1[0-9]/', expr) + regex_compilation('(\\d{3,})(.{2})\\2\\1[0-9]', expr) + +def test_deeply_nested_se(): + expr = ( + RegexBuilder() + .capture() + .at_least(3).digit() + .end() + .subexpression(first_layer_se) + .back_reference(1) + .range('0', '9') + ) + regex_equality('/(\\d{3,})outer\\ begin(?P(?:.{2})?)outer\\ end\\1[0-9]/', expr) + regex_compilation('(\\d{3,})outer\\ begin(?P(?:.{2})?)outer\\ end\\1[0-9]', expr) -- cgit v1.2.3