aboutsummaryrefslogtreecommitdiff
path: root/absl/flags/tests
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2020-02-12 15:58:40 -0800
committerCopybara-Service <copybara-worker@google.com>2020-02-12 15:58:56 -0800
commitf2918386487b65394a2004b466538b14299347b7 (patch)
treec0bf5b88c0e7a7e5afce8fecfe06a318fb7979cd /absl/flags/tests
parente8fb252483bf2ff82021104298b6fd0b80d2f0f0 (diff)
downloadabsl-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.py47
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()