1"""Common test helpers for unit tests.""" 2 3load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") 4 5def assert_argv_contains_not(env, action, flag): 6 asserts.true( 7 env, 8 flag not in action.argv, 9 "Expected {args} to not contain {flag}".format(args = action.argv, flag = flag), 10 ) 11 12def assert_argv_contains(env, action, flag): 13 asserts.true( 14 env, 15 flag in action.argv, 16 "Expected {args} to contain {flag}".format(args = action.argv, flag = flag), 17 ) 18 19def assert_argv_contains_prefix_suffix(env, action, prefix, suffix): 20 for found_flag in action.argv: 21 if found_flag.startswith(prefix) and found_flag.endswith(suffix): 22 return 23 unittest.fail( 24 env, 25 "Expected an arg with prefix '{prefix}' and suffix '{suffix}' in {args}".format( 26 prefix = prefix, 27 suffix = suffix, 28 args = action.argv, 29 ), 30 ) 31 32def assert_argv_contains_prefix(env, action, prefix): 33 for found_flag in action.argv: 34 if found_flag.startswith(prefix): 35 return 36 unittest.fail( 37 env, 38 "Expected an arg with prefix '{prefix}' in {args}".format( 39 prefix = prefix, 40 args = action.argv, 41 ), 42 ) 43 44def assert_argv_contains_prefix_not(env, action, prefix): 45 for found_flag in action.argv: 46 if found_flag.startswith(prefix): 47 unittest.fail( 48 env, 49 "Expected an arg with prefix '{prefix}' to not appear in {args}".format( 50 prefix = prefix, 51 args = action.argv, 52 ), 53 ) 54 55def assert_action_mnemonic(env, action, mnemonic): 56 if not action.mnemonic == mnemonic: 57 unittest.fail( 58 env, 59 "Expected the action to have the mnemonic '{expected}', but got '{actual}'".format( 60 expected = mnemonic, 61 actual = action.mnemonic, 62 ), 63 ) 64 65def _startswith(list, prefix): 66 if len(list) < len(prefix): 67 return False 68 for pair in zip(list[:len(prefix) + 1], prefix): 69 if pair[0] != pair[1]: 70 return False 71 return True 72 73def assert_list_contains_adjacent_elements(env, list_under_test, adjacent_elements): 74 """Assert that list_under_test contains given adjacent flags. 75 76 Args: 77 env: env from analysistest.begin(ctx). 78 list_under_test: list supposed to contain adjacent elements. 79 adjacent_elements: list of elements to be found inside list_under_test. 80 """ 81 for idx in range(len(list_under_test)): 82 if list_under_test[idx] == adjacent_elements[0]: 83 if _startswith(list_under_test[idx:], adjacent_elements): 84 return 85 86 unittest.fail( 87 env, 88 "Expected the to find '{expected}' within '{actual}'".format( 89 expected = adjacent_elements, 90 actual = list_under_test, 91 ), 92 ) 93 94def assert_list_contains_adjacent_elements_not(env, list_under_test, adjacent_elements): 95 """Assert that list_under_test does not contains given adjacent flags. 96 97 Args: 98 env: env from analysistest.begin(ctx). 99 list_under_test: list supposed not to contain adjacent elements. 100 adjacent_elements: list of elements not to be found inside list_under_test.""" 101 for idx in range(len(list_under_test)): 102 if list_under_test[idx] == adjacent_elements[0]: 103 if _startswith(list_under_test[idx:], adjacent_elements): 104 unittest.fail( 105 env, 106 "Expected not the to find '{expected}' within '{actual}'".format( 107 expected = adjacent_elements, 108 actual = list_under_test, 109 ), 110 ) 111 112def assert_env_value(env, action, key, value): 113 asserts.true( 114 env, 115 action.env[key] == value, 116 "Expected env[{key}] to be equal to '{value}', got '{real_value}'".format( 117 key = key, 118 value = value, 119 real_value = action.env[key], 120 ), 121 ) 122