Commit ef2200684118cddc8b84c69e04bf3fb41d9bb274
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) | ... | ... |