github.com/amedmoore/go-args@v0.10.0/parser_test.go (about) 1 package args 2 3 import "testing" 4 5 var testArgs = []string{ 6 // positional arguments 7 "pos0", "pos1", "pos2", "pos3", "pos4", "pos5", 8 9 // option aliases 10 "-a", "-b", "-c", "-d", "-e", "-f", 11 12 // options 13 "--opt0", "--opt1", "--opt2", "--opt3", "--opt4", "--opt5", 14 15 // argument aliases 16 "-g", "val0", "-h", "val1", "-i", "2", 17 18 // arguments 19 "--arg0", "val0", "--arg1", "val1", "--arg2", "val2", 20 "--arg0", "val3", "--arg1", "val4", "--arg2", "5", 21 } 22 23 func Test_Parser_Parse(t *testing.T) { 24 parser := NewParser(testArgs) 25 err := parser.Parse() 26 if err != nil { 27 t.Errorf("Parse(): %s", err.Error()) 28 } 29 30 // test length of positional arguments 31 pos := len(parser.Positional()) 32 if pos != 6 { 33 t.Errorf("len(parser.Positional()) = %d; want 6", pos) 34 } 35 36 // test length of options 37 opt := len(parser.Options()) 38 if opt != 12 { 39 t.Errorf("len(parser.Options()) = %d; want 12", opt) 40 } 41 42 // test length of value arguments 43 args := len(parser.Args()) 44 if args != 9 { 45 t.Errorf("len(parser.Args()) = %d; want 9", args) 46 } 47 48 // test positional arguments at 1 49 at1, exist := parser.At(1) 50 if !exist || at1 != "pos1" { 51 t.Errorf("parser.At(1) = \"%s\"; want \"pos1\"", at1) 52 } 53 54 // test positional arguments at 4 55 at4, exist := parser.At(4) 56 if !exist || at4 != "pos4" { 57 t.Errorf("parser.At(4) = \"%s\"; want \"pos4\"", at4) 58 } 59 60 // test options '-c' and '-e' exists 61 if !parser.HasOption("-c") { 62 t.Error("parser.HasOption(\"-c\") = false; want true") 63 } 64 if !parser.HasOption("-e") { 65 t.Error("parser.HasOption(\"-e\") = false; want true") 66 } 67 68 // test options '--opt0' and '--opt5' exists 69 if !parser.HasOption("--opt0") { 70 t.Error("parser.HasOption(\"--opt0\") = false; want true") 71 } 72 if !parser.HasOption("--opt5") { 73 t.Error("parser.HasOption(\"--opt5\") = false; want true") 74 } 75 76 // test value of argument '-h' 77 h, exist := parser.LookupString("-h") 78 if !exist || h != "val1" { 79 t.Errorf("parser.LookupString(\"-h\") = \"%s\"; want \"val1\"", h) 80 } 81 82 // test value of argument '--arg1' 83 arg1, exist := parser.LookupString("--arg1") 84 if !exist || arg1 != "val4" { 85 t.Errorf("parser.LookupString(\"--arg1\") = \"%s\"; want \"val4\"", arg1) 86 } 87 88 // test value of argument '-i' 89 i, exist := parser.LookupInt("-i") 90 if !exist || i != 2 { 91 t.Errorf("parser.LookupInt(\"-i\") = \"%d\"; want \"2\"", i) 92 } 93 94 // test value of argument '--arg2' 95 arg2, exist := parser.LookupInt("--arg2") 96 if !exist || arg2 != 5 { 97 t.Errorf("parser.LookupInt(\"--arg2\") = \"%d\"; want \"5\"", arg2) 98 } 99 100 // test multiple values of argument '--arg1' 101 args1 := parser.Get("--arg1") 102 if len(args1) != 2 || args1[0] != "val1" || args1[1] != "val4" { 103 t.Errorf("parser.Get(\"--args1\") = \"%s\"; want [\"val1\", \"val4\"]", args1) 104 } 105 106 // test alternative names lookup 107 alt, exists := parser.LookupString("--missing", "-g") 108 if !exists || alt != "val0" { 109 t.Errorf("parser.LookupString(\"--missing\", \"-g\") = \"%s\"; want \"val0\"", alt) 110 } 111 } 112 113 func Benchmark_Parser_Parse(b *testing.B) { 114 parser := NewParser(testArgs) 115 err := parser.Parse() 116 if err != nil { 117 b.Errorf("Parse(): %s", err.Error()) 118 } 119 }