summaryrefslogtreecommitdiff
path: root/src/fmt/fmt_test.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2014-10-03 13:23:35 -0700
committerRob Pike <r@golang.org>2014-10-03 13:23:35 -0700
commit0a635319fc000e052bd3d6e2823b170d046e06f5 (patch)
tree9f0c82ad35a879fb1527d00d9a1568e85990d9bf /src/fmt/fmt_test.go
parenta81469cf0b101e552d1968469f528456d9d7835a (diff)
downloadgo-0a635319fc000e052bd3d6e2823b170d046e06f5.tar.gz
fmt: part 2 of the great flag rebuild: make %+v work in formatters
Apply a similar transformation to %+v that we did to %#v, making it a top-level setting separate from the + flag itself. This fixes the appearance of flags in Formatters and cleans up the code too, probably making it a little faster. Fixes issue 8835. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://codereview.appspot.com/154820043
Diffstat (limited to 'src/fmt/fmt_test.go')
-rw-r--r--src/fmt/fmt_test.go122
1 files changed, 51 insertions, 71 deletions
diff --git a/src/fmt/fmt_test.go b/src/fmt/fmt_test.go
index f3b527d1f..4c3ba8fad 100644
--- a/src/fmt/fmt_test.go
+++ b/src/fmt/fmt_test.go
@@ -919,7 +919,7 @@ func TestCountMallocs(t *testing.T) {
type flagPrinter struct{}
-func (*flagPrinter) Format(f State, c rune) {
+func (flagPrinter) Format(f State, c rune) {
s := "%"
for i := 0; i < 128; i++ {
if f.Flag(i) {
@@ -1208,86 +1208,66 @@ func TestNilDoesNotBecomeTyped(t *testing.T) {
}
}
-// Formatters did not get delivered flags correctly in all cases. Issue 8835.
-type fp struct{}
-
-func (fp) Format(f State, c rune) {
- s := "%"
- for i := 0; i < 128; i++ {
- if f.Flag(i) {
- s += string(i)
- }
- }
- if w, ok := f.Width(); ok {
- s += Sprintf("%d", w)
- }
- if p, ok := f.Precision(); ok {
- s += Sprintf(".%d", p)
- }
- s += string(c)
- io.WriteString(f, "["+s+"]")
-}
-
var formatterFlagTests = []struct {
in string
val interface{}
out string
}{
// scalar values with the (unused by fmt) 'a' verb.
- {"%a", fp{}, "[%a]"},
- {"%-a", fp{}, "[%-a]"},
- {"%+a", fp{}, "[%+a]"},
- {"%#a", fp{}, "[%#a]"},
- {"% a", fp{}, "[% a]"},
- {"%0a", fp{}, "[%0a]"},
- {"%1.2a", fp{}, "[%1.2a]"},
- {"%-1.2a", fp{}, "[%-1.2a]"},
- {"%+1.2a", fp{}, "[%+1.2a]"},
- {"%-+1.2a", fp{}, "[%+-1.2a]"},
- {"%-+1.2abc", fp{}, "[%+-1.2a]bc"},
- {"%-1.2abc", fp{}, "[%-1.2a]bc"},
+ {"%a", flagPrinter{}, "[%a]"},
+ {"%-a", flagPrinter{}, "[%-a]"},
+ {"%+a", flagPrinter{}, "[%+a]"},
+ {"%#a", flagPrinter{}, "[%#a]"},
+ {"% a", flagPrinter{}, "[% a]"},
+ {"%0a", flagPrinter{}, "[%0a]"},
+ {"%1.2a", flagPrinter{}, "[%1.2a]"},
+ {"%-1.2a", flagPrinter{}, "[%-1.2a]"},
+ {"%+1.2a", flagPrinter{}, "[%+1.2a]"},
+ {"%-+1.2a", flagPrinter{}, "[%+-1.2a]"},
+ {"%-+1.2abc", flagPrinter{}, "[%+-1.2a]bc"},
+ {"%-1.2abc", flagPrinter{}, "[%-1.2a]bc"},
// composite values with the 'a' verb
- {"%a", [1]fp{}, "[[%a]]"},
- {"%-a", [1]fp{}, "[[%-a]]"},
- {"%+a", [1]fp{}, "[[%+a]]"},
- {"%#a", [1]fp{}, "[[%#a]]"},
- {"% a", [1]fp{}, "[[% a]]"},
- {"%0a", [1]fp{}, "[[%0a]]"},
- {"%1.2a", [1]fp{}, "[[%1.2a]]"},
- {"%-1.2a", [1]fp{}, "[[%-1.2a]]"},
- {"%+1.2a", [1]fp{}, "[[%+1.2a]]"},
- {"%-+1.2a", [1]fp{}, "[[%+-1.2a]]"},
- {"%-+1.2abc", [1]fp{}, "[[%+-1.2a]]bc"},
- {"%-1.2abc", [1]fp{}, "[[%-1.2a]]bc"},
+ {"%a", [1]flagPrinter{}, "[[%a]]"},
+ {"%-a", [1]flagPrinter{}, "[[%-a]]"},
+ {"%+a", [1]flagPrinter{}, "[[%+a]]"},
+ {"%#a", [1]flagPrinter{}, "[[%#a]]"},
+ {"% a", [1]flagPrinter{}, "[[% a]]"},
+ {"%0a", [1]flagPrinter{}, "[[%0a]]"},
+ {"%1.2a", [1]flagPrinter{}, "[[%1.2a]]"},
+ {"%-1.2a", [1]flagPrinter{}, "[[%-1.2a]]"},
+ {"%+1.2a", [1]flagPrinter{}, "[[%+1.2a]]"},
+ {"%-+1.2a", [1]flagPrinter{}, "[[%+-1.2a]]"},
+ {"%-+1.2abc", [1]flagPrinter{}, "[[%+-1.2a]]bc"},
+ {"%-1.2abc", [1]flagPrinter{}, "[[%-1.2a]]bc"},
// simple values with the 'v' verb
- {"%v", fp{}, "[%v]"},
- {"%-v", fp{}, "[%-v]"},
- {"%+v", fp{}, "[%+v]"},
- {"%#v", fp{}, "[%#v]"},
- {"% v", fp{}, "[% v]"},
- {"%0v", fp{}, "[%0v]"},
- {"%1.2v", fp{}, "[%1.2v]"},
- {"%-1.2v", fp{}, "[%-1.2v]"},
- {"%+1.2v", fp{}, "[%+1.2v]"},
- {"%-+1.2v", fp{}, "[%+-1.2v]"},
- {"%-+1.2vbc", fp{}, "[%+-1.2v]bc"},
- {"%-1.2vbc", fp{}, "[%-1.2v]bc"},
-
- // composite values with the 'v' verb. Some are still broken.
- {"%v", [1]fp{}, "[[%v]]"},
- {"%-v", [1]fp{}, "[[%-v]]"},
- //{"%+v", [1]fp{}, "[[%+v]]"},
- {"%#v", [1]fp{}, "[1]fmt_test.fp{[%#v]}"},
- {"% v", [1]fp{}, "[[% v]]"},
- {"%0v", [1]fp{}, "[[%0v]]"},
- {"%1.2v", [1]fp{}, "[[%1.2v]]"},
- {"%-1.2v", [1]fp{}, "[[%-1.2v]]"},
- //{"%+1.2v", [1]fp{}, "[[%+1.2v]]"},
- //{"%-+1.2v", [1]fp{}, "[[%+-1.2v]]"},
- //{"%-+1.2vbc", [1]fp{}, "[[%+-1.2v]]bc"},
- {"%-1.2vbc", [1]fp{}, "[[%-1.2v]]bc"},
+ {"%v", flagPrinter{}, "[%v]"},
+ {"%-v", flagPrinter{}, "[%-v]"},
+ {"%+v", flagPrinter{}, "[%+v]"},
+ {"%#v", flagPrinter{}, "[%#v]"},
+ {"% v", flagPrinter{}, "[% v]"},
+ {"%0v", flagPrinter{}, "[%0v]"},
+ {"%1.2v", flagPrinter{}, "[%1.2v]"},
+ {"%-1.2v", flagPrinter{}, "[%-1.2v]"},
+ {"%+1.2v", flagPrinter{}, "[%+1.2v]"},
+ {"%-+1.2v", flagPrinter{}, "[%+-1.2v]"},
+ {"%-+1.2vbc", flagPrinter{}, "[%+-1.2v]bc"},
+ {"%-1.2vbc", flagPrinter{}, "[%-1.2v]bc"},
+
+ // composite values with the 'v' verb.
+ {"%v", [1]flagPrinter{}, "[[%v]]"},
+ {"%-v", [1]flagPrinter{}, "[[%-v]]"},
+ {"%+v", [1]flagPrinter{}, "[[%+v]]"},
+ {"%#v", [1]flagPrinter{}, "[1]fmt_test.flagPrinter{[%#v]}"},
+ {"% v", [1]flagPrinter{}, "[[% v]]"},
+ {"%0v", [1]flagPrinter{}, "[[%0v]]"},
+ {"%1.2v", [1]flagPrinter{}, "[[%1.2v]]"},
+ {"%-1.2v", [1]flagPrinter{}, "[[%-1.2v]]"},
+ {"%+1.2v", [1]flagPrinter{}, "[[%+1.2v]]"},
+ {"%-+1.2v", [1]flagPrinter{}, "[[%+-1.2v]]"},
+ {"%-+1.2vbc", [1]flagPrinter{}, "[[%+-1.2v]]bc"},
+ {"%-1.2vbc", [1]flagPrinter{}, "[[%-1.2v]]bc"},
}
func TestFormatterFlags(t *testing.T) {