aboutsummaryrefslogtreecommitdiff
path: root/absl/flags/tests
diff options
context:
space:
mode:
authorGregory P. Smith <gps@google.com>2022-02-08 14:36:36 -0800
committerCopybara-Service <copybara-worker@google.com>2022-02-08 14:37:19 -0800
commitcbd6e4477b792affe061fae02c262baeee3a7524 (patch)
tree85cbb2caec77e60189d4d01dd7de6ae60f278ea9 /absl/flags/tests
parentbab9bc25509e5628fc9df80726aa89e19d505871 (diff)
downloadabsl-py-cbd6e4477b792affe061fae02c262baeee3a7524.tar.gz
Prevent the truthiness of absl.flags Flag instances from being tested in a bool context (not useful) to avoid situations where someone really wanted to refer to `their_flag.value` instead. This prevents logic bugs.
There were ~10 problems found by this and cleaned up in our internal codebase. PiperOrigin-RevId: 427295923 Change-Id: Ifc9e086133986cc14d052a06889a93c1ab0ff688
Diffstat (limited to 'absl/flags/tests')
-rw-r--r--absl/flags/tests/_flag_test.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/absl/flags/tests/_flag_test.py b/absl/flags/tests/_flag_test.py
index 800a00c..492f117 100644
--- a/absl/flags/tests/_flag_test.py
+++ b/absl/flags/tests/_flag_test.py
@@ -35,6 +35,7 @@ from absl.testing import parameterized
class FlagTest(absltest.TestCase):
def setUp(self):
+ super().setUp()
self.flag = _flag.Flag(
_argument_parser.ArgumentParser(),
_argument_parser.ArgumentSerializer(),
@@ -59,6 +60,11 @@ class FlagTest(absltest.TestCase):
'number', 1, 'help')
self.assertEqual(1, flag.default_unparsed)
+ def test_no_truthiness(self):
+ with self.assertRaises(TypeError):
+ if self.flag:
+ self.fail('Flag instances must raise rather than be truthy.')
+
def test_set_default_overrides_current_value(self):
self.assertEqual('apple', self.flag.value)
self.flag._set_default('orange')
@@ -71,14 +77,14 @@ class FlagTest(absltest.TestCase):
self.assertEqual('apple', self.flag.value)
def test_pickle(self):
- with self.assertRaisesRegexp(TypeError, "can't pickle Flag objects"):
+ with self.assertRaisesRegex(TypeError, "can't pickle Flag objects"):
pickle.dumps(self.flag)
def test_copy(self):
self.flag.value = 'orange'
- with self.assertRaisesRegexp(
- TypeError, 'Flag does not support shallow copies'):
+ with self.assertRaisesRegex(TypeError,
+ 'Flag does not support shallow copies'):
copy.copy(self.flag)
flag2 = copy.deepcopy(self.flag)
@@ -172,10 +178,10 @@ class EnumClassFlagTest(parameterized.TestCase):
class MultiEnumClassFlagTest(parameterized.TestCase):
@parameterized.named_parameters(
- ('NoHelpSupplied', '', '<apple|orange>: (no help available);\n '
+ ('NoHelpSupplied', '', '<apple|orange>: (no help available);\n ' +
'repeat this option to specify a list of values', False),
('WithHelpSupplied', 'Type of fruit.',
- '<APPLE|ORANGE>: Type of fruit.;\n '
+ '<APPLE|ORANGE>: Type of fruit.;\n ' +
'repeat this option to specify a list of values', True))
def test_help_text(self, helptext_input, helptext_output, case_sensitive):
f = _flag.MultiEnumClassFlag(