From 79246f70c472e43a5ece4d861acc02ff3d6f44a0 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Mon, 18 Nov 2024 09:00:23 +0800 Subject: [PATCH] improved `index_of_with_escape` --- src/pwo/private.py | 10 ++++++---- tests/test_private.py | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/pwo/private.py b/src/pwo/private.py index 3101516..6a40df4 100644 --- a/src/pwo/private.py +++ b/src/pwo/private.py @@ -266,13 +266,15 @@ def index_of_with_escape(haystack: str, needle: str, escape: str, begin: int, en if escape_count > 0: escape_count -= 1 - if c == escape: + if c[0] == escape: result = -1 elif escape_count == 0: - if c == escape: + if c[0] == escape: escape_count += 1 - if c == needle: - result = cursor + if cursor + len(needle) <= len(haystack): + test = haystack[cursor:cursor + len(needle)] + if test == needle: + result = cursor if result >= 0 and escape_count == 0: break diff --git a/tests/test_private.py b/tests/test_private.py index 0558205..95ce31e 100644 --- a/tests/test_private.py +++ b/tests/test_private.py @@ -104,7 +104,7 @@ class TestIndexOfWithEscape(unittest.TestCase): break solution.append(i) i += 1 - self.assertEqual(solution, expected_solution) + self.assertEqual(expected_solution, solution) def test_simple(self): self.run_test_case(" dsds $sdsa \\$dfivbdsf \\\\$sdgsga", '$', '\\', [6, 25]) @@ -124,4 +124,6 @@ class TestIndexOfWithEscape(unittest.TestCase): def test_special_case(self): self.run_test_case("\n${sys:user.home}${env:HOME}", ':', '\\', [6, 22]) + def test_wide_needle(self): + self.run_test_case("asdasd\\${#vdfv|${#sdfs}", '${', '\\', [15])