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))
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)
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)
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)
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)
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))