Ejemplo n.º 1
0
    def test_help_strings(self):
        flag_values = flags.FlagValues()

        # Should default to module.name, since the `greet` docstring is empty.
        _define_auto.DEFINE_auto('greet', greet, flag_values=flag_values)
        # Should use the custom help string.
        _define_auto.DEFINE_auto('point',
                                 Point,
                                 help_string='custom',
                                 flag_values=flag_values)

        self.assertEqual(flag_values['greet'].help,
                         f'{greet.__module__}.greet')
        self.assertEqual(flag_values['point'].help, 'custom')
Ejemplo n.º 2
0
    def test_basic_serialization(self):
        flag_values = flags.FlagValues()
        _define_auto.DEFINE_auto('point', Point, flag_values=flag_values)

        # Accessing flag_holder.value would raise an error here, since flags haven't
        # been parsed yet. For consistency we access the value via flag_values
        # throughout the test, rather than through a returned `FlagHolder`.
        initial_point_value = copy.deepcopy(flag_values['point'].value())

        # Parse flags, then serialize.
        flag_values(
            ('./program', '--point.x=1.2', '--point.y=3.5', '--point.label=p'))

        self.assertEqual(flag_values['point'].serialize(), _flags._EMPTY)
        self.assertEqual(flag_values['point.x'].serialize(), '--point.x=1.2')
        self.assertEqual(flag_values['point.label'].serialize(),
                         '--point.label=p')

        parsed_point_value = copy.deepcopy(flag_values['point'].value())

        self.assertEqual(parsed_point_value, Point(x=1.2, y=3.5, label='p'))
        self.assertNotEqual(parsed_point_value, initial_point_value)

        # Test a round trip.
        serialized_args = [
            flag_values[name].serialize() for name in flag_values
            if name.startswith('point.')
        ]

        flag_values.unparse_flags()  # Reset to defaults
        self.assertEqual(flag_values['point'].value(), initial_point_value)

        flag_values(['./program'] + serialized_args)
        self.assertEqual(flag_values['point'].value(), parsed_point_value)
Ejemplo n.º 3
0
 def test_dataclass(self):
     flag_values = flags.FlagValues()
     flag_holder = _define_auto.DEFINE_auto('point',
                                            Point,
                                            flag_values=flag_values)
     flag_values(('./program', '--point.x=2.0', '--point.y=-1.5',
                  '--point.label=p'))
     expected = Point(2.0, -1.5, 'p')
     self.assertEqual(expected, flag_holder.value())
Ejemplo n.º 4
0
 def test_override_kwargs(self):
     flag_values = flags.FlagValues()
     flag_holder = _define_auto.DEFINE_auto('point',
                                            Point,
                                            flag_values=flag_values)
     flag_values(('./program', '--point.x=2.0', '--point.y=-1.5',
                  '--point.label=p'))
     expected = Point(3.0, -1.5, 'p')
     # Here we override one of the arguments.
     self.assertEqual(expected, flag_holder.value(x=3.0))
Ejemplo n.º 5
0
 def test_function(self):
     flag_values = flags.FlagValues()
     flag_holder = _define_auto.DEFINE_auto('greet',
                                            greet,
                                            flag_values=flag_values)
     flag_values((
         './program',
         '--greet.greeting=Hi there',
         '--greet.targets=(\'Alice\', \'Bob\')',
     ))
     expected = 'Hi there Alice, Bob'
     self.assertEqual(expected, flag_holder.value())
Ejemplo n.º 6
0
    def test_disclaimed_module(self):
        flag_values = flags.FlagValues()
        _ = _define_auto.DEFINE_auto('greet',
                                     greet,
                                     'help string',
                                     flag_values=flag_values)
        defining_module = flag_values.find_module_defining_flag('greet')

        # The defining module should be the calling module, not the module where
        # the flag is defined. Otherwise the help for a module's flags will not be
        # printed unless the user uses --helpfull.
        self.assertIn('_define_auto_test', defining_module)
Ejemplo n.º 7
0
 def test_overriding_top_level_auto_flag_fails(self):
     flag_values = flags.FlagValues()
     _define_auto.DEFINE_auto('point', Point, flag_values=flag_values)
     with self.assertRaisesRegex(flags.IllegalFlagValueError,
                                 'Can\'t override an auto flag directly'):
         flag_values(('./program', '--point=2.0'))