def testChoices(self): s = args.FlagsAndOptions() s.LongFlag('--ast-format', ['text', 'html']) arg_r = args.Reader(['--ast-format', 'text']) arg = s.Parse(arg_r) self.assertEqual('text', arg.ast_format) self.assertRaises( args.UsageError, s.Parse, args.Reader(['--ast-format', 'oops']))
else: readline = None log = util.log _tlog('after imports') def DefineCommonFlags(spec): """Common flags between OSH and Oil.""" spec.ShortFlag('-c', args.Str, quit_parsing_flags=True) # command string spec.LongFlag('--help') spec.LongFlag('--version') OSH_SPEC = args.FlagsAndOptions() DefineCommonFlags(OSH_SPEC) OSH_SPEC.ShortFlag('-i') # interactive # TODO: -h too # the output format when passing -n OSH_SPEC.LongFlag( '--ast-format', ['text', 'abbrev-text', 'html', 'abbrev-html', 'oheap', 'none'], default='abbrev-text') OSH_SPEC.LongFlag('--print-status') # TODO: Replace with a shell hook OSH_SPEC.LongFlag('--hijack-shebang') # TODO: Implement this OSH_SPEC.LongFlag('--debug-file', args.Str)
if arg.X: filter_pat = arg.X if filter_pat.startswith('!'): p = completion.GlobPredicate(False, filter_pat[1:]) else: p = completion.GlobPredicate(True, filter_pat) return completion.UserSpec(actions, extra_actions, else_actions, p, prefix=arg.P or '', suffix=arg.S or '') # git-completion.sh uses complete -o and complete -F COMPLETE_SPEC = args.FlagsAndOptions() _DefineFlags(COMPLETE_SPEC) _DefineOptions(COMPLETE_SPEC) _DefineActions(COMPLETE_SPEC) COMPLETE_SPEC.ShortFlag('-E', help='Define the compspec for an empty line') COMPLETE_SPEC.ShortFlag( '-D', help='Define the compspec that applies when nothing else matches') class Complete(object): """complete builtin - register a completion function. NOTE: It's has an Executor because it creates a ShellFuncAction, which needs an Executor.
def testFlagsAndOptions(self): s = args.FlagsAndOptions() s.ShortFlag('-c', args.Str) s.ShortFlag('-i', args.Str) s.LongFlag('--help') s.LongFlag('--rcfile', args.Str) s.LongFlag('--ast-format', ['text', 'html']) s.Option('e', 'errexit') s.Option('u', 'nounset') s.Option(None, 'pipefail') # don't parse args afterward arg_r = args.Reader( ['-c', 'echo hi', '-e', '-o', 'nounset', 'foo', '--help']) arg = s.Parse(arg_r) self.assertEqual(['foo', '--help'], arg_r.Rest()) self.assertEqual('echo hi', arg.c) self.assertEqual(None, arg.help) self.assertEqual(None, arg.i) self.assertEqual( [('errexit', True), ('nounset', True)], arg.opt_changes) arg_r = args.Reader(['+e', '+o', 'nounset', '-o', 'pipefail', 'foo']) arg = s.Parse(arg_r) self.assertEqual(['foo'], arg_r.Rest()) self.assertEqual(None, arg.i) self.assertEqual( [('errexit', False), ('nounset', False), ('pipefail', True)], arg.opt_changes) self.assertRaises( args.UsageError, s.Parse, args.Reader(['-o', 'pipefailX'])) arg_r = args.Reader(['-c', 'echo hi', '--help', '--rcfile', 'bashrc']) arg = s.Parse(arg_r) self.assertEqual('echo hi', arg.c) self.assertEqual(True, arg.help) self.assertEqual('bashrc', arg.rcfile) # This is an odd syntax! arg_r = args.Reader(['-euo', 'pipefail']) arg = s.Parse(arg_r) self.assertEqual( [('errexit', True), ('nounset', True), ('pipefail', True)], arg.opt_changes) self.assertEqual(2, arg_r.i) # Even weirder! arg_r = args.Reader(['+oeu', 'pipefail']) arg = s.Parse(arg_r) self.assertEqual( [('pipefail', False), ('errexit', False), ('nounset', False)], arg.opt_changes) self.assertEqual(2, arg_r.i) # Even weirder! arg_r = args.Reader(['+oo', 'pipefail', 'errexit']) arg = s.Parse(arg_r) self.assertEqual( [('pipefail', False), ('errexit', False)], arg.opt_changes) self.assertEqual(3, arg_r.i) # Now this is an arg. Gah. arg_r = args.Reader(['+o', 'pipefail', 'errexit']) arg = s.Parse(arg_r) self.assertEqual([('pipefail', False)], arg.opt_changes) self.assertEqual(['errexit'], arg_r.Rest())