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