1// Copyright 2017 Google Inc.  All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package getopt
6
7import "testing"
8
9var listTests = []struct {
10	where   string
11	in      []string
12	l, list []string
13	err     string
14}{
15	{
16		loc(),
17		[]string{},
18		nil, nil,
19		"",
20	},
21	{
22		loc(),
23		[]string{"test", "-l", "one"},
24		[]string{"one"}, nil,
25		"",
26	},
27	{
28		loc(),
29		[]string{"test", "-lone", "-ltwo"},
30		[]string{"one", "two"}, nil,
31		"",
32	},
33	{
34		loc(),
35		[]string{"test", "--list", "one"},
36		nil, []string{"one"},
37		"",
38	},
39	{
40		loc(),
41		[]string{"test", "--list=one", "--list=two"},
42		nil, []string{"one", "two"},
43		"",
44	},
45	{
46		loc(),
47		[]string{"test", "--list=one,two"},
48		nil, []string{"one", "two"},
49		"",
50	},
51}
52
53func TestList(t *testing.T) {
54	for _, tt := range listTests {
55		reset()
56		l := List('l')
57		list := ListLong("list", 0)
58
59		parse(tt.in)
60		if s := checkError(tt.err); s != "" {
61			t.Errorf("%s: %s", tt.where, s)
62		}
63		if badSlice(*l, tt.l) {
64			t.Errorf("%s: got s = %q, want %q", tt.where, *l, tt.l)
65		}
66		if badSlice(*list, tt.list) {
67			t.Errorf("%s: got s = %q, want %q", tt.where, *list, tt.list)
68		}
69	}
70}
71
72func TestDefaultList(t *testing.T) {
73	reset()
74	list := []string{"d1", "d2", "d3"}
75	Flag(&list, 'l')
76	parse([]string{"test"})
77
78	want := []string{"d1", "d2", "d3"}
79	if badSlice(list, want) {
80		t.Errorf("got s = %q, want %q", list, want)
81	}
82
83	parse([]string{"test", "-l", "one"})
84	want = []string{"one"}
85	if badSlice(list, want) {
86		t.Errorf("got s = %q, want %q", list, want)
87	}
88
89	parse([]string{"test", "-l", "two"})
90	want = []string{"one", "two"}
91	if badSlice(list, want) {
92		t.Errorf("got s = %q, want %q", list, want)
93	}
94	Lookup('l').Reset()
95	want = []string{"d1", "d2", "d3"}
96	if badSlice(list, want) {
97		t.Errorf("got s = %q, want %q", list, want)
98	}
99}
100