| # Copyright 2023 The Bazel Authors. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import unittest |
| |
| from tools.private.update_deps.update_file import replace_snippet, unified_diff |
| |
| |
| class TestReplaceSnippet(unittest.TestCase): |
| def test_replace_simple(self): |
| current = """\ |
| Before the snippet |
| |
| # Start marker |
| To be replaced |
| It may have the '# Start marker' or '# End marker' in the middle, |
| But it has to be in the beginning of the line to mark the end of a region. |
| # End marker |
| |
| After the snippet |
| """ |
| snippet = "Replaced" |
| got = replace_snippet( |
| current=current, |
| snippet="Replaced", |
| start_marker="# Start marker", |
| end_marker="# End marker", |
| ) |
| |
| want = """\ |
| Before the snippet |
| |
| # Start marker |
| Replaced |
| # End marker |
| |
| After the snippet |
| """ |
| self.assertEqual(want, got) |
| |
| def test_replace_indented(self): |
| current = """\ |
| Before the snippet |
| |
| # Start marker |
| To be replaced |
| # End marker |
| |
| After the snippet |
| """ |
| got = replace_snippet( |
| current=current, |
| snippet=" Replaced", |
| start_marker="# Start marker", |
| end_marker="# End marker", |
| ) |
| |
| want = """\ |
| Before the snippet |
| |
| # Start marker |
| Replaced |
| # End marker |
| |
| After the snippet |
| """ |
| self.assertEqual(want, got) |
| |
| def test_raises_if_start_is_not_found(self): |
| with self.assertRaises(RuntimeError) as exc: |
| replace_snippet( |
| current="foo", |
| snippet="", |
| start_marker="start", |
| end_marker="end", |
| ) |
| |
| self.assertEqual(exc.exception.args[0], "Start marker 'start' was not found") |
| |
| def test_raises_if_end_is_not_found(self): |
| with self.assertRaises(RuntimeError) as exc: |
| replace_snippet( |
| current="start", |
| snippet="", |
| start_marker="start", |
| end_marker="end", |
| ) |
| |
| self.assertEqual(exc.exception.args[0], "End marker 'end' was not found") |
| |
| |
| class TestUnifiedDiff(unittest.TestCase): |
| def test_diff(self): |
| give_a = """\ |
| First line |
| second line |
| Third line |
| """ |
| give_b = """\ |
| First line |
| Second line |
| Third line |
| """ |
| got = unified_diff("filename", give_a, give_b) |
| want = """\ |
| --- a/filename |
| +++ b/filename |
| @@ -1,3 +1,3 @@ |
| First line |
| -second line |
| +Second line |
| Third line""" |
| self.assertEqual(want, got) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |