From 96c250e53844599d73952a5a1c9a8958bd582f15 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Sat, 14 Mar 2026 03:54:46 -0700 Subject: [PATCH] test: cover pipe characters in v4a patch apply Add a regression test for apply_v4a_operations when read content contains a literal pipe character outside a line-number prefix. --- tests/tools/test_patch_parser.py | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/tools/test_patch_parser.py b/tests/tools/test_patch_parser.py index 752c7340..77baab8d 100644 --- a/tests/tools/test_patch_parser.py +++ b/tests/tools/test_patch_parser.py @@ -1,7 +1,10 @@ """Tests for the V4A patch format parser.""" +from types import SimpleNamespace + from tools.patch_parser import ( OperationType, + apply_v4a_operations, parse_v4a_patch, ) @@ -137,3 +140,48 @@ class TestParseInvalidPatch: assert ops[0].operation == OperationType.ADD assert ops[1].operation == OperationType.DELETE assert ops[2].operation == OperationType.UPDATE + + +class TestApplyUpdate: + def test_preserves_non_prefix_pipe_characters_in_unmodified_lines(self): + patch = """\ +*** Begin Patch +*** Update File: sample.py +@@ result @@ + result = 1 +- return result ++ return result + 1 +*** End Patch""" + operations, err = parse_v4a_patch(patch) + assert err is None + + class FakeFileOps: + def __init__(self): + self.written = None + + def read_file(self, path, offset=1, limit=500): + return SimpleNamespace( + content=( + 'def run():\n' + ' cmd = "echo a | sed s/a/b/"\n' + ' result = 1\n' + ' return result' + ), + error=None, + ) + + def write_file(self, path, content): + self.written = content + return SimpleNamespace(error=None) + + file_ops = FakeFileOps() + + result = apply_v4a_operations(operations, file_ops) + + assert result.success is True + assert file_ops.written == ( + 'def run():\n' + ' cmd = "echo a | sed s/a/b/"\n' + ' result = 1\n' + ' return result + 1' + )