From fd825488bf243da004281085b066811a7055bd4c Mon Sep 17 00:00:00 2001 From: Denis Isaev Date: Mon, 18 Mar 2019 00:31:30 +0300 Subject: [PATCH] dev: add test for govet custom formatter --- test/run_test.go | 4 ++ test/testdata/govet_custom_formatter/main.go | 72 ++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 test/testdata/govet_custom_formatter/main.go diff --git a/test/run_test.go b/test/run_test.go index 8bb695c0..caf4a283 100644 --- a/test/run_test.go +++ b/test/run_test.go @@ -63,6 +63,10 @@ func TestUnsafeOk(t *testing.T) { testshared.NewLintRunner(t).Run("--enable-all", getTestDataDir("unsafe")).ExpectNoIssues() } +func TestGovetCustomFormatter(t *testing.T) { + testshared.NewLintRunner(t).Run(getTestDataDir("govet_custom_formatter")).ExpectNoIssues() +} + func TestSkippedDirsNoMatchArg(t *testing.T) { dir := getTestDataDir("skipdirs", "skip_me", "nested") r := testshared.NewLintRunner(t).Run("--print-issued-lines=false", "--no-config", "--skip-dirs", dir, "-Egolint", dir) diff --git a/test/testdata/govet_custom_formatter/main.go b/test/testdata/govet_custom_formatter/main.go new file mode 100644 index 00000000..d005fd7e --- /dev/null +++ b/test/testdata/govet_custom_formatter/main.go @@ -0,0 +1,72 @@ +package main + +import ( + "bytes" + "fmt" + "os" +) + +const ( + escape = "\x1b" + reset = escape + "[0m" + green = escape + "[32m" +) + +// Bar is a progress bar. +type Bar float64 + +var _ fmt.Formatter = Bar(1.0) + +// Format the progress bar as output +func (h Bar) Format(state fmt.State, r rune) { + switch r { + case 'r': + default: + panic(fmt.Sprintf("%v: unexpected format character", float64(h))) + } + + if h > 1.0 { + h = 1.0 + } + + if h < 0.0 { + h = 0.0 + } + + if state.Flag('-') { + h = 1.0 - h + } + + width, ok := state.Width() + if !ok { + // default width of 40 + width = 40 + } + + var pad int + + extra := len([]byte(green)) + len([]byte(reset)) + + p := make([]byte, width+extra) + p[0], p[len(p)-1] = '|', '|' + pad += 2 + + positive := int(Bar(width-pad) * h) + negative := width - pad - positive + + n := 1 + n += copy(p[n:], green) + n += copy(p[n:], bytes.Repeat([]byte("+"), positive)) + n += copy(p[n:], reset) + + if negative > 0 { + copy(p[n:len(p)-1], bytes.Repeat([]byte("-"), negative)) + } + + _, _ = state.Write(p) +} + +func main() { + var b Bar = 0.9 + _, _ = fmt.Fprintf(os.Stdout, "%r", b) +}