Skip to content
This repository was archived by the owner on Mar 22, 2024. It is now read-only.

Commit ca1346e

Browse files
committed
Have generate_tests.py generate Patterns inline in tests.rs
1 parent 2a43d66 commit ca1346e

File tree

6 files changed

+25
-18
lines changed

6 files changed

+25
-18
lines changed

generate_tests.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,21 @@ def compile(cls, pattern, flags=0):
2626
for k, v in re.RegexFlag.__members__.items():
2727
setattr(CompiledPattern, k, v)
2828

29+
30+
# matches `// pattern {varname} = re.compile(...)`
31+
pattern_pattern = re.compile(r"^((\s*)\/\/\s*pattern\s+(\w+)\s+=\s+(.+?))$(?:.+?END GENERATED)?", re.M | re.S)
32+
def replace_compiled(m):
33+
line, indent, varname, pattern = m.groups()
34+
pattern = eval(pattern, {"re": CompiledPattern})
35+
pattern = f"Pattern {{ code: &{json.dumps(pattern.code)}, flags: SreFlag::from_bits_truncate({int(pattern.flags)}) }}"
36+
return f'''{line}
37+
{indent}// START GENERATED by generate_tests.py
38+
{indent}#[rustfmt::skip] let {varname} = {pattern};
39+
{indent}// END GENERATED'''
40+
2941
with os.scandir("tests") as d:
3042
for f in d:
3143
path = Path(f.path)
32-
if path.suffix == ".py":
33-
pattern = eval(path.read_text(), {"re": CompiledPattern})
34-
path.with_suffix(".re").write_text(
35-
f"// {pattern.pattern!r}, flags={pattern.flags!r}\n"
36-
f"Pattern {{ code: &{json.dumps(pattern.code)}, flags: SreFlag::from_bits_truncate({int(pattern.flags)}) }}"
37-
)
44+
if path.suffix == ".rs":
45+
replaced = pattern_pattern.sub(replace_compiled, path.read_text())
46+
path.write_text(replaced)

tests/lookbehind.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/lookbehind.re

Lines changed: 0 additions & 2 deletions
This file was deleted.

tests/positive_lookbehind.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/positive_lookbehind.re

Lines changed: 0 additions & 2 deletions
This file was deleted.

tests/tests.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@ impl Pattern {
1818

1919
#[test]
2020
fn test_2427() {
21-
// r'(?<!\.)x\b'
22-
let pattern = include!("lookbehind.re");
23-
let mut state = pattern.state("x", 0..usize::MAX);
21+
// pattern lookbehind = re.compile(r'(?<!\.)x\b')
22+
// START GENERATED by generate_tests.py
23+
#[rustfmt::skip] let lookbehind = Pattern { code: &[15, 4, 0, 1, 1, 5, 5, 1, 17, 46, 1, 17, 120, 6, 10, 1], flags: SreFlag::from_bits_truncate(32) };
24+
// END GENERATED
25+
let mut state = lookbehind.state("x", 0..usize::MAX);
2426
state = state.pymatch();
2527
assert!(state.has_matched == Some(true));
2628
}
2729

2830
#[test]
2931
fn test_assert() {
30-
// '(?<=abc)def', flags=re.UNICODE
31-
let pattern = include!("positive_lookbehind.re");
32-
let mut state = pattern.state("abcdef", 0..usize::MAX);
32+
// pattern positive_lookbehind = re.compile(r'(?<=abc)def')
33+
// START GENERATED by generate_tests.py
34+
#[rustfmt::skip] let positive_lookbehind = Pattern { code: &[15, 4, 0, 3, 3, 4, 9, 3, 17, 97, 17, 98, 17, 99, 1, 17, 100, 17, 101, 17, 102, 1], flags: SreFlag::from_bits_truncate(32) };
35+
// END GENERATED
36+
let mut state = positive_lookbehind.state("abcdef", 0..usize::MAX);
3337
state = state.search();
3438
assert!(state.has_matched == Some(true));
3539
}

0 commit comments

Comments
 (0)