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])