-
Notifications
You must be signed in to change notification settings - Fork 0
/
getopts_test.go
119 lines (92 loc) · 2.93 KB
/
getopts_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package main
import "testing"
const (
__OPTION_HELP = iota
__OPTION_VERSION
__OPTION_URL
__OPTION_BASTION_PORT
__OPTION_DEFAULT_USER
__OPTION_PASSWORD
__OPTION_NOCACHE
)
var __Options = []OptionSpec{
{__OPTION_HELP, "help", NO_ARGUMENT},
{__OPTION_VERSION, "version", NO_ARGUMENT},
{'k', "keyid", ARGUMENT_REQUIRED},
// {'K', "keyfile", ARGUMENT_REQUIRED},
{__OPTION_URL, "url", ARGUMENT_REQUIRED},
{'u', "user", ARGUMENT_REQUIRED},
{'P', "port", ARGUMENT_REQUIRED},
{'U', "bastion-user", ARGUMENT_REQUIRED},
{'b', "bastion", ARGUMENT_REQUIRED},
{__OPTION_BASTION_PORT, "bastion-port", ARGUMENT_REQUIRED},
{'T', "timeout", ARGUMENT_REQUIRED},
{'t', "deadline", ARGUMENT_REQUIRED},
{'p', "parallel", ARGUMENT_REQUIRED},
{'i', "inline", NO_ARGUMENT},
{'o', "outdir", ARGUMENT_REQUIRED},
{'e', "errdir", ARGUMENT_REQUIRED},
{__OPTION_DEFAULT_USER, "default-user", ARGUMENT_REQUIRED},
{__OPTION_PASSWORD, "password", NO_ARGUMENT},
{'I', "identity", ARGUMENT_REQUIRED},
{__OPTION_NOCACHE, "no-cache", NO_ARGUMENT},
}
func TestGetoptEmptyArguments(env *testing.T) {
args := []string{}
context := GetoptContext{Args: args, Options: __Options}
opt, err := context.Getopt()
if err != nil {
env.Errorf("Getopt failed: %s", err)
}
if opt != nil {
env.Errorf("Getopt wrongly parsed option: %v", opt)
}
remaining := context.Arguments()
if len(remaining) != 0 {
env.Errorf("Getopt wrongly produced argument: %v", remaining)
}
}
func TestGetoptNoOptionSomeArguments(env *testing.T) {
args := []string{"hello", "world"}
context := GetoptContext{Args: args, Options: __Options}
opt, err := context.Getopt()
if err != nil {
env.Errorf("Getopt failed: %s", err)
}
if opt != nil {
env.Errorf("Getopt wrongly parsed option: %v", opt)
}
remaining := context.Arguments()
if len(remaining) != 2 {
env.Errorf("Getopt wrongly produced different number of arguments: len(remaining)[%d] != len(args)[%d]", len(remaining), len(args))
}
for i := 0; i < len(args); i++ {
if remaining[i] != args[i] {
env.Errorf("Getopt wrongly produced argument: remaining[%d](%v) != args[%d](%v)", i, remaining[i], i, args[i])
}
}
}
func TestGetoptNoOptionDelimeterSomeArguments(env *testing.T) {
args := []string{"--", "hello", "world"}
context := GetoptContext{Args: args, Options: __Options}
opt, err := context.Getopt()
if err != nil {
env.Errorf("Getopt failed: %s", err)
}
if opt != nil {
env.Errorf("Getopt wrongly parsed option: %v", opt)
}
remaining := context.Arguments()
if len(remaining) != 2 {
env.Errorf("Getopt wrongly produced different number of arguments: len(remaining)[%d] != len(args)[%d] - 1", len(remaining), len(args))
}
for i := 0; i < len(remaining); i++ {
if remaining[i] != args[i+1] {
env.Errorf("Getopt wrongly produced argument: remaining[%d](%v) != args[%d](%v)", i, remaining[i], i, args[i])
}
}
if env.Failed() {
env.Errorf("args = %v\n", args)
env.Errorf("remains = %v\n", remaining)
}
}