xref: /llvm-project/llvm/utils/filecheck_lint/filecheck_lint_test.py (revision 42ebf3eaafc2a5c3c9338020186c0ad44cc4edf7)
1f702c759SBenjamin Chetioui# ===----------------------------------------------------------------------===##
2f702c759SBenjamin Chetioui#
3f702c759SBenjamin Chetioui# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f702c759SBenjamin Chetioui# See https://llvm.org/LICENSE.txt for license information.
5f702c759SBenjamin Chetioui# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f702c759SBenjamin Chetioui#
7f702c759SBenjamin Chetioui# ===----------------------------------------------------------------------===##
8f702c759SBenjamin Chetiouiimport unittest
9f702c759SBenjamin Chetioui
10f702c759SBenjamin Chetiouiimport filecheck_lint as fcl
11f702c759SBenjamin Chetioui
12f702c759SBenjamin Chetioui
13f702c759SBenjamin Chetiouiclass TestParser(unittest.TestCase):
14f702c759SBenjamin Chetioui    def test_parse_all_additional_prefixes(self):
15f702c759SBenjamin Chetioui        def run(content, expected_prefixes):
16f702c759SBenjamin Chetioui            prefixes = set(fcl.parse_custom_prefixes(content))
17f702c759SBenjamin Chetioui            for prefix in expected_prefixes:
18f702c759SBenjamin Chetioui                self.assertIn(prefix, prefixes)
19f702c759SBenjamin Chetioui
20f702c759SBenjamin Chetioui        for content, expected_prefixes in [
21b71edfaaSTobias Hieta            ("-check-prefix=PREFIX", {"PREFIX"}),
22b71edfaaSTobias Hieta            ("-check-prefix='PREFIX'", {"PREFIX"}),
23b71edfaaSTobias Hieta            ('-check-prefix="PREFIX"', {"PREFIX"}),
24b71edfaaSTobias Hieta            ("-check-prefix PREFIX", {"PREFIX"}),
25b71edfaaSTobias Hieta            ("-check-prefix      PREFIX", {"PREFIX"}),
26b71edfaaSTobias Hieta            ("-check-prefixes=PREFIX1,PREFIX2", {"PREFIX1", "PREFIX2"}),
27b71edfaaSTobias Hieta            ("-check-prefixes PREFIX1,PREFIX2", {"PREFIX1", "PREFIX2"}),
28f702c759SBenjamin Chetioui            (
29f702c759SBenjamin Chetioui                """-check-prefix=PREFIX1 -check-prefix PREFIX2
30f702c759SBenjamin Chetioui            -check-prefixes=PREFIX3,PREFIX4 -check-prefix=PREFIX5
31f702c759SBenjamin Chetioui            -check-prefixes PREFIX6,PREFIX7 -check-prefixes=PREFIX8',
32f702c759SBenjamin Chetioui         """,  # pylint: disable=bad-continuation
33b71edfaaSTobias Hieta                {f"PREFIX{i}" for i in range(1, 9)},
34b71edfaaSTobias Hieta            ),
35f702c759SBenjamin Chetioui        ]:
36f702c759SBenjamin Chetioui            run(content, expected_prefixes)
37f702c759SBenjamin Chetioui
38f702c759SBenjamin Chetioui    def test_additional_prefixes_uniquely(self):
39b71edfaaSTobias Hieta        lines = ["--check-prefix=SOME-PREFIX", "--check-prefix=SOME-PREFIX"]
40b71edfaaSTobias Hieta        prefixes = set(fcl.parse_custom_prefixes("\n".join(lines)))
41f702c759SBenjamin Chetioui        assert len(prefixes) == 1
42f702c759SBenjamin Chetioui
43f702c759SBenjamin Chetioui
44f702c759SBenjamin Chetiouiclass TestTypoDetection(unittest.TestCase):
45f702c759SBenjamin Chetioui    def test_find_potential_directives_comment_prefix(self):
46b71edfaaSTobias Hieta        lines = ["junk; CHCK1:", "junk// CHCK2:", "SOME CHCK3:"]
47b71edfaaSTobias Hieta        content = "\n".join(lines)
48f702c759SBenjamin Chetioui
49f702c759SBenjamin Chetioui        results = list(fcl.find_potential_directives(content))
50f702c759SBenjamin Chetioui        assert len(results) == 3
51f702c759SBenjamin Chetioui        pos, match = results[0]
52*42ebf3eaSklensy        assert pos.as_str() == "1:7-11"
53b71edfaaSTobias Hieta        assert match == "CHCK1"
54f702c759SBenjamin Chetioui
55f702c759SBenjamin Chetioui        pos, match = results[1]
56*42ebf3eaSklensy        assert pos.as_str() == "2:8-12"
57b71edfaaSTobias Hieta        assert match == "CHCK2"
58f702c759SBenjamin Chetioui
59f702c759SBenjamin Chetioui        pos, match = results[2]
60*42ebf3eaSklensy        assert pos.as_str() == "3:1-10"
61b71edfaaSTobias Hieta        assert match == "SOME CHCK3"
62f702c759SBenjamin Chetioui
63f702c759SBenjamin Chetioui    def test_levenshtein(self):
64f702c759SBenjamin Chetioui        for s1, s2, distance in [
65b71edfaaSTobias Hieta            ("Levenshtein", "Levenstin", 2),  # 2 insertions
66b71edfaaSTobias Hieta            ("Levenshtein", "Levenstherin", 3),  # 1 insertion, 2 deletions
67b71edfaaSTobias Hieta            ("Levenshtein", "Lenvinshtein", 2),  # 1 deletion, 1 substitution
68b71edfaaSTobias Hieta            ("Levenshtein", "Levenshtein", 0),  # identical strings
69f702c759SBenjamin Chetioui        ]:
70f702c759SBenjamin Chetioui            assert fcl.levenshtein(s1, s2) == distance
71