| #!/usr/bin/env python3 |
| # Copyright 2025 Google LLC |
| |
| # 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 . Context import Context |
| from . IndexRange import IndexRange |
| from . StringList import StringList |
| |
| class TestCreate(unittest.TestCase): |
| def test_creation(self) -> None: |
| x = Context() |
| self.assertIsInstance(x.string_total_len, int) |
| self.assertIsInstance(x.string_buffer, list) |
| self.assertIsInstance(x.strings, dict) |
| self.assertEqual(x.string_total_len, 0) |
| self.assertEqual(x.string_buffer, []) |
| self.assertEqual(x.strings, {}) |
| |
| class TestString(unittest.TestCase): |
| def test_AddString_new(self) -> None: |
| x = Context() |
| abc_ir = x.AddString("abc") |
| self.assertEqual(abc_ir, IndexRange(0,4)) |
| self.assertEqual(x.string_total_len, 4) |
| self.assertEqual(x.string_buffer, ["abc"]) |
| self.assertEqual(x.strings, {"abc": IndexRange(0,4)}) |
| |
| qz_ir = x.AddString("qz") |
| self.assertEqual(qz_ir, IndexRange(4,3)) |
| self.assertEqual(x.string_total_len, 7) |
| self.assertEqual(x.string_buffer, ["abc", "qz"]) |
| self.assertEqual(x.strings, {"abc": IndexRange(0,4), "qz": IndexRange(4,3)}) |
| |
| empty_ir = x.AddString("") |
| self.assertEqual(empty_ir, IndexRange(7,1)) |
| self.assertEqual(x.string_total_len, 8) |
| self.assertEqual(x.string_buffer, ["abc", "qz", ""]) |
| self.assertEqual(x.strings, {"abc": IndexRange(0,4), "qz": IndexRange(4,3), "": IndexRange(7,1)}) |
| |
| def test_AddString_idempotent(self) -> None: |
| x = Context() |
| abc_ir = x.AddString("abc") |
| self.assertEqual(abc_ir, IndexRange(0,4)) |
| self.assertEqual(x.string_total_len, 4) |
| self.assertEqual(x.string_buffer, ["abc"]) |
| self.assertEqual(x.strings, {"abc": IndexRange(0,4)}) |
| |
| abc_ir = x.AddString("abc") |
| self.assertEqual(abc_ir, IndexRange(0,4)) |
| self.assertEqual(x.string_total_len, 4) |
| self.assertEqual(x.string_buffer, ["abc"]) |
| self.assertEqual(x.strings, {"abc": IndexRange(0,4)}) |
| |
| class TestStringList(unittest.TestCase): |
| def test_AddStringList_empty(self) -> None: |
| x = Context() |
| x_ir = x.AddStringList('x', []) |
| self.assertEqual(x_ir, IndexRange(0,0)) |
| self.assertEqual(x.string_buffer, []) |
| self.assertEqual(x.range_buffer, { 'x': [] }) |
| self.assertEqual(x.ranges, {'x': {StringList([]): IndexRange(0,0)}}) |
| |
| def test_AddgStringList_nonempty(self) -> None: |
| x = Context() |
| x_ir = x.AddStringList('x', ["abc", "def"]) |
| |
| self.assertEqual(x_ir, IndexRange(0,2)) |
| self.assertEqual(x.range_buffer, {'x': [IndexRange(0,4), IndexRange(4,4)]}) |
| self.assertEqual(x.ranges, {'x': {StringList(['abc','def']): IndexRange(0,2)}}) |
| |
| def test_AddgStringList_nonempty_idempotent(self) -> None: |
| x = Context() |
| x_ir = x.AddStringList('x', ["abc", "def"]) |
| y_ir = x.AddStringList('x', ["abc", "def"]) |
| |
| self.assertEqual(x_ir, IndexRange(0,2)) |
| self.assertEqual(y_ir, IndexRange(0,2)) |
| self.assertEqual(x.range_buffer, {'x': [IndexRange(0,4), IndexRange(4,4)]}) |
| self.assertEqual(x.ranges, {'x': {StringList(['abc','def']): IndexRange(0,2)}}) |
| |
| def test_AddgStringList_nonempty_does_not_sort(self) -> None: |
| x = Context() |
| x_ir = x.AddStringList('x', ["abc", "def"]) |
| y_ir = x.AddStringList('x', ["def", "abc"]) |
| |
| self.assertEqual(x_ir, IndexRange(0,2)) |
| self.assertEqual(y_ir, IndexRange(2,2)) |
| self.assertEqual(x.range_buffer, {'x': [IndexRange(0,4), |
| IndexRange(4,4), |
| IndexRange(4,4), |
| IndexRange(0,4)]}) |
| self.assertEqual(x.ranges, {'x':{StringList(['abc','def']): IndexRange(0,2), |
| StringList(['def','abc']): IndexRange(2,2)}}) |
| |
| def test_AddgStringList_separate_by_kind(self) -> None: |
| x = Context() |
| x_ir = x.AddStringList('x', ["abc", "def"]) |
| y_ir = x.AddStringList('y', ["ghi", "abc"]) |
| |
| self.assertEqual(x_ir, IndexRange(0,2)) |
| self.assertEqual(y_ir, IndexRange(0,2)) |
| self.assertEqual(x.range_buffer, |
| {'x': [IndexRange(0,4), IndexRange(4,4)], |
| 'y': [IndexRange(8,4), IndexRange(0,4)]}) |
| self.assertEqual(x.ranges, {'x': {StringList(['abc','def']): IndexRange(0,2)}, |
| 'y': {StringList(['ghi','abc']): IndexRange(0,2)}}) |
| |
| if __name__ == "__main__": |
| unittest.main() |