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 unsignedTests = []struct { 14 where string 15 in []string 16 l UnsignedLimit 17 out uint64 18 err string 19}{ 20 { 21 where: loc(), 22 }, 23 { 24 loc(), 25 []string{"test", "-n", "1010"}, 26 UnsignedLimit{Base: 2, Bits: 5}, 27 10, 28 "", 29 }, 30 { 31 loc(), 32 []string{"test", "-n", "1010"}, 33 UnsignedLimit{Base: 2, Bits: 4}, 34 10, 35 "", 36 }, 37 { 38 loc(), 39 []string{"test", "-n", "1010"}, 40 UnsignedLimit{Base: 2, Bits: 3}, 41 0, 42 "test: value out of range: 1010\n", 43 }, 44 { 45 loc(), 46 []string{"test", "-n", "3"}, 47 UnsignedLimit{Min: 4, Max: 6}, 48 0, 49 "test: value out of range (<4): 3\n", 50 }, 51 { 52 loc(), 53 []string{"test", "-n", "4"}, 54 UnsignedLimit{Min: 4, Max: 6}, 55 4, 56 "", 57 }, 58 { 59 loc(), 60 []string{"test", "-n", "5"}, 61 UnsignedLimit{Min: 4, Max: 6}, 62 5, 63 "", 64 }, 65 { 66 loc(), 67 []string{"test", "-n", "6"}, 68 UnsignedLimit{Min: 4, Max: 6}, 69 6, 70 "", 71 }, 72 { 73 loc(), 74 []string{"test", "-n", "7"}, 75 UnsignedLimit{Min: 4, Max: 6}, 76 0, 77 "test: value out of range (>6): 7\n", 78 }, 79} 80 81func TestUnsigneds(t *testing.T) { 82 for x, tt := range unsignedTests { 83 if strings.Index(tt.where, ":-") > 0 { 84 tt.where = fmt.Sprintf("#%d", x) 85 } 86 87 reset() 88 n := Unsigned('n', 0, &tt.l) 89 parse(tt.in) 90 if s := checkError(tt.err); s != "" { 91 t.Errorf("%s: %s", tt.where, s) 92 } 93 if *n != tt.out { 94 t.Errorf("%s: got %v, want %v", tt.where, *n, tt.out) 95 } 96 } 97} 98