def Register(builtin_name): # type: (str) -> args.BuiltinFlags """ """ arg_spec = args.BuiltinFlags() _ARG_DEF[builtin_name] = arg_spec return arg_spec
def testParseLikeEcho(self): s = args.BuiltinFlags() s.ShortFlag('-e') # no backslash escapes s.ShortFlag('-n') arg, i = s.ParseLikeEcho(['-e', '-n', 'foo']) self.assertEqual(True, arg.e) self.assertEqual(True, arg.n) self.assertEqual(2, i) arg, i = s.ParseLikeEcho(['-en', 'foo']) self.assertEqual(True, arg.e) self.assertEqual(True, arg.n) self.assertEqual(1, i) arg, i = s.ParseLikeEcho(['-ez', 'foo']) self.assertEqual(None, arg.e) self.assertEqual(None, arg.n) self.assertEqual(0, i)
def testBuiltinFlags(self): s = args.BuiltinFlags() s.ShortFlag('-f') s.ShortFlag('-n') s.ShortFlag('-d', args.Str) # delimiter arg, i = s.Parse(['-f', 'foo', 'bar']) self.assertEqual(1, i) self.assertEqual(True, arg.f) self.assertEqual(None, arg.n) self.assertRaises(args.UsageError, s.Parse, ['-f', '-d']) arg, i = s.Parse(['-d', ' ', 'foo']) self.assertEqual(2, i) self.assertEqual(' ', arg.d) arg, i = s.Parse(['-d,', 'foo']) self.assertEqual(1, i) self.assertEqual(',', arg.d)
def testBuiltinFlags(self): s = args.BuiltinFlags() s.ShortFlag('-f') s.ShortFlag('-n') s.ShortFlag('-d', args.Str) # delimiter # like declare +rx s.ShortOption('r') s.ShortOption('x') arg, i = s.ParseVec(_MakeArgVector(['-f', 'foo', 'bar'])) self.assertEqual(1, i-1) self.assertEqual(True, arg.f) self.assertEqual(None, arg.n) self.assertRaises( args.UsageError, s.ParseVec, _MakeArgVector(['-f', '-d'])) arg, i = s.ParseVec(_MakeArgVector(['-d', ' ', 'foo'])) self.assertEqual(2, i-1) self.assertEqual(' ', arg.d) arg, i = s.ParseVec(_MakeArgVector(['-d,', 'foo'])) self.assertEqual(1, i-1) self.assertEqual(',', arg.d) self.assertEqual(None, arg.r) arg, i = s.ParseVec(_MakeArgVector(['-d,', '-r', '-x'])) self.assertEqual(4, i) self.assertEqual(',', arg.d) self.assertEqual('-', arg.r) self.assertEqual('-', arg.x) arg, i = s.ParseVec(_MakeArgVector(['-d,', '+rx'])) self.assertEqual(3, i) self.assertEqual(',', arg.d) self.assertEqual('+', arg.r) self.assertEqual('+', arg.x)
def testReadBuiltinFlags(self): s = args.BuiltinFlags() s.ShortFlag('-r') # no backslash escapes s.ShortFlag('-t', args.Float) # timeout s.ShortFlag('-p', args.Str) # prompt string arg, i = s.ParseVec(_MakeBuiltinArgv(['-r', 'foo'])) self.assertEqual(True, arg.r) self.assertEqual(1, i - 1) arg, i = s.ParseVec(_MakeBuiltinArgv(['-p', '>'])) self.assertEqual(None, arg.r) self.assertEqual('>', arg.p) self.assertEqual(2, i - 1) arg, i = s.ParseVec(_MakeBuiltinArgv(['-rp', '>'])) self.assertEqual(True, arg.r) self.assertEqual('>', arg.p) self.assertEqual(2, i - 1) # REALLY ANNOYING: The first r is a flag, the second R is the prompt! Only # works in that order # Does that mean anything with an arity consumes the rest? # read -p line # arg, i = s.ParseVec(_MakeBuiltinArgv(['-rpr'])) self.assertEqual(True, arg.r) self.assertEqual('r', arg.p) self.assertEqual(1, i - 1) argv = ['-t1.5', '>'] arg, i = s.ParseVec(_MakeBuiltinArgv(argv)) self.assertEqual(1.5, arg.t) self.assertEqual(1, i - 1) # Invalid flag 'z' self.assertRaises(args.UsageError, s.ParseVec, _MakeBuiltinArgv(['-rz']))
def Register(self, name, help_topic=None): # The help topics are in the quick ref. TODO: We should match them up? #help_topic = help_topic or name arg_spec = args.BuiltinFlags() self.arg_specs[name] = arg_spec return arg_spec
from __future__ import print_function """ readlink.py - Minimal implementation of readlink -f, e.g. for OS X. """ import libc from frontend import args from core import ui SPEC = args.BuiltinFlags() SPEC.ShortFlag('-f') def main(argv): arg, i = SPEC.ParseArgv(argv) if not arg.f: ui.Stderr("readlink: -f must be passed") return 1 for path in argv[i:]: res = libc.realpath(path) if res is None: return 1 print(res) return 0