Commit ef2200684118cddc8b84c69e04bf3fb41d9bb274

Authored by Göran Krampe
1 parent 7af04aca

Let example.nim double as unit test

Showing 1 changed file with 46 additions and 26 deletions
example.nim
1 1 import lapp, tables
  2 +from os import paramStr, paramCount
2 3  
3 4 # This is a trivial example trying to cover all features of lapp.
4 5  
... ... @@ -6,7 +7,7 @@ let help = """
6 7 example [options] command filenames
7 8  
8 9 -r Just an optional single character flag. Show the args using repr.
9   - -a,--alpha Or with additional long variant, no whitespace there.
  10 + -t,--test Or with additional long variant, no whitespace there.
10 11 -n: A colon can be added, but has no meaning, instead () specifies further.
11 12 -N (default 10) And it can take a value, and have a default value.
12 13 -f (default 0.04) And be a float
... ... @@ -28,30 +29,49 @@ let help = """
28 29 ranges. The lexer in lapp does it, but there is no more support.
29 30 """
30 31  
31   -# We call `parse` in lapp with our help text as argument.
32   -# This will both parse the help text above and then, parse the
33   -# arguments passed to this program. A table is returned
34   -# with all command line elements in it, keyed by their name
35   -# and with a PValue as value.
36   -var args = parse(help)
37   -
38   -# Let's examine what we got using repr
39   -for k,v in args:
40   - echo "Parameter: " & k & " PValue: " & repr(v)
41   -
42   -# Or print out a bit cleaner
43   -echo "Parameters and their values:"
44   -echo "r == " & $args["r"].asBool
45   -echo "alpha == " & $args["alpha"].asBool # Long name is used as key, if its specified
46   -echo "n == " & $args["n"].asBool
47   -echo "N == " & $args["N"].asInt
48   -echo "f == " & $args["f"].asFloat
49   -echo "s == " & $args["s"].asString
50   -echo "x == " & $args["x"].asInt
51   -echo "X == " & $args["X"].asSeq.map(proc(x:PValue):int = x.asInt)
52   -echo "verbose == " & $args["verbose"].asSeq.len
53   -echo "out == " & $args["out"].filename
54   -echo "command == " & $args["command"].asString
55   -echo "file == " & $args["file"].asSeq.map(proc(x:PValue):string = x.filename)
56 32  
  33 +# This part is for build testing lapp, we run a bunch of asserts
  34 +if paramCount() == 1 and paramStr(1) == "test":
  35 + var args = parseArguments(help, @["example", "-x1", "-X4", "cmd"])
  36 + assert(args["r"].asBool == false)
  37 + assert(args["test"].asBool == false)
  38 + assert(args["n"].asBool == false)
  39 + assert(args["N"].asInt == 10)
  40 + assert(args["f"].asFloat == 0.04)
  41 + assert(args["s"].asString == "banana")
  42 + assert(args["x"].asInt == 1)
  43 + assert(args["X"].asSeq[0].asInt == 4)
  44 + assert(args["verbose"].asSeq.len == 1)
  45 + assert(args["verbose"].asSeq[0].asBool == false)
  46 + assert(args["out"].filename == "stdout")
  47 + assert(args["command"].asString == "cmd")
  48 + assert(args["file"].asSeq.len == 1)
  49 + assert(args["file"].asSeq[0].filename == "stdin")
  50 +else:
57 51  
  52 + # We call `parse` in lapp with our help text as argument.
  53 + # This will both parse the help text above and then, parse the
  54 + # arguments passed to this program. A table is returned
  55 + # with all command line elements in it, keyed by their name
  56 + # and with a PValue as value.
  57 + var args = parse(help)
  58 +
  59 + # Let's examine what we got using repr
  60 + echo "A bit messy, but shows exactly what we got:\n\n"
  61 + for k,v in args:
  62 + echo "Parameter: " & k & " PValue: " & repr(v)
  63 +
  64 + # Or print out a bit cleaner
  65 + echo "Parameters and their values more readable:"
  66 + echo "r == " & $args["r"].asBool
  67 + echo "test == " & $args["test"].asBool # Long name is used as key, if its specified
  68 + echo "n == " & $args["n"].asBool
  69 + echo "N == " & $args["N"].asInt
  70 + echo "f == " & $args["f"].asFloat
  71 + echo "s == " & $args["s"].asString
  72 + echo "x == " & $args["x"].asInt
  73 + echo "X == " & $args["X"].asSeq.map(proc(x:PValue):int = x.asInt)
  74 + echo "verbose == " & $args["verbose"].asSeq.len
  75 + echo "out == " & $args["out"].filename
  76 + echo "command == " & $args["command"].asString
  77 + echo "file == " & $args["file"].asSeq.map(proc(x:PValue):string = x.filename)
... ...