def testConvertValueEnum(self): choices = [ yaml_command_schema_util.Choice({'arg_value': 'a', 'enum_value': 'thing-one'}), yaml_command_schema_util.Choice({'arg_value': 'c', 'enum_value': 'thing-two'})] choices = yaml_command_schema_util.Choice.ToChoiceMap(choices) # Non-repeated. self.assertEqual( fm.FakeMessage.FakeEnum.THING_ONE, arg_utils.ConvertValue(fm.FakeMessage.enum1, 'a', choices=choices)) self.assertEqual( fm.FakeMessage.FakeEnum.THING_TWO, arg_utils.ConvertValue(fm.FakeMessage.enum1, 'c', choices=choices)) self.assertEqual( fm.FakeMessage.FakeEnum.THING_ONE, arg_utils.ConvertValue(fm.FakeMessage.enum1, 'thing-one', choices=choices)) self.assertEqual( fm.FakeMessage.FakeEnum.THING_TWO, arg_utils.ConvertValue(fm.FakeMessage.enum1, 'thing-two', choices=choices)) # Repeated. self.assertEqual( [fm.FakeMessage.FakeEnum.THING_ONE, fm.FakeMessage.FakeEnum.THING_TWO], arg_utils.ConvertValue(fm.FakeMessage.enum2, ['a', 'c'], choices=choices)) # Repeated field, but forced singular arg. self.assertEqual( [fm.FakeMessage.FakeEnum.THING_ONE], arg_utils.ConvertValue( fm.FakeMessage.enum2, 'a', repeated=False, choices=choices)) self.assertEqual( [fm.FakeMessage.FakeEnum.THING_TWO], arg_utils.ConvertValue( fm.FakeMessage.enum2, 'c', repeated=False, choices=choices)) self.assertEqual( [fm.FakeMessage.FakeEnum.THING_ONE], arg_utils.ConvertValue( fm.FakeMessage.enum2, 'thing-one', repeated=False, choices=choices)) self.assertEqual( [fm.FakeMessage.FakeEnum.THING_TWO], arg_utils.ConvertValue( fm.FakeMessage.enum2, 'thing-two', repeated=False, choices=choices))
def testGenerateFlagBasics(self): a = yaml_command_schema.Argument('asdf', 'foo', 'foo help') arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(arg.name, '--foo') self.assertEqual(self._MakeKwargs(), arg.kwargs) arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a, category='ASDF') self.assertDictContainsSubset(self._MakeKwargs(category='ASDF'), arg.kwargs) a = yaml_command_schema.Argument('foo', 'foo', 'foo help', default='junk') arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(self._MakeKwargs(default='junk'), arg.kwargs) a = yaml_command_schema.Argument( 'foo', 'foo', 'foo help', choices=[yaml_command_schema_util.Choice({'arg_value': 'a', 'enum_value': 'b'}), yaml_command_schema_util.Choice({'arg_value': 'c', 'enum_value': 'd'})]) arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(self._MakeKwargs(choices=['a', 'c']), arg.kwargs) a = yaml_command_schema.Argument('foo', 'foo', 'foo help', completer='junk') arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(self._MakeKwargs(completer='junk'), arg.kwargs) a = yaml_command_schema.Argument('foo', 'foo', 'foo help', hidden=True) arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(self._MakeKwargs(hidden=True), arg.kwargs) a = yaml_command_schema.Argument('foo', 'foo', 'foo help', required=True) arg = arg_utils.GenerateFlag(fm.FakeMessage.string1, a) self.assertEqual(self._MakeKwargs(required=True), arg.kwargs) # No api_field a = yaml_command_schema.Argument(None, 'foo', 'foo help', repeated=False) arg = arg_utils.GenerateFlag(None, a) self.assertEqual(arg.kwargs['type'], None) # Unknown type a = yaml_command_schema.Argument('foo', 'foo', 'foo help') with self.assertRaisesRegex( arg_utils.ArgumentGenerationError, r'Failed to generate argument for field \[message1\]: The field is of ' r'an unknown type.'): arg_utils.GenerateFlag(fm.FakeMessage.message1, a)
def FromData(cls, data): """Gets the arg definition from the spec data. Args: data: The spec data. Returns: Argument, the parsed argument. Raises: InvalidSchemaError: if the YAML command is malformed. """ group = data.get('group') if group: return ArgumentGroup.FromData(group) api_field = data.get('api_field') disable_unused_arg_check = data.get('disable_unused_arg_check') arg_name = data.get('arg_name', api_field) if not arg_name: raise util.InvalidSchemaError( 'An argument must have at least one of [api_field, arg_name].') is_positional = data.get('is_positional') flag_name = arg_name if is_positional else '--' + arg_name if data.get('default') and data.get('fallback'): raise util.InvalidSchemaError( 'An argument may have at most one of [default, fallback].') try: help_text = data['help_text'] except KeyError: raise util.InvalidSchemaError('An argument must have help_text.') choices = data.get('choices') return cls( api_field=api_field, arg_name=arg_name, help_text=help_text, metavar=data.get('metavar'), completer=util.Hook.FromData(data, 'completer'), is_positional=is_positional, type=util.ParseType(data.get('type')), choices=[util.Choice(d) for d in choices] if choices else None, default=data.get('default', arg_utils.UNSPECIFIED), fallback=util.Hook.FromData(data, 'fallback'), processor=util.Hook.FromData(data, 'processor'), required=data.get('required', False), hidden=data.get('hidden', False), action=util.ParseAction(data.get('action'), flag_name), repeated=data.get('repeated'), disable_unused_arg_check=disable_unused_arg_check, )
def testConvertValueWithChoices(self): choices = [ yaml_command_schema_util.Choice({'arg_value': 'a', 'enum_value': 'b'}), yaml_command_schema_util.Choice({'arg_value': 'c', 'enum_value': 'd'})] choices = yaml_command_schema_util.Choice.ToChoiceMap(choices) # Value not provided. self.assertEqual( None, arg_utils.ConvertValue(fm.FakeMessage.string1, None, choices=choices)) # Non-repeated. self.assertEqual( 'b', arg_utils.ConvertValue(fm.FakeMessage.string1, 'a', choices=choices)) self.assertEqual( 'd', arg_utils.ConvertValue(fm.FakeMessage.string1, 'c', choices=choices)) # Make sure case insensitive works. self.assertEqual( 'b', arg_utils.ConvertValue(fm.FakeMessage.string1, 'A', choices=choices)) # Repeated. self.assertEqual( ['b', 'b', 'd', 'd'], arg_utils.ConvertValue( fm.FakeMessage.string2, ['a', 'b', 'c', 'd'], choices=choices)) # Repeated field, but forced singular arg. self.assertEqual( ['b'], arg_utils.ConvertValue( fm.FakeMessage.string2, 'a', repeated=False, choices=choices)) self.assertEqual( ['d'], arg_utils.ConvertValue( fm.FakeMessage.string2, 'c', repeated=False, choices=choices))
def testChoice_DefaultEnumValue(self): data = {'arg_value': 'thing-one'} choice = util.Choice(data) self.assertEqual(choice.arg_value, 'thing-one') self.assertEqual(choice.enum_value, 'THING_ONE')
def testChoices(self): data = {'arg_value': 'thing-one', 'enum_value': fm.FakeMessage.FakeEnum.THING_ONE} choice = util.Choice(data) self.assertEqual(choice.arg_value, 'thing-one') self.assertEqual(choice.enum_value, fm.FakeMessage.FakeEnum.THING_ONE)