diff options
author | Abseil Team <absl-team@google.com> | 2020-02-12 15:58:40 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2020-02-12 15:58:56 -0800 |
commit | f2918386487b65394a2004b466538b14299347b7 (patch) | |
tree | c0bf5b88c0e7a7e5afce8fecfe06a318fb7979cd /absl/flags/tests | |
parent | e8fb252483bf2ff82021104298b6fd0b80d2f0f0 (diff) | |
download | absl-py-f2918386487b65394a2004b466538b14299347b7.tar.gz |
DEFINE_* methods now return a FlagHolder instance and encourages coding pattern like
```
PORT = flags.DEFINE_integer('my_project_server_default_port', ...)
def method():
PORT.value
```
Results in the name of the flag appears only once in the source code.
- No more typoes.
- Provides a local name
- Linters can catch unused flags.
- Plays well with type checkers
PiperOrigin-RevId: 294778727
Change-Id: Ib1d1a7426968c59517e1c9f2f23962ba811ef914
Diffstat (limited to 'absl/flags/tests')
-rw-r--r-- | absl/flags/tests/_flagvalues_test.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/absl/flags/tests/_flagvalues_test.py b/absl/flags/tests/_flagvalues_test.py index c3d9549..978b8a5 100644 --- a/absl/flags/tests/_flagvalues_test.py +++ b/absl/flags/tests/_flagvalues_test.py @@ -835,5 +835,52 @@ class UnparsedFlagAccessTest(absltest.TestCase): _ = fv.a_str +class FlagHolderTest(absltest.TestCase): + + def setUp(self): + super(FlagHolderTest, self).setUp() + self.fv = _flagvalues.FlagValues() + self.name_flag = _defines.DEFINE_string( + 'name', 'default', 'help', flag_values=self.fv) + + def parse_flags(self, *argv): + self.fv.unparse_flags() + self.fv(['binary_name'] + list(argv)) + + def test_name(self): + self.assertEqual('name', self.name_flag.name) + + def test_value_before_flag_parsing(self): + with self.assertRaises(_exceptions.UnparsedFlagAccessError): + _ = self.name_flag.value + + def test_value_returns_default_value_if_not_explicitly_set(self): + self.parse_flags() + self.assertEqual('default', self.name_flag.value) + + def test_value_returns_explicitly_set_value(self): + self.parse_flags('--name=new_value') + self.assertEqual('new_value', self.name_flag.value) + + def test_non_none_value_fails_if_value_is_none(self): + self.parse_flags() + self.fv.name = None + with self.assertRaises(_exceptions.NoneValueError): + _ = self.name_flag.non_none_value + + def test_non_none_value(self): + self.parse_flags('--name=default') + self.assertEqual('default', self.name_flag.non_none_value) + + def test_allow_override(self): + first = _defines.DEFINE_integer( + 'int_flag', 1, 'help', flag_values=self.fv, allow_override=1) + second = _defines.DEFINE_integer( + 'int_flag', 2, 'help', flag_values=self.fv, allow_override=1) + self.parse_flags('--int_flag=3') + self.assertEqual(3, first.value) + self.assertEqual(3, second.value) + + if __name__ == '__main__': absltest.main() |