| # Copyright 2017 The Abseil Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Auxiliary module for testing flags.py. |
| |
| The purpose of this module is to define a few flags. We want to make |
| sure the unit tests for flags.py involve more than one module. |
| """ |
| |
| from absl import flags |
| from absl.flags import _helpers |
| |
| FLAGS = flags.FLAGS |
| |
| |
| def define_flags(flag_values=FLAGS): |
| """Defines some flags. |
| |
| Args: |
| flag_values: The FlagValues object we want to register the flags |
| with. |
| """ |
| # The 'tmod_bar_' prefix (short for 'test_module_bar') ensures there |
| # is no name clash with the existing flags. |
| flags.DEFINE_boolean('tmod_bar_x', True, 'Boolean flag.', |
| flag_values=flag_values) |
| flags.DEFINE_string('tmod_bar_y', 'default', 'String flag.', |
| flag_values=flag_values) |
| flags.DEFINE_boolean('tmod_bar_z', False, |
| 'Another boolean flag from module bar.', |
| flag_values=flag_values) |
| flags.DEFINE_integer('tmod_bar_t', 4, 'Sample int flag.', |
| flag_values=flag_values) |
| flags.DEFINE_integer('tmod_bar_u', 5, 'Sample int flag.', |
| flag_values=flag_values) |
| flags.DEFINE_integer('tmod_bar_v', 6, 'Sample int flag.', |
| flag_values=flag_values) |
| |
| |
| def remove_one_flag(flag_name, flag_values=FLAGS): |
| """Removes the definition of one flag from flags.FLAGS. |
| |
| Note: if the flag is not defined in flags.FLAGS, this function does |
| not do anything (in particular, it does not raise any exception). |
| |
| Motivation: We use this function for cleanup *after* a test: if |
| there was a failure during a test and not all flags were declared, |
| we do not want the cleanup code to crash. |
| |
| Args: |
| flag_name: A string, the name of the flag to delete. |
| flag_values: The FlagValues object we remove the flag from. |
| """ |
| if flag_name in flag_values: |
| flag_values.__delattr__(flag_name) |
| |
| |
| def names_of_defined_flags(): |
| """Returns: List of names of the flags declared in this module.""" |
| return ['tmod_bar_x', |
| 'tmod_bar_y', |
| 'tmod_bar_z', |
| 'tmod_bar_t', |
| 'tmod_bar_u', |
| 'tmod_bar_v'] |
| |
| |
| def remove_flags(flag_values=FLAGS): |
| """Deletes the flag definitions done by the above define_flags(). |
| |
| Args: |
| flag_values: The FlagValues object we remove the flags from. |
| """ |
| for flag_name in names_of_defined_flags(): |
| remove_one_flag(flag_name, flag_values=flag_values) |
| |
| |
| def get_module_name(): |
| """Uses get_calling_module() to return the name of this module. |
| |
| For checking that get_calling_module works as expected. |
| |
| Returns: |
| A string, the name of this module. |
| """ |
| return _helpers.get_calling_module() |
| |
| |
| def execute_code(code, global_dict): |
| """Executes some code in a given global environment. |
| |
| For testing of get_calling_module. |
| |
| Args: |
| code: A string, the code to be executed. |
| global_dict: A dictionary, the global environment that code should |
| be executed in. |
| """ |
| # Indeed, using exec generates a lint warning. But some user code |
| # actually uses exec, and we have to test for it ... |
| exec(code, global_dict) # pylint: disable=exec-used |
| |
| |
| def disclaim_key_flags(): |
| """Disclaims flags declared in this module.""" |
| flags.disclaim_key_flags() |