def test_help_np(): stdout, stderr = run_main(['--help-np']) # Let's extract section titles: # enough of bin/datalad and .tox/py27/bin/datalad -- guarantee consistency! ;) ok_startswith(stdout, 'Usage: datalad') # Sections start/end with * if ran under DATALAD_HELP2MAN mode sections = [l[1:-1] for l in filter(re.compile('^\*.*\*$').match, stdout.split('\n'))] # but order is still not guaranteed (dict somewhere)! TODO # see https://travis-ci.org/datalad/datalad/jobs/80519004 # thus testing sets for s in {'Commands for dataset operations', 'Commands for metadata handling', 'Miscellaneous commands', 'General information', 'Global options', 'Plumbing commands', 'Plugins'}: assert_in(s, sections) # none of the lines must be longer than 80 chars # TODO: decide on create-sibling and possibly # rewrite-urls accepted_width = get_console_width() long_lines = ["%d %s" % (len(l), l) for l in stdout.split('\n') if len(l) > accepted_width and '{' not in l # on nd70 summary line is unsplit ] if long_lines: raise AssertionError( "Following lines in --help output were longer than %s chars:\n%s" % (accepted_width, '\n'.join(long_lines)) )
def get_description_with_cmd_summary(grp_short_descriptions, interface_groups, parser_description): from ..interface.base import dedent_docstring lgr.debug("Generating detailed description for the parser") cmd_summary = [] console_width = get_console_width() for i, grp in enumerate(sorted(interface_groups, key=lambda x: x[1])): grp_descr = grp[1] grp_cmds = grp_short_descriptions[i] cmd_summary.append('\n*%s*\n' % (grp_descr, )) for cd in grp_cmds: cmd_summary.append(' %s\n%s' % ((cd[0], textwrap.fill(cd[1].rstrip(' .'), console_width - 5, initial_indent=' ' * 6, subsequent_indent=' ' * 6)))) # we need one last formal section to not have the trailed be # confused with the last command group cmd_summary.append('\n*General information*\n') detailed_description = '%s\n%s\n\n%s' \ % (parser_description, '\n'.join(cmd_summary), textwrap.fill(dedent_docstring("""\ Detailed usage information for individual commands is available via command-specific --help, i.e.: datalad <command> --help"""), console_width - 5, initial_indent='', subsequent_indent='')) return detailed_description
def test_help_np(): stdout, stderr = run_main(['--help-np']) # Let's extract section titles: # enough of bin/datalad and .tox/py27/bin/datalad -- guarantee consistency! ;) ok_startswith(stdout, 'Usage: datalad') # Sections start/end with * if ran under DATALAD_HELP2MAN mode sections = [ l[1:-1] for l in filter(re.compile(r'^\*.*\*$').match, stdout.split('\n')) ] for s in { 'Essential commands', 'Commands for metadata handling', 'Miscellaneous commands', 'General information', 'Global options', 'Plumbing commands', }: assert_in(s, sections) # should be present only one time! eq_(stdout.count(s), 1) assert_all_commands_present(stdout) if not get_terminal_size()[0] or 0: raise SkipTest( "Could not determine terminal size, skipping the rest of the test") # none of the lines must be longer than 80 chars # TODO: decide on create-sibling and possibly # rewrite-urls accepted_width = get_console_width() long_lines = [ "%d %s" % (len(l), l) for l in stdout.split('\n') if len(l) > accepted_width and '{' not in l # on nd70 summary line is unsplit ] if long_lines: raise AssertionError( "Following lines in --help output were longer than %s chars:\n%s" % (accepted_width, '\n'.join(long_lines)))
def get_description_with_cmd_summary(grp_short_descriptions, interface_groups, parser_description): from ..interface.base import dedent_docstring from ..interface.base import get_cmd_summaries lgr.debug("Generating detailed description for the parser") console_width = get_console_width() cmd_summary = get_cmd_summaries(grp_short_descriptions, interface_groups, width=console_width) # we need one last formal section to not have the trailed be # confused with the last command group cmd_summary.append('\n*General information*\n') detailed_description = '%s\n%s\n\n%s' \ % (parser_description, '\n'.join(cmd_summary), textwrap.fill(dedent_docstring("""\ Detailed usage information for individual commands is available via command-specific --help, i.e.: datalad <command> --help"""), console_width - 5, initial_indent='', subsequent_indent='')) return detailed_description