| """Common test helpers for unit tests.""" |
| |
| load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") |
| |
| def assert_argv_contains_not(env, action, flag): |
| asserts.true( |
| env, |
| flag not in action.argv, |
| "Expected {args} to not contain {flag}".format(args = action.argv, flag = flag), |
| ) |
| |
| def assert_argv_contains(env, action, flag): |
| asserts.true( |
| env, |
| flag in action.argv, |
| "Expected {args} to contain {flag}".format(args = action.argv, flag = flag), |
| ) |
| |
| def assert_argv_contains_prefix_suffix(env, action, prefix, suffix): |
| for found_flag in action.argv: |
| if found_flag.startswith(prefix) and found_flag.endswith(suffix): |
| return |
| unittest.fail( |
| env, |
| "Expected an arg with prefix '{prefix}' and suffix '{suffix}' in {args}".format( |
| prefix = prefix, |
| suffix = suffix, |
| args = action.argv, |
| ), |
| ) |
| |
| def assert_argv_contains_prefix(env, action, prefix): |
| for found_flag in action.argv: |
| if found_flag.startswith(prefix): |
| return |
| unittest.fail( |
| env, |
| "Expected an arg with prefix '{prefix}' in {args}".format( |
| prefix = prefix, |
| args = action.argv, |
| ), |
| ) |
| |
| def assert_argv_contains_prefix_not(env, action, prefix): |
| for found_flag in action.argv: |
| if found_flag.startswith(prefix): |
| unittest.fail( |
| env, |
| "Expected an arg with prefix '{prefix}' to not appear in {args}".format( |
| prefix = prefix, |
| args = action.argv, |
| ), |
| ) |
| |
| def assert_action_mnemonic(env, action, mnemonic): |
| if not action.mnemonic == mnemonic: |
| unittest.fail( |
| env, |
| "Expected the action to have the mnemonic '{expected}', but got '{actual}'".format( |
| expected = mnemonic, |
| actual = action.mnemonic, |
| ), |
| ) |
| |
| def _startswith(list, prefix): |
| if len(list) < len(prefix): |
| return False |
| for pair in zip(list[:len(prefix) + 1], prefix): |
| if pair[0] != pair[1]: |
| return False |
| return True |
| |
| def assert_list_contains_adjacent_elements(env, list_under_test, adjacent_elements): |
| """Assert that list_under_test contains given adjacent flags. |
| |
| Args: |
| env: env from analysistest.begin(ctx). |
| list_under_test: list supposed to contain adjacent elements. |
| adjacent_elements: list of elements to be found inside list_under_test. |
| """ |
| for idx in range(len(list_under_test)): |
| if list_under_test[idx] == adjacent_elements[0]: |
| if _startswith(list_under_test[idx:], adjacent_elements): |
| return |
| |
| unittest.fail( |
| env, |
| "Expected the to find '{expected}' within '{actual}'".format( |
| expected = adjacent_elements, |
| actual = list_under_test, |
| ), |
| ) |
| |
| def assert_list_contains_adjacent_elements_not(env, list_under_test, adjacent_elements): |
| """Assert that list_under_test does not contains given adjacent flags. |
| |
| Args: |
| env: env from analysistest.begin(ctx). |
| list_under_test: list supposed not to contain adjacent elements. |
| adjacent_elements: list of elements not to be found inside list_under_test.""" |
| for idx in range(len(list_under_test)): |
| if list_under_test[idx] == adjacent_elements[0]: |
| if _startswith(list_under_test[idx:], adjacent_elements): |
| unittest.fail( |
| env, |
| "Expected not the to find '{expected}' within '{actual}'".format( |
| expected = adjacent_elements, |
| actual = list_under_test, |
| ), |
| ) |
| |
| def assert_env_value(env, action, key, value): |
| asserts.true( |
| env, |
| action.env[key] == value, |
| "Expected env[{key}] to be equal to '{value}', got '{real_value}'".format( |
| key = key, |
| value = value, |
| real_value = action.env[key], |
| ), |
| ) |