diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-09-12 09:12:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-09-12 09:17:30 +0100 |
| commit | d05095fdc8608cb47844a2594e0480c04304fb89 (patch) | |
| tree | 3b77a86d4355a5baf830e6b73f873d9013980db9 /tests/styles | |
| parent | 5f87fadfd8b7787b92b41f84ebf850dbe3a6cf28 (diff) | |
Avoid excessive backtracking when parsing unterminated strings
Diffstat (limited to 'tests/styles')
| -rw-r--r-- | tests/styles/parser/tokeniser_tests.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/styles/parser/tokeniser_tests.py b/tests/styles/parser/tokeniser_tests.py index 482c5b0..9fce077 100644 --- a/tests/styles/parser/tokeniser_tests.py +++ b/tests/styles/parser/tokeniser_tests.py @@ -31,14 +31,26 @@ def test_strings_are_tokenised(): assert_tokens("'Tristan'", is_token("string", "'Tristan'")) -def test_escape_sequences_in_strings_are_tokenised(): +def test_escaped_string_terminators_in_strings_are_tokenised(): assert_tokens(r"'Tristan\''", is_token("string", r"'Tristan\''")) +def test_escape_sequences_in_strings_are_tokenised(): + assert_tokens(r"'Tristan\\'", is_token("string", r"'Tristan\\'")) + + def test_unterminated_strings_are_tokenised(): assert_tokens("'Tristan", is_token("unterminated string", "'Tristan")) +def test_unterminated_strings_with_unterminated_escape_are_tokenised(): + assert_tokens("'Tristan\\", is_token("unterminated string", "'Tristan\\")) + + +def test_unterminated_strings_with_many_escape_sequences_do_not_cause_excessive_backtracking(): + assert_tokens("'" + "\\a" * 50, is_token("unterminated string", "'" + "\\a" * 50)) + + def test_arrows_are_tokenised(): assert_tokens("=>=>", is_token("symbol", "=>"), is_token("symbol", "=>")) |
