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 uintTests = []struct {
14	where string
15	in    []string
16	i     uint
17	uint  uint
18	err   string
19}{
20	{
21		loc(),
22		[]string{},
23		17, 42,
24		"",
25	},
26	{
27		loc(),
28		[]string{"test", "-i", "1", "--uint", "2"},
29		1, 2,
30		"",
31	},
32	{
33		loc(),
34		[]string{"test", "-i1", "--uint=2"},
35		1, 2,
36		"",
37	},
38	{
39		loc(),
40		[]string{"test", "-i1", "-i2"},
41		2, 42,
42		"",
43	},
44	{
45		loc(),
46		[]string{"test", "-i=1"},
47		17, 42,
48		"test: not a valid number: =1\n",
49	},
50	{
51		loc(),
52		[]string{"test", "-i0x20"},
53		0x20, 42,
54		"",
55	},
56	{
57		loc(),
58		[]string{"test", "-i010"},
59		8, 42,
60		"",
61	},
62}
63
64func TestUint(t *testing.T) {
65	for x, tt := range uintTests {
66		reset()
67		i := Uint('i', 17)
68		opt := UintLong("uint", 0, 42)
69		if strings.Index(tt.where, ":-") > 0 {
70			tt.where = fmt.Sprintf("#%d", x)
71		}
72
73		parse(tt.in)
74		if s := checkError(tt.err); s != "" {
75			t.Errorf("%s: %s", tt.where, s)
76		}
77		if got, want := *i, tt.i; got != want {
78			t.Errorf("%s: got %v, want %v", tt.where, got, want)
79		}
80		if got, want := *opt, tt.uint; got != want {
81			t.Errorf("%s: got %v, want %v", tt.where, got, want)
82		}
83	}
84}
85