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  }