| #!/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() |