Пример #1
0
    def test_fail_fast_single_flag_and_skip_remaining_validators(self):
        def raise_unexpected_error(x):
            del x
            raise _exceptions.ValidationError('Should not be raised.')

        _defines.DEFINE_float('flag_1',
                              None,
                              'flag 1',
                              flag_values=self.flag_values)
        _defines.DEFINE_float('flag_2',
                              4.2,
                              'flag 2',
                              flag_values=self.flag_values)
        _validators.mark_flag_as_required('flag_1',
                                          flag_values=self.flag_values)
        _validators.register_validator('flag_1',
                                       raise_unexpected_error,
                                       flag_values=self.flag_values)
        _validators.register_multi_flags_validator(
            ['flag_2', 'flag_1'],
            raise_unexpected_error,
            flag_values=self.flag_values)
        argv = ('./program', '')
        expected = (
            'flag --flag_1=None: Flag --flag_1 must have a value other than None.'
        )
        with self.assertRaises(_exceptions.IllegalFlagValueError) as cm:
            self.flag_values(argv)
        self.assertEqual(expected, str(cm.exception))
Пример #2
0
    def test_exception_raised_if_checker_raises_exception(self):
        def checker(flags_dict):
            self.call_args.append(flags_dict)
            values = flags_dict.values()
            # Make sure all the flags have different values.
            if len(set(values)) != len(values):
                raise _exceptions.ValidationError('Specific message')
            return True

        _validators.register_multi_flags_validator(
            ['foo', 'bar'],
            checker,
            message='Errors happen',
            flag_values=self.flag_values)

        argv = ('./program', )
        self.flag_values(argv)
        with self.assertRaises(_exceptions.IllegalFlagValueError) as cm:
            self.flag_values.bar = 1
        self.assertEqual('flags foo=1, bar=1: Specific message',
                         str(cm.exception))
        self.assertEqual([{
            'foo': 1,
            'bar': 2
        }, {
            'foo': 1,
            'bar': 1
        }], self.call_args)
Пример #3
0
    def test_exception_raised_if_checker_fails(self):
        def checker(flags_dict):
            self.call_args.append(flags_dict)
            values = flags_dict.values()
            # Make sure all the flags have different values.
            return len(set(values)) == len(values)

        _validators.register_multi_flags_validator(
            ['foo', 'bar'],
            checker,
            message='Errors happen',
            flag_values=self.flag_values)

        argv = ('./program', )
        self.flag_values(argv)
        try:
            self.flag_values.bar = 1
            raise AssertionError('IllegalFlagValueError expected')
        except _exceptions.IllegalFlagValueError as e:
            self.assertEqual('flags foo=1, bar=1: Errors happen', str(e))
        self.assertEqual([{
            'foo': 1,
            'bar': 2
        }, {
            'foo': 1,
            'bar': 1
        }], self.call_args)
Пример #4
0
    def test_validator_not_called_when_other_flag_is_changed(self):
        def checker(flags_dict):
            self.call_args.append(flags_dict)
            return True

        _defines.DEFINE_integer('other_flag',
                                3,
                                'Other integer flag',
                                flag_values=self.flag_values)
        _validators.register_multi_flags_validator(
            ['foo', 'bar'], checker, flag_values=self.flag_values)

        argv = ('./program', )
        self.flag_values(argv)
        self.flag_values.other_flag = 3
        self.assertEqual([{'foo': 1, 'bar': 2}], self.call_args)
Пример #5
0
    def test_success(self):
        def checker(flags_dict):
            self.call_args.append(flags_dict)
            return True

        _validators.register_multi_flags_validator(
            ['foo', 'bar'], checker, flag_values=self.flag_values)

        argv = ('./program', '--bar=2')
        self.flag_values(argv)
        self.assertEqual(1, self.flag_values.foo)
        self.assertEqual(2, self.flag_values.bar)
        self.assertEqual([{'foo': 1, 'bar': 2}], self.call_args)
        self.flag_values.foo = 3
        self.assertEqual(3, self.flag_values.foo)
        self.assertEqual([{
            'foo': 1,
            'bar': 2
        }, {
            'foo': 3,
            'bar': 2
        }], self.call_args)
Пример #6
0
    def test_fail_fast_multi_flag_and_skip_remaining_validators(self):
        def raise_expected_error(x):
            del x
            raise _exceptions.ValidationError('Expected error.')

        def raise_unexpected_error(x):
            del x
            raise _exceptions.ValidationError('Got unexpected error.')

        _defines.DEFINE_float('flag_1',
                              5.1,
                              'flag 1',
                              flag_values=self.flag_values)
        _defines.DEFINE_float('flag_2',
                              10.0,
                              'flag 2',
                              flag_values=self.flag_values)
        _validators.register_multi_flags_validator(
            ['flag_1', 'flag_2'],
            raise_expected_error,
            flag_values=self.flag_values)
        _validators.register_multi_flags_validator(
            ['flag_2', 'flag_1'],
            raise_unexpected_error,
            flag_values=self.flag_values)
        _validators.register_validator('flag_1',
                                       raise_unexpected_error,
                                       flag_values=self.flag_values)
        _validators.register_validator('flag_2',
                                       raise_unexpected_error,
                                       flag_values=self.flag_values)
        argv = ('./program', '')
        expected = ('flags flag_1=5.1, flag_2=10.0: Expected error.')
        with self.assertRaises(_exceptions.IllegalFlagValueError) as cm:
            self.flag_values(argv)
        self.assertEqual(expected, str(cm.exception))