xref: /aosp_15_r20/external/emboss/compiler/util/test_util_test.py (revision 99e0aae7469b87d12f0ad23e61142c2d74c1ef70)
1*99e0aae7SDavid Rees# Copyright 2019 Google LLC
2*99e0aae7SDavid Rees#
3*99e0aae7SDavid Rees# Licensed under the Apache License, Version 2.0 (the "License");
4*99e0aae7SDavid Rees# you may not use this file except in compliance with the License.
5*99e0aae7SDavid Rees# You may obtain a copy of the License at
6*99e0aae7SDavid Rees#
7*99e0aae7SDavid Rees#     https://www.apache.org/licenses/LICENSE-2.0
8*99e0aae7SDavid Rees#
9*99e0aae7SDavid Rees# Unless required by applicable law or agreed to in writing, software
10*99e0aae7SDavid Rees# distributed under the License is distributed on an "AS IS" BASIS,
11*99e0aae7SDavid Rees# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*99e0aae7SDavid Rees# See the License for the specific language governing permissions and
13*99e0aae7SDavid Rees# limitations under the License.
14*99e0aae7SDavid Rees
15*99e0aae7SDavid Rees"""Tests for front_end.test_util."""
16*99e0aae7SDavid Rees
17*99e0aae7SDavid Reesimport unittest
18*99e0aae7SDavid Rees
19*99e0aae7SDavid Reesfrom compiler.util import ir_data
20*99e0aae7SDavid Reesfrom compiler.util import parser_types
21*99e0aae7SDavid Reesfrom compiler.util import test_util
22*99e0aae7SDavid Rees
23*99e0aae7SDavid Rees
24*99e0aae7SDavid Reesclass ProtoIsSupersetTest(unittest.TestCase):
25*99e0aae7SDavid Rees  """Tests for test_util.proto_is_superset."""
26*99e0aae7SDavid Rees
27*99e0aae7SDavid Rees  def test_superset_extra_optional_field(self):
28*99e0aae7SDavid Rees    self.assertEqual(
29*99e0aae7SDavid Rees        (True, ""),
30*99e0aae7SDavid Rees        test_util.proto_is_superset(
31*99e0aae7SDavid Rees            ir_data.Structure(
32*99e0aae7SDavid Rees                field=[ir_data.Field()],
33*99e0aae7SDavid Rees                source_location=parser_types.parse_location("1:2-3:4")),
34*99e0aae7SDavid Rees            ir_data.Structure(field=[ir_data.Field()])))
35*99e0aae7SDavid Rees
36*99e0aae7SDavid Rees  def test_superset_extra_repeated_field(self):
37*99e0aae7SDavid Rees    self.assertEqual(
38*99e0aae7SDavid Rees        (True, ""),
39*99e0aae7SDavid Rees        test_util.proto_is_superset(
40*99e0aae7SDavid Rees            ir_data.Structure(
41*99e0aae7SDavid Rees                field=[ir_data.Field(), ir_data.Field()],
42*99e0aae7SDavid Rees                source_location=parser_types.parse_location("1:2-3:4")),
43*99e0aae7SDavid Rees            ir_data.Structure(field=[ir_data.Field()])))
44*99e0aae7SDavid Rees
45*99e0aae7SDavid Rees  def test_superset_missing_empty_repeated_field(self):
46*99e0aae7SDavid Rees    self.assertEqual(
47*99e0aae7SDavid Rees        (False, "field[0] missing"),
48*99e0aae7SDavid Rees        test_util.proto_is_superset(
49*99e0aae7SDavid Rees            ir_data.Structure(
50*99e0aae7SDavid Rees                field=[],
51*99e0aae7SDavid Rees                source_location=parser_types.parse_location("1:2-3:4")),
52*99e0aae7SDavid Rees            ir_data.Structure(field=[ir_data.Field(), ir_data.Field()])))
53*99e0aae7SDavid Rees
54*99e0aae7SDavid Rees  def test_superset_missing_empty_optional_field(self):
55*99e0aae7SDavid Rees    self.assertEqual((False, "source_location missing"),
56*99e0aae7SDavid Rees                     test_util.proto_is_superset(
57*99e0aae7SDavid Rees                         ir_data.Structure(field=[]),
58*99e0aae7SDavid Rees                         ir_data.Structure(source_location=ir_data.Location())))
59*99e0aae7SDavid Rees
60*99e0aae7SDavid Rees  def test_array_element_differs(self):
61*99e0aae7SDavid Rees    self.assertEqual(
62*99e0aae7SDavid Rees        (False,
63*99e0aae7SDavid Rees         "field[0].source_location.start.line differs: found 1, expected 2"),
64*99e0aae7SDavid Rees        test_util.proto_is_superset(
65*99e0aae7SDavid Rees            ir_data.Structure(
66*99e0aae7SDavid Rees                field=[ir_data.Field(source_location=parser_types.parse_location(
67*99e0aae7SDavid Rees                    "1:2-3:4"))]),
68*99e0aae7SDavid Rees            ir_data.Structure(
69*99e0aae7SDavid Rees                field=[ir_data.Field(source_location=parser_types.parse_location(
70*99e0aae7SDavid Rees                    "2:2-3:4"))])))
71*99e0aae7SDavid Rees
72*99e0aae7SDavid Rees  def test_equal(self):
73*99e0aae7SDavid Rees    self.assertEqual(
74*99e0aae7SDavid Rees        (True, ""),
75*99e0aae7SDavid Rees        test_util.proto_is_superset(parser_types.parse_location("1:2-3:4"),
76*99e0aae7SDavid Rees                                    parser_types.parse_location("1:2-3:4")))
77*99e0aae7SDavid Rees
78*99e0aae7SDavid Rees  def test_superset_missing_optional_field(self):
79*99e0aae7SDavid Rees    self.assertEqual(
80*99e0aae7SDavid Rees        (False, "source_location missing"),
81*99e0aae7SDavid Rees        test_util.proto_is_superset(
82*99e0aae7SDavid Rees            ir_data.Structure(field=[ir_data.Field()]),
83*99e0aae7SDavid Rees            ir_data.Structure(
84*99e0aae7SDavid Rees                field=[ir_data.Field()],
85*99e0aae7SDavid Rees                source_location=parser_types.parse_location("1:2-3:4"))))
86*99e0aae7SDavid Rees
87*99e0aae7SDavid Rees  def test_optional_field_differs(self):
88*99e0aae7SDavid Rees    self.assertEqual((False, "end.line differs: found 4, expected 3"),
89*99e0aae7SDavid Rees                     test_util.proto_is_superset(
90*99e0aae7SDavid Rees                         parser_types.parse_location("1:2-4:4"),
91*99e0aae7SDavid Rees                         parser_types.parse_location("1:2-3:4")))
92*99e0aae7SDavid Rees
93*99e0aae7SDavid Rees  def test_non_message_repeated_field_equal(self):
94*99e0aae7SDavid Rees    self.assertEqual((True, ""),
95*99e0aae7SDavid Rees                     test_util.proto_is_superset(
96*99e0aae7SDavid Rees                         ir_data.CanonicalName(object_path=[]),
97*99e0aae7SDavid Rees                         ir_data.CanonicalName(object_path=[])))
98*99e0aae7SDavid Rees
99*99e0aae7SDavid Rees  def test_non_message_repeated_field_missing_element(self):
100*99e0aae7SDavid Rees    self.assertEqual(
101*99e0aae7SDavid Rees        (False, "object_path differs: found {none!r}, expected {a!r}".format(
102*99e0aae7SDavid Rees            none=[],
103*99e0aae7SDavid Rees            a=[u"a"])),
104*99e0aae7SDavid Rees        test_util.proto_is_superset(
105*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=[]),
106*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=[u"a"])))
107*99e0aae7SDavid Rees
108*99e0aae7SDavid Rees  def test_non_message_repeated_field_element_differs(self):
109*99e0aae7SDavid Rees    self.assertEqual(
110*99e0aae7SDavid Rees        (False, "object_path differs: found {aa!r}, expected {ab!r}".format(
111*99e0aae7SDavid Rees            aa=[u"a", u"a"],
112*99e0aae7SDavid Rees            ab=[u"a", u"b"])),
113*99e0aae7SDavid Rees        test_util.proto_is_superset(
114*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=[u"a", u"a"]),
115*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=[u"a", u"b"])))
116*99e0aae7SDavid Rees
117*99e0aae7SDavid Rees  def test_non_message_repeated_field_extra_element(self):
118*99e0aae7SDavid Rees    # For repeated fields of int/bool/str values, the entire list is treated as
119*99e0aae7SDavid Rees    # an atomic unit, and should be equal.
120*99e0aae7SDavid Rees    self.assertEqual(
121*99e0aae7SDavid Rees        (False,
122*99e0aae7SDavid Rees         "object_path differs: found {!r}, expected {!r}".format(
123*99e0aae7SDavid Rees             [u"a", u"a"], [u"a"])),
124*99e0aae7SDavid Rees        test_util.proto_is_superset(
125*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=["a", "a"]),
126*99e0aae7SDavid Rees            ir_data.CanonicalName(object_path=["a"])))
127*99e0aae7SDavid Rees
128*99e0aae7SDavid Rees  def test_non_message_repeated_field_no_expected_value(self):
129*99e0aae7SDavid Rees    # When a repeated field is empty, it is the same as if it were entirely
130*99e0aae7SDavid Rees    # missing -- there is no way to differentiate those two conditions.
131*99e0aae7SDavid Rees    self.assertEqual((True, ""),
132*99e0aae7SDavid Rees                     test_util.proto_is_superset(
133*99e0aae7SDavid Rees                         ir_data.CanonicalName(object_path=["a", "a"]),
134*99e0aae7SDavid Rees                         ir_data.CanonicalName(object_path=[])))
135*99e0aae7SDavid Rees
136*99e0aae7SDavid Rees
137*99e0aae7SDavid Reesclass DictFileReaderTest(unittest.TestCase):
138*99e0aae7SDavid Rees  """Tests for dict_file_reader."""
139*99e0aae7SDavid Rees
140*99e0aae7SDavid Rees  def test_empty_dict(self):
141*99e0aae7SDavid Rees    reader = test_util.dict_file_reader({})
142*99e0aae7SDavid Rees    self.assertEqual((None, ["File 'anything' not found."]), reader("anything"))
143*99e0aae7SDavid Rees    self.assertEqual((None, ["File '' not found."]), reader(""))
144*99e0aae7SDavid Rees
145*99e0aae7SDavid Rees  def test_one_element_dict(self):
146*99e0aae7SDavid Rees    reader = test_util.dict_file_reader({"m": "abc"})
147*99e0aae7SDavid Rees    self.assertEqual((None, ["File 'not_there' not found."]),
148*99e0aae7SDavid Rees                     reader("not_there"))
149*99e0aae7SDavid Rees    self.assertEqual((None, ["File '' not found."]), reader(""))
150*99e0aae7SDavid Rees    self.assertEqual(("abc", None), reader("m"))
151*99e0aae7SDavid Rees
152*99e0aae7SDavid Rees  def test_two_element_dict(self):
153*99e0aae7SDavid Rees    reader = test_util.dict_file_reader({"m": "abc", "n": "def"})
154*99e0aae7SDavid Rees    self.assertEqual((None, ["File 'not_there' not found."]),
155*99e0aae7SDavid Rees                     reader("not_there"))
156*99e0aae7SDavid Rees    self.assertEqual((None, ["File '' not found."]), reader(""))
157*99e0aae7SDavid Rees    self.assertEqual(("abc", None), reader("m"))
158*99e0aae7SDavid Rees    self.assertEqual(("def", None), reader("n"))
159*99e0aae7SDavid Rees
160*99e0aae7SDavid Rees  def test_dict_with_empty_key(self):
161*99e0aae7SDavid Rees    reader = test_util.dict_file_reader({"m": "abc", "": "def"})
162*99e0aae7SDavid Rees    self.assertEqual((None, ["File 'not_there' not found."]),
163*99e0aae7SDavid Rees                     reader("not_there"))
164*99e0aae7SDavid Rees    self.assertEqual((None, ["File 'None' not found."]), reader(None))
165*99e0aae7SDavid Rees    self.assertEqual(("abc", None), reader("m"))
166*99e0aae7SDavid Rees    self.assertEqual(("def", None), reader(""))
167*99e0aae7SDavid Rees
168*99e0aae7SDavid Rees
169*99e0aae7SDavid Reesif __name__ == "__main__":
170*99e0aae7SDavid Rees  unittest.main()
171