def test_parser_grammar(self):
with open(self._test_fn, "r") as f:
reader = csv.DictReader(f, delimiter=str("\t"))
fail_cases = []
for row in reader:
if row["Func"].startswith("#"):
continue
# setup input
inputs = self._split_inputs(row["Test"], row["InType"])
expected_results = self._split_inputs(row["Expected"], row["InType"]) if row["Expected"] else inputs
expected_map = dict(zip(inputs, expected_results))
# step through each item and check
is_valid = True if row["Valid"].lower() == "true" else False
for key in expected_map:
expected_result = six.text_type(expected_map[key]).replace("u'", "'")
function_to_test = getattr(self.p._grammar(key), row["Func"])
row_str = u"{}\t{}\t{}\t{}\t{}".format(row["Func"], key, row["Valid"], "one", expected_result)
try:
actual_result = six.text_type(function_to_test()).replace("u'", "'")
if not is_valid or (expected_result != actual_result):
print("expected: {} actual:{}".format(expected_result, actual_result))
fail_cases.append(row_str)
except Exception as e:
if is_valid:
print("expected: {} Exception: {}".format(expected_result, e))
fail_cases.append(row_str)
# everything should have passed - report whatever failed
self.assertTrue(len(fail_cases) == 0, pprint.pprint(fail_cases))
评论列表
文章目录