From 8867bd3d2374462a894c155521420f0c78a3bd49 Mon Sep 17 00:00:00 2001 From: hau Date: Wed, 11 Nov 2020 22:36:53 +0700 Subject: [PATCH] feat: run go test with color --- go.mod | 2 ++ go.sum | 9 +++++++ main.go | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod index beb4170..ee8db57 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/haunt98/go-test-color go 1.15 + +require github.com/fatih/color v1.10.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..9ee68f3 --- /dev/null +++ b/go.sum @@ -0,0 +1,9 @@ +github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/main.go b/main.go new file mode 100644 index 0000000..576f3ff --- /dev/null +++ b/main.go @@ -0,0 +1,75 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "log" + "os" + "os/exec" + "strings" + "sync" + + "github.com/fatih/color" +) + +func main() { + args := []string{"test"} + args = append(args, os.Args[1:]...) + + cmd := exec.Command("go", args...) + cmd.Env = os.Environ() + + reader, writer := io.Pipe() + defer func() { + if err := writer.Close(); err != nil { + log.Printf("failed to close writer: %s", err) + } + + if err := reader.Close(); err != nil { + log.Printf("failed to close reader: %s", err) + } + }() + + cmd.Stdout = writer + cmd.Stderr = writer + + var wg sync.WaitGroup + wg.Add(1) + defer wg.Wait() + + go func() { + defer wg.Done() + + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + line := scanner.Text() + trimmedLine := strings.TrimSpace(line) + + if strings.HasPrefix(trimmedLine, "--- PASS") || + strings.HasPrefix(line, "PASS") || + strings.HasPrefix(line, "ok") { + color.Green("%s\n", line) + continue + } + + if strings.HasPrefix(trimmedLine, "--- FAIL") || + strings.HasPrefix(line, "FAIL") { + color.Red("%s\n", line) + continue + } + + fmt.Println(line) + } + + if err := scanner.Err(); err != nil { + log.Printf("scanner error: %s", err) + } + }() + + if err := cmd.Run(); err != nil { + os.Exit(1) + } + + os.Exit(0) +}