clap/clap-tests/run_tests.py

195 lines
6.7 KiB
Python
Executable file

#!/usr/bin/env python
import sys
import subprocess
failed = False
_help = '''claptests 0.0.1
Kevin K. <kbknapp@gmail.com>
tests clap library
USAGE:
claptests [FLAGS] [OPTIONS] [POSITIONAL] [SUBCOMMANDS]
FLAGS:
-f, --flag tests flags
-F tests flags with exclusions
-h, --help Prints help information
-v, --version Prints version information
OPTIONS:
-o, --option=opt... tests options
--long-option-2=option2 tests long options with exclusions
-O option3 tests options with specific value sets [values: fast slow]
POSITIONAL ARGUMENTS:
positional tests positionals
positional2 tests positionals with exclusions
positional3... tests positionals with specific values [values: emacs vi]
SUBCOMMANDS:
help Prints this message
subcmd tests subcommands'''
_excluded = '''The argument -f cannot be used with one or more of the other specified arguments
USAGE:
claptests [FLAGS] [OPTIONS] --long-option-2=option2 [POSITIONAL] [SUBCOMMANDS]
For more information try --help'''
_required = '''One or more required arguments were not supplied
USAGE:
claptests [FLAGS] [OPTIONS] --long-option-2=option2 [POSITIONAL] [SUBCOMMANDS]
For more information try --help'''
_fop = '''flag present 1 times
option present 1 times with value: some
An option: some
positional present with value: value
flag2 NOT present
option2 maybe present with value of: Nothing
positional2 maybe present with value of: Nothing
option3 NOT present
positional3 NOT present
option present 1 times with value: some
An option: some
positional present with value: value
subcmd NOT present'''
_f2op = '''flag present 2 times
option present 1 times with value: some
An option: some
positional present with value: value
flag2 NOT present
option2 maybe present with value of: Nothing
positional2 maybe present with value of: Nothing
option3 NOT present
positional3 NOT present
option present 1 times with value: some
An option: some
positional present with value: value
subcmd NOT present'''
_o2p = '''flag NOT present
option present 2 times with value: some
An option: some
An option: other
positional present with value: value
flag2 NOT present
option2 maybe present with value of: Nothing
positional2 maybe present with value of: Nothing
option3 NOT present
positional3 NOT present
option present 2 times with value: some
An option: some
An option: other
positional present with value: value
subcmd NOT present'''
_schelp = '''claptests-subcmd 0.1
Kevin K. <kbknapp@gmail.com>
tests subcommands
USAGE:
claptests subcmd [FLAGS] [OPTIONS] [POSITIONAL]
FLAGS:
-h, --help Prints help information
-f, --flag tests flags
-v, --version Prints version information
OPTIONS:
-o, --option=scoption... tests options
POSITIONAL ARGUMENTS:
scpositional tests positionals'''
_scfop = '''flag NOT present
option NOT present
positional NOT present
flag2 NOT present
option2 maybe present with value of: Nothing
positional2 maybe present with value of: Nothing
option3 NOT present
positional3 NOT present
option NOT present
positional NOT present
subcmd present
scflag present 1 times
scoption present with value: some
An scoption: some
scpositional present with value: value'''
_scf2op = '''flag NOT present
option NOT present
positional NOT present
flag2 NOT present
option2 maybe present with value of: Nothing
positional2 maybe present with value of: Nothing
option3 NOT present
positional3 NOT present
option NOT present
positional NOT present
subcmd present
scflag present 2 times
scoption present with value: some
An scoption: some
scpositional present with value: value'''
_bin = './target/release/claptests'
cmds = {'help short: ': ['{} -h'.format(_bin), _help],
'help long: ': ['{} --help'.format(_bin), _help],
'help subcmd: ': ['{} help'.format(_bin), _help],
'excluded first: ': ['{} -f -F'.format(_bin), _excluded],
'excluded last: ': ['{} -F -f'.format(_bin), _excluded],
'missing required: ': ['{} -F'.format(_bin), _required],
'F2(ll),O(s),P: ': ['{} --flag --flag -o some value'.format(_bin), _f2op],
'F2(ss),O(s),P: ': ['{} -f -f -o some value'.format(_bin), _f2op],
'O2(ll)P: ': ['{} --option some --option other value'.format(_bin), _o2p],
'O2(l=l=)P: ': ['{} --option=some --option=other value'.format(_bin), _o2p],
'O2(ss)P: ': ['{} -o some -o other value'.format(_bin), _o2p],
'F2(s2),O(s),P: ': ['{} -ff -o some value'.format(_bin), _f2op],
'F(s),O(s),P: ': ['{} -f -o some value'.format(_bin), _fop],
'F(l),O(l),P: ': ['{} --flag --option some value'.format(_bin), _fop],
'F(l),O(l=),P: ': ['{} --flag --option=some value'.format(_bin), _fop],
'sc help short: ': ['{} subcmd -h'.format(_bin), _schelp],
'sc help long: ': ['{} subcmd --help'.format(_bin), _schelp],
'scF(l),O(l),P: ': ['{} subcmd --flag --option some value'.format(_bin), _scfop],
'scF(l),O(s),P: ': ['{} subcmd --flag -o some value'.format(_bin), _scfop],
'scF(l),O(l=),P: ': ['{} subcmd --flag --option=some value'.format(_bin), _scfop],
'scF(s),O(l),P: ': ['{} subcmd -f --option some value'.format(_bin), _scfop],
'scF(s),O(s),P: ': ['{} subcmd -f -o some value'.format(_bin), _scfop],
'scF(s),O(l=),P: ': ['{} subcmd -f --option=some value'.format(_bin), _scfop],
'scF2(s),O(l),P: ': ['{} subcmd -ff --option some value'.format(_bin), _scf2op],
'scF2(s),O(s),P: ': ['{} subcmd -ff -o some value'.format(_bin), _scf2op],
'scF2(s),O(l=),P: ': ['{} subcmd -ff --option=some value'.format(_bin), _scf2op],
'scF2(l2),O(l),P: ': ['{} subcmd --flag --flag --option some value'.format(_bin), _scf2op],
'scF2(l2),O(s),P: ': ['{} subcmd --flag --flag -o some value'.format(_bin), _scf2op],
'scF2(l2),O(l=),P: ': ['{} subcmd --flag --flag --option=some value'.format(_bin), _scf2op],
'scF2(s2),O(l),P: ': ['{} subcmd -f -f --option some value'.format(_bin), _scf2op],
'scF2(s2),O(s),P: ': ['{} subcmd -f -f -o some value'.format(_bin), _scf2op],
'scF2(s2),O(l=),P: ': ['{} subcmd -f -f --option=some value'.format(_bin), _scf2op]
}
def pass_fail(name, check, good):
global failed
print(name, end='')
if check == good:
print('Pass')
return
failed = True
print('Fail\n\tShould be: {}\n\tBut is: {}'.format(good, check))
def main():
for cmd, cmd_v in cmds.items():
with subprocess.Popen(cmd_v[0], shell=True, stdout=subprocess.PIPE, universal_newlines=True) as proc:
out = proc.communicate()[0].strip()
pass_fail(cmd, out, cmd_v[1])
if failed:
print('One or more tests failed')
return 1
print('All tests passed!')
if __name__ == '__main__':
sys.exit(main())