From 875232bc3e6bf55cc31f3763449503a80a7c2382 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Tue, 8 May 2018 13:08:44 +0200 Subject: tests/py: Highlight offending parts in differences warnings Print the non-equal parts of the two rules in yellow when printing the differences warning. Signed-off-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- tests/py/nft-test.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py index 6684bcd1..1e26d182 100755 --- a/tests/py/nft-test.py +++ b/tests/py/nft-test.py @@ -122,8 +122,41 @@ def print_warning(reason, filename=None, lineno=None): print_msg(reason, filename, lineno, Colors.YELLOW, "WARNING:") +def color_differences(rule, other, color): + rlen = len(rule) + olen = len(other) + + # find equal part at start + for i in range(rlen): + if i >= olen or rule[i] != other[i]: + break + start_idx = i + + # find equal part at end + found = False + for i in range(-1, start_idx -rlen - 1, -1): + if i < start_idx -olen: + break + if rule[i] != other[i]: + found = True + break + end_idx = i + if found: + end_idx += 1 + + out = "" + if start_idx > 0: + out += rule[:start_idx] + out += color + rule[start_idx:end_idx] + Colors.ENDC + if end_idx < 0: + out += rule[end_idx:] + + return out + def print_differences_warning(filename, lineno, rule1, rule2, cmd): - reason = "'" + rule1 + "' mismatches '" + rule2 + "'" + colored_rule1 = color_differences(rule1, rule2, Colors.YELLOW) + colored_rule2 = color_differences(rule2, rule1, Colors.YELLOW) + reason = "'" + colored_rule1 + "' mismatches '" + colored_rule2 + "'" print filename + ": " + Colors.YELLOW + "WARNING: " + Colors.ENDC + \ "line: " + str(lineno + 1) + ": '" + cmd + "': " + reason -- cgit v1.2.3