summaryrefslogtreecommitdiffstats
path: root/src/fmt/state_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/fmt/state_test.go')
-rw-r--r--src/fmt/state_test.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/fmt/state_test.go b/src/fmt/state_test.go
new file mode 100644
index 0000000..fda660a
--- /dev/null
+++ b/src/fmt/state_test.go
@@ -0,0 +1,80 @@
+// 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)
+ }
+ }
+}