def test_pattern_flat(): assert Required(OneOrMore(Argument('N')), Option('-a'), Argument('M')).flat() == \ [Argument('N'), Option('-a'), Argument('M')] assert Required(Optional(OptionsShortcut()), Optional(Option('-a', None))).flat(OptionsShortcut) == \ [OptionsShortcut()]
def test_parse_pattern(): o = [Option("-h"), Option("-v", "--verbose"), Option("-f", "--file", 1)] assert parse_pattern("[ -h ]", options=o) == Required(NotRequired(Option("-h"))) assert parse_pattern("[ ARG ... ]", options=o) == Required(NotRequired(OneOrMore(Argument("ARG")))) assert parse_pattern("[ -h | -v ]", options=o) == Required(NotRequired(Either(Option("-h"), Option("-v", "--verbose")))) assert parse_pattern("( -h | -v [ --file <f> ] )", options=o) == Required( Required(Either(Option("-h"), Required(Option("-v", "--verbose"), NotRequired(Option("-f", "--file", 1, None))))) ) assert parse_pattern("(-h|-v[--file=<f>]N...)", options=o) == Required( Required(Either(Option("-h"), Required(Option("-v", "--verbose"), NotRequired(Option("-f", "--file", 1, None)), OneOrMore(Argument("N"))))) ) assert parse_pattern("(N [M | (K | L)] | O P)", options=[]) == Required( Required( Either( Required(Argument("N"), NotRequired(Either(Argument("M"), Required(Either(Argument("K"), Argument("L")))))), Required(Argument("O"), Argument("P")), ) ) ) assert parse_pattern("[ -h ] [N]", options=o) == Required(NotRequired(Option("-h")), NotRequired(Argument("N"))) assert parse_pattern("[options]", options=o) == Required(NotRequired(OptionsShortcut())) assert parse_pattern("[options] A", options=o) == Required(NotRequired(OptionsShortcut()), Argument("A")) assert parse_pattern("-v [options]", options=o) == Required(Option("-v", "--verbose"), NotRequired(OptionsShortcut())) assert parse_pattern("ADD", options=o) == Required(Argument("ADD")) assert parse_pattern("<add>", options=o) == Required(Argument("<add>")) assert parse_pattern("add", options=o) == Required(Command("add"))
def test_pattern_flat(): assert Required( OneOrMore(Argument("N")), Option("-a"), Argument("M")).flat() == [Argument("N"), Option("-a"), Argument("M")] assert Required(NotRequired(OptionsShortcut()), NotRequired(Option("-a", None))).flat(OptionsShortcut) == [ OptionsShortcut() ]
def test_parse_pattern(): o = [Option('-h'), Option('-v', '--verbose'), Option('-f', '--file', 1)] assert parse_pattern('[ -h ]', options=o) == \ Required(Optional(Option('-h'))) assert parse_pattern('[ ARG ... ]', options=o) == \ Required(Optional(OneOrMore(Argument('ARG')))) assert parse_pattern('[ -h | -v ]', options=o) == \ Required(Optional(Either(Option('-h'), Option('-v', '--verbose')))) assert parse_pattern('( -h | -v [ --file <f> ] )', options=o) == \ Required(Required( Either(Option('-h'), Required(Option('-v', '--verbose'), Optional(Option('-f', '--file', 1, None)))))) assert parse_pattern('(-h|-v[--file=<f>]N...)', options=o) == \ Required(Required(Either(Option('-h'), Required(Option('-v', '--verbose'), Optional(Option('-f', '--file', 1, None)), OneOrMore(Argument('N')))))) assert parse_pattern('(N [M | (K | L)] | O P)', options=[]) == \ Required(Required(Either( Required(Argument('N'), Optional(Either(Argument('M'), Required(Either(Argument('K'), Argument('L')))))), Required(Argument('O'), Argument('P'))))) assert parse_pattern('[ -h ] [N]', options=o) == \ Required(Optional(Option('-h')), Optional(Argument('N'))) assert parse_pattern('[options]', options=o) == \ Required(Optional(OptionsShortcut())) assert parse_pattern('[options] A', options=o) == \ Required(Optional(OptionsShortcut()), Argument('A')) assert parse_pattern('-v [options]', options=o) == \ Required(Option('-v', '--verbose'), Optional(OptionsShortcut())) assert parse_pattern('ADD', options=o) == Required(Argument('ADD')) assert parse_pattern('<add>', options=o) == Required(Argument('<add>')) assert parse_pattern('add', options=o) == Required(Command('add'))