1// Copyright 2013 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 (
8	"fmt"
9	"strings"
10	"testing"
11)
12
13var enumTests = []struct {
14	where  string
15	in     []string
16	values []string
17	out    string
18	err    string
19}{
20	{
21		loc(),
22		nil,
23		[]string{},
24		"",
25		"",
26	},
27	{
28		loc(),
29		[]string{"test", "-e", "val1"},
30		[]string{"val1", "val2"},
31		"val1",
32		"",
33	},
34	{
35		loc(),
36		[]string{"test", "-e", "val1", "-e", "val2"},
37		[]string{"val1", "val2"},
38		"val2",
39		"",
40	},
41	{
42		loc(),
43		[]string{"test", "-e", "val3"},
44		[]string{"val1", "val2"},
45		"",
46		"test: invalid value: val3\n",
47	},
48}
49
50func TestEnum(t *testing.T) {
51	for x, tt := range enumTests {
52		if strings.Index(tt.where, ":-") > 0 {
53			tt.where = fmt.Sprintf("#%d", x)
54		}
55
56		reset()
57		e := Enum('e', tt.values)
58		parse(tt.in)
59		if s := checkError(tt.err); s != "" {
60			t.Errorf("%s: %s", tt.where, s)
61		}
62		if *e != tt.out {
63			t.Errorf("%s: got %v, want %v", tt.where, *e, tt.out)
64		}
65	}
66}
67