diff options
author | Rob Pike <r@golang.org> | 2014-10-03 13:23:35 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2014-10-03 13:23:35 -0700 |
commit | 0a635319fc000e052bd3d6e2823b170d046e06f5 (patch) | |
tree | 9f0c82ad35a879fb1527d00d9a1568e85990d9bf /src/fmt/fmt_test.go | |
parent | a81469cf0b101e552d1968469f528456d9d7835a (diff) | |
download | go-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.go | 122 |
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) { |