| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | from flexmock import flexmockfrom borgmatic.commands import arguments as moduledef test_parse_subparser_arguments_consumes_subparser_arguments_before_subparser_name():    action_namespace = flexmock(foo=True)    subparsers = flexmock(        choices={            'action': flexmock(parse_known_args=lambda arguments: (action_namespace, [])),            'other': flexmock(),        }    )    arguments = module.parse_subparser_arguments(('--foo', 'true', 'action'), subparsers)    assert arguments == {'action': action_namespace}def test_parse_subparser_arguments_consumes_subparser_arguments_after_subparser_name():    action_namespace = flexmock(foo=True)    subparsers = flexmock(        choices={            'action': flexmock(parse_known_args=lambda arguments: (action_namespace, [])),            'other': flexmock(),        }    )    arguments = module.parse_subparser_arguments(('action', '--foo', 'true'), subparsers)    assert arguments == {'action': action_namespace}def test_parse_subparser_arguments_consumes_subparser_arguments_with_alias():    action_namespace = flexmock(foo=True)    action_subparser = flexmock(parse_known_args=lambda arguments: (action_namespace, []))    subparsers = flexmock(        choices={            'action': action_subparser,            '-a': action_subparser,            'other': flexmock(),            '-o': flexmock(),        }    )    flexmock(module).SUBPARSER_ALIASES = {'action': ['-a'], 'other': ['-o']}    arguments = module.parse_subparser_arguments(('-a', '--foo', 'true'), subparsers)    assert arguments == {'action': action_namespace}def test_parse_subparser_arguments_consumes_multiple_subparser_arguments():    action_namespace = flexmock(foo=True)    other_namespace = flexmock(bar=3)    subparsers = flexmock(        choices={            'action': flexmock(                parse_known_args=lambda arguments: (action_namespace, ['--bar', '3'])            ),            'other': flexmock(parse_known_args=lambda arguments: (other_namespace, [])),        }    )    arguments = module.parse_subparser_arguments(        ('action', '--foo', 'true', 'other', '--bar', '3'), subparsers    )    assert arguments == {'action': action_namespace, 'other': other_namespace}def test_parse_subparser_arguments_applies_default_subparsers():    prune_namespace = flexmock()    create_namespace = flexmock(progress=True)    check_namespace = flexmock()    subparsers = flexmock(        choices={            'prune': flexmock(parse_known_args=lambda arguments: (prune_namespace, ['--progress'])),            'create': flexmock(parse_known_args=lambda arguments: (create_namespace, [])),            'check': flexmock(parse_known_args=lambda arguments: (check_namespace, [])),            'other': flexmock(),        }    )    arguments = module.parse_subparser_arguments(('--progress'), subparsers)    assert arguments == {        'prune': prune_namespace,        'create': create_namespace,        'check': check_namespace,    }def test_parse_global_arguments_with_help_does_not_apply_default_subparsers():    global_namespace = flexmock(verbosity='lots')    action_namespace = flexmock()    top_level_parser = flexmock(parse_args=lambda arguments: global_namespace)    subparsers = flexmock(        choices={            'action': flexmock(                parse_known_args=lambda arguments: (action_namespace, ['--verbosity', 'lots'])            ),            'other': flexmock(),        }    )    arguments = module.parse_global_arguments(        ('--verbosity', 'lots', '--help'), top_level_parser, subparsers    )    assert arguments == global_namespacedef test_parse_global_arguments_consumes_global_arguments_before_subparser_name():    global_namespace = flexmock(verbosity='lots')    action_namespace = flexmock()    top_level_parser = flexmock(parse_args=lambda arguments: global_namespace)    subparsers = flexmock(        choices={            'action': flexmock(                parse_known_args=lambda arguments: (action_namespace, ['--verbosity', 'lots'])            ),            'other': flexmock(),        }    )    arguments = module.parse_global_arguments(        ('--verbosity', 'lots', 'action'), top_level_parser, subparsers    )    assert arguments == global_namespacedef test_parse_global_arguments_consumes_global_arguments_after_subparser_name():    global_namespace = flexmock(verbosity='lots')    action_namespace = flexmock()    top_level_parser = flexmock(parse_args=lambda arguments: global_namespace)    subparsers = flexmock(        choices={            'action': flexmock(                parse_known_args=lambda arguments: (action_namespace, ['--verbosity', 'lots'])            ),            'other': flexmock(),        }    )    arguments = module.parse_global_arguments(        ('action', '--verbosity', 'lots'), top_level_parser, subparsers    )    assert arguments == global_namespace
 |