def test_command_argument_parser_setup_completers(self): command_map = { FakeCommandWithCompleters.command_spec.command_name: FakeCommandWithCompleters() } runner = CommandRunner( bucket_storage_uri_class=self.mock_bucket_storage_uri, gsutil_api_class_map_factory=self.mock_gsutil_api_class_map_factory, command_map=command_map) subparsers = FakeArgparseSubparsers() runner.ConfigureCommandArgumentParsers(subparsers) self.assertEqual(1, len(subparsers.parsers)) parser = subparsers.parsers[0] self.assertEqual(6, len(parser.arguments)) self.assertEqual(CloudObjectCompleter, type(parser.arguments[0].completer)) self.assertEqual(LocalObjectCompleter, type(parser.arguments[1].completer)) self.assertEqual( CloudOrLocalObjectCompleter, type(parser.arguments[2].completer)) self.assertEqual( NoOpCompleter, type(parser.arguments[3].completer)) self.assertEqual(CloudObjectCompleter, type(parser.arguments[4].completer)) self.assertEqual( LocalObjectOrCannedACLCompleter, type(parser.arguments[5].completer))
def test_command_argument_parser_setup_nested_argparse_arguments(self): command_map = { FakeCommandWithNestedArguments.command_spec.command_name: FakeCommandWithNestedArguments(), } runner = CommandRunner( bucket_storage_uri_class=self.mock_bucket_storage_uri, gsutil_api_class_map_factory=self. mock_gsutil_api_class_map_factory, command_map=command_map) parser = FakeArgparseParser() runner.ConfigureCommandArgumentParsers(parser) # Start at first level of subparsers. cur_subparser = parser.subparsers.parsers[0] self.assertEqual( cur_subparser.name, FakeCommandWithNestedArguments.command_spec.command_name) # Go one level further, checking the current subparser's first subparser. cur_subparser = cur_subparser.subparsers.parsers[0] self.assertEqual(cur_subparser.name, FakeCommandWithNestedArguments.subcommand_name) cur_subparser = cur_subparser.subparsers.parsers[0] self.assertEqual(cur_subparser.name, FakeCommandWithNestedArguments.subcommand_subname) # FakeArgparseParser adds a FakeArgparseArgument in place of any arguments # passed in via add_argument(), so we can't check for anything beyond the # presence of the correct number of arguments here. self.assertEqual(len(cur_subparser.arguments), FakeCommandWithNestedArguments.num_args)
def test_command_argument_parser_setup_invalid_completer(self): command_map = { FakeCommandWithInvalidCompleter.command_spec.command_name: FakeCommandWithInvalidCompleter() } runner = CommandRunner( bucket_storage_uri_class=self.mock_bucket_storage_uri, gsutil_api_class_map_factory=self.mock_gsutil_api_class_map_factory, command_map=command_map) subparsers = FakeArgparseSubparsers() try: runner.ConfigureCommandArgumentParsers(subparsers) except RuntimeError as e: self.assertIn('Unknown completer', e.message)