Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

colorizing golang test run output

Tags:

testing

go

I like it when terminal/console test runs actually show their output in either red or green text. It seems like a lot of the testing libraries available for Go have this. However, I'd like to just use the default testing package that comes with Go. Is there a way to colorize it's output with red and green?

like image 593
Elliot Larson Avatar asked Dec 02 '14 05:12

Elliot Larson


2 Answers

You can use grc, a generic colourizer, to colourize anything.

On Debian/Ubuntu, install with apt-get install grc. On a Mac with , brew install grc.

Create a config directory in your home directory:

mkdir ~/.grc 

Then create your personal grc config in ~/.grc/grc.conf:

# Go \bgo.* test\b conf.gotest 

Then create a Go test colourization config in ~/.grc/conf.gotest, such as:

regexp==== RUN .* colour=blue - regexp=--- PASS: .* colour=green - regexp=^PASS$ colour=green - regexp=^(ok|\?) .* colour=magenta - regexp=--- FAIL: .* colour=red - regexp=[^\s]+\.go(:\d+)? colour=cyan 

Now you can run Go tests with:

grc go test -v ./.. 

Sample output:

screenshot

To avoid typing grc all the time, add an alias to your shell (if using Bash, either ~/.bashrc or ~/.bash_profile or both, depending on your OS):

alias go=grc go 

Now you get colourization simply by running:

go test -v ./.. 
like image 103
Alexander Staubo Avatar answered Sep 22 '22 14:09

Alexander Staubo


You can create a wrapper shell script for this and color it using color escape sequence. Here's a simple example on Linux (I'm not sure how this would look on windows, but I guess there is a way.. :) )

go test -v . | sed ''/PASS/s//$(printf "\033[32mPASS\033[0m")/'' | sed ''/FAIL/s//$(printf "\033[31mFAIL\033[0m")/'' 
like image 41
Makpoc Avatar answered Sep 22 '22 14:09

Makpoc