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))
Exemplo n.º 2
0
    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)