blob: fda660aa3241bbdec6bc81f39913fdd8e8d6b1b9 [file] [log] [blame]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package fmt_test
import (
"fmt"
"testing"
)
type testState struct {
width int
widthOK bool
prec int
precOK bool
flag map[int]bool
}
var _ fmt.State = testState{}
func (s testState) Write(b []byte) (n int, err error) {
panic("unimplemented")
}
func (s testState) Width() (wid int, ok bool) {
return s.width, s.widthOK
}
func (s testState) Precision() (prec int, ok bool) {
return s.prec, s.precOK
}
func (s testState) Flag(c int) bool {
return s.flag[c]
}
const NO = -1000
func mkState(w, p int, flags string) testState {
s := testState{}
if w != NO {
s.width = w
s.widthOK = true
}
if p != NO {
s.prec = p
s.precOK = true
}
s.flag = make(map[int]bool)
for _, c := range flags {
s.flag[int(c)] = true
}
return s
}
func TestFormatString(t *testing.T) {
var tests = []struct {
width, prec int
flags string
result string
}{
{NO, NO, "", "%x"},
{NO, 3, "", "%.3x"},
{3, NO, "", "%3x"},
{7, 3, "", "%7.3x"},
{NO, NO, " +-#0", "% +-#0x"},
{7, 3, "+", "%+7.3x"},
{7, -3, "-", "%-7.-3x"},
{7, 3, " ", "% 7.3x"},
{7, 3, "#", "%#7.3x"},
{7, 3, "0", "%07.3x"},
}
for _, test := range tests {
got := fmt.FormatString(mkState(test.width, test.prec, test.flags), 'x')
if got != test.result {
t.Errorf("%v: got %s", test, got)
}
}
}