xref: /aosp_15_r20/external/bazelbuild-rules_testing/tests/matching/matching_tests.bzl (revision d605057434dcabba796c020773aab68d9790ff9f)
1*d6050574SRomain Jobredeaux"""Tests for matchers."""
2*d6050574SRomain Jobredeaux
3*d6050574SRomain Jobredeauxload("//lib:test_suite.bzl", "test_suite")
4*d6050574SRomain Jobredeauxload("//lib:truth.bzl", "matching")
5*d6050574SRomain Jobredeaux
6*d6050574SRomain Jobredeaux_tests = []
7*d6050574SRomain Jobredeaux
8*d6050574SRomain Jobredeauxdef _file(path):
9*d6050574SRomain Jobredeaux    _, _, basename = path.rpartition("/")
10*d6050574SRomain Jobredeaux    _, _, extension = basename.rpartition(".")
11*d6050574SRomain Jobredeaux    return struct(
12*d6050574SRomain Jobredeaux        path = path,
13*d6050574SRomain Jobredeaux        basename = basename,
14*d6050574SRomain Jobredeaux        extension = extension,
15*d6050574SRomain Jobredeaux    )
16*d6050574SRomain Jobredeaux
17*d6050574SRomain Jobredeauxdef _verify_matcher(env, matcher, match_true, match_false):
18*d6050574SRomain Jobredeaux    # Test positive match
19*d6050574SRomain Jobredeaux    env.expect.where(matcher = matcher.desc, value = match_true).that_bool(
20*d6050574SRomain Jobredeaux        matcher.match(match_true),
21*d6050574SRomain Jobredeaux        expr = "matcher.match(value)",
22*d6050574SRomain Jobredeaux    ).equals(True)
23*d6050574SRomain Jobredeaux
24*d6050574SRomain Jobredeaux    # Test negative match
25*d6050574SRomain Jobredeaux    env.expect.where(matcher = matcher.desc, value = match_false).that_bool(
26*d6050574SRomain Jobredeaux        matcher.match(match_false),
27*d6050574SRomain Jobredeaux        expr = "matcher.match(value)",
28*d6050574SRomain Jobredeaux    ).equals(False)
29*d6050574SRomain Jobredeaux
30*d6050574SRomain Jobredeauxdef _contains_test(env):
31*d6050574SRomain Jobredeaux    _verify_matcher(
32*d6050574SRomain Jobredeaux        env,
33*d6050574SRomain Jobredeaux        matching.contains("x"),
34*d6050574SRomain Jobredeaux        match_true = "YYYxZZZ",
35*d6050574SRomain Jobredeaux        match_false = "zzzzz",
36*d6050574SRomain Jobredeaux    )
37*d6050574SRomain Jobredeaux
38*d6050574SRomain Jobredeaux_tests.append(_contains_test)
39*d6050574SRomain Jobredeaux
40*d6050574SRomain Jobredeauxdef _file_basename_equals_test(env):
41*d6050574SRomain Jobredeaux    _verify_matcher(
42*d6050574SRomain Jobredeaux        env,
43*d6050574SRomain Jobredeaux        matching.file_basename_equals("bar.txt"),
44*d6050574SRomain Jobredeaux        match_true = _file("foo/bar.txt"),
45*d6050574SRomain Jobredeaux        match_false = _file("foo/bar.md"),
46*d6050574SRomain Jobredeaux    )
47*d6050574SRomain Jobredeaux
48*d6050574SRomain Jobredeaux_tests.append(_file_basename_equals_test)
49*d6050574SRomain Jobredeaux
50*d6050574SRomain Jobredeauxdef _file_extension_in_test(env):
51*d6050574SRomain Jobredeaux    _verify_matcher(
52*d6050574SRomain Jobredeaux        env,
53*d6050574SRomain Jobredeaux        matching.file_extension_in(["txt", "rst"]),
54*d6050574SRomain Jobredeaux        match_true = _file("foo.txt"),
55*d6050574SRomain Jobredeaux        match_false = _file("foo.py"),
56*d6050574SRomain Jobredeaux    )
57*d6050574SRomain Jobredeaux
58*d6050574SRomain Jobredeaux_tests.append(_file_extension_in_test)
59*d6050574SRomain Jobredeaux
60*d6050574SRomain Jobredeauxdef _is_in_test(env):
61*d6050574SRomain Jobredeaux    _verify_matcher(
62*d6050574SRomain Jobredeaux        env,
63*d6050574SRomain Jobredeaux        matching.is_in(["a", "b"]),
64*d6050574SRomain Jobredeaux        match_true = "a",
65*d6050574SRomain Jobredeaux        match_false = "z",
66*d6050574SRomain Jobredeaux    )
67*d6050574SRomain Jobredeaux
68*d6050574SRomain Jobredeaux_tests.append(_is_in_test)
69*d6050574SRomain Jobredeaux
70*d6050574SRomain Jobredeauxdef _str_matchers_test(env):
71*d6050574SRomain Jobredeaux    _verify_matcher(
72*d6050574SRomain Jobredeaux        env,
73*d6050574SRomain Jobredeaux        matching.str_matches("f*b"),
74*d6050574SRomain Jobredeaux        match_true = "foobar",
75*d6050574SRomain Jobredeaux        match_false = "nope",
76*d6050574SRomain Jobredeaux    )
77*d6050574SRomain Jobredeaux
78*d6050574SRomain Jobredeaux    _verify_matcher(
79*d6050574SRomain Jobredeaux        env,
80*d6050574SRomain Jobredeaux        matching.str_endswith("123"),
81*d6050574SRomain Jobredeaux        match_true = "abc123",
82*d6050574SRomain Jobredeaux        match_false = "123xxx",
83*d6050574SRomain Jobredeaux    )
84*d6050574SRomain Jobredeaux
85*d6050574SRomain Jobredeaux    _verify_matcher(
86*d6050574SRomain Jobredeaux        env,
87*d6050574SRomain Jobredeaux        matching.str_startswith("true"),
88*d6050574SRomain Jobredeaux        match_true = "truechew",
89*d6050574SRomain Jobredeaux        match_false = "notbuck",
90*d6050574SRomain Jobredeaux    )
91*d6050574SRomain Jobredeaux
92*d6050574SRomain Jobredeaux_tests.append(_str_matchers_test)
93*d6050574SRomain Jobredeaux
94*d6050574SRomain Jobredeauxdef matching_test_suite(name):
95*d6050574SRomain Jobredeaux    test_suite(
96*d6050574SRomain Jobredeaux        name = name,
97*d6050574SRomain Jobredeaux        basic_tests = _tests,
98*d6050574SRomain Jobredeaux    )
99