1// Copyright 2009 The Go Authors. 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 strconv_test
6
7import (
8	"bytes"
9	. "strconv"
10	"testing"
11)
12
13type atobTest struct {
14	in  string
15	out bool
16	err error
17}
18
19var atobtests = []atobTest{
20	{"", false, ErrSyntax},
21	{"asdf", false, ErrSyntax},
22	{"0", false, nil},
23	{"f", false, nil},
24	{"F", false, nil},
25	{"FALSE", false, nil},
26	{"false", false, nil},
27	{"False", false, nil},
28	{"1", true, nil},
29	{"t", true, nil},
30	{"T", true, nil},
31	{"TRUE", true, nil},
32	{"true", true, nil},
33	{"True", true, nil},
34}
35
36func TestParseBool(t *testing.T) {
37	for _, test := range atobtests {
38		b, e := ParseBool(test.in)
39		if test.err != nil {
40			// expect an error
41			if e == nil {
42				t.Errorf("ParseBool(%s) = nil; want %s", test.in, test.err)
43			} else {
44				// NumError assertion must succeed; it's the only thing we return.
45				if e.(*NumError).Err != test.err {
46					t.Errorf("ParseBool(%s) = %s; want %s", test.in, e, test.err)
47				}
48			}
49		} else {
50			if e != nil {
51				t.Errorf("ParseBool(%s) = %s; want nil", test.in, e)
52			}
53			if b != test.out {
54				t.Errorf("ParseBool(%s) = %t; want %t", test.in, b, test.out)
55			}
56		}
57	}
58}
59
60var boolString = map[bool]string{
61	true:  "true",
62	false: "false",
63}
64
65func TestFormatBool(t *testing.T) {
66	for b, s := range boolString {
67		if f := FormatBool(b); f != s {
68			t.Errorf("FormatBool(%v) = %q; want %q", b, f, s)
69		}
70	}
71}
72
73type appendBoolTest struct {
74	b   bool
75	in  []byte
76	out []byte
77}
78
79var appendBoolTests = []appendBoolTest{
80	{true, []byte("foo "), []byte("foo true")},
81	{false, []byte("foo "), []byte("foo false")},
82}
83
84func TestAppendBool(t *testing.T) {
85	for _, test := range appendBoolTests {
86		b := AppendBool(test.in, test.b)
87		if !bytes.Equal(b, test.out) {
88			t.Errorf("AppendBool(%q, %v) = %q; want %q", test.in, test.b, b, test.out)
89		}
90	}
91}
92