func TestNewAnsiColor2(t *testing.T) { inner := bytes.NewBufferString("") w1 := ansicolor.NewAnsiColorWriter(inner) w2 := ansicolor.NewAnsiColorWriter(w1) if w1 != w2 { t.Errorf("Get %#v, want %#v", w1, w2) } }
func TestNewAnsiColor1(t *testing.T) { inner := bytes.NewBufferString("") w := ansicolor.NewAnsiColorWriter(inner) if w == inner { t.Errorf("Get %#v, want %#v", w, inner) } }
func TestWritePlanText(t *testing.T) { inner := bytes.NewBufferString("") w := ansicolor.NewAnsiColorWriter(inner) expected := "plain text" fmt.Fprintf(w, expected) actual := inner.String() if actual != expected { t.Errorf("Get %q, want %q", actual, expected) } }
func ExampleNewAnsiColorWriter() { w := ansicolor.NewAnsiColorWriter(os.Stdout) text := "%sforeground %sbold%s %sbackground%s\n" fmt.Fprintf(w, text, "\x1b[31m", "\x1b[1m", "\x1b[21m", "\x1b[41;32m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[32m", "\x1b[1m", "\x1b[21m", "\x1b[42;31m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[33m", "\x1b[1m", "\x1b[21m", "\x1b[43;34m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[34m", "\x1b[1m", "\x1b[21m", "\x1b[44;33m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[35m", "\x1b[1m", "\x1b[21m", "\x1b[45;36m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[36m", "\x1b[1m", "\x1b[21m", "\x1b[46;35m", "\x1b[0m") fmt.Fprintf(w, text, "\x1b[37m", "\x1b[1m", "\x1b[21m", "\x1b[47;30m", "\x1b[0m") }
func writeAnsiColor(expectedText, colorCode string) (actualText string, actualAttributes uint16, err error) { inner := bytes.NewBufferString("") w := ansicolor.NewAnsiColorWriter(inner) fmt.Fprintf(w, "\x1b[%sm%s", colorCode, expectedText) actualText = inner.String() screenInfo := GetConsoleScreenBufferInfo(uintptr(syscall.Stdout)) if screenInfo != nil { actualAttributes = screenInfo.WAttributes } else { err = &screenNotFoundError{} } return }
func TestWriteParseText(t *testing.T) { inner := bytes.NewBufferString("") w := ansicolor.NewAnsiColorWriter(inner) inputTail := "\x1b[0mtail text" expectedTail := "tail text" fmt.Fprintf(w, inputTail) actualTail := inner.String() inner.Reset() if actualTail != expectedTail { t.Errorf("Get %q, want %q", actualTail, expectedTail) } inputHead := "head text\x1b[0m" expectedHead := "head text" fmt.Fprintf(w, inputHead) actualHead := inner.String() inner.Reset() if actualHead != expectedHead { t.Errorf("Get %q, want %q", actualHead, expectedHead) } inputBothEnds := "both ends \x1b[0m text" expectedBothEnds := "both ends text" fmt.Fprintf(w, inputBothEnds) actualBothEnds := inner.String() inner.Reset() if actualBothEnds != expectedBothEnds { t.Errorf("Get %q, want %q", actualBothEnds, expectedBothEnds) } inputManyEsc := "\x1b\x1b\x1b\x1b[0m many esc" expectedManyEsc := "\x1b\x1b\x1b many esc" fmt.Fprintf(w, inputManyEsc) actualManyEsc := inner.String() inner.Reset() if actualManyEsc != expectedManyEsc { t.Errorf("Get %q, want %q", actualManyEsc, expectedManyEsc) } expectedSplit := "split text" for _, ch := range "split \x1b[0m text" { fmt.Fprintf(w, string(ch)) } actualSplit := inner.String() inner.Reset() if actualSplit != expectedSplit { t.Errorf("Get %q, want %q", actualSplit, expectedSplit) } }
func main() { w := ansicolor.NewAnsiColorWriter(os.Stdout) io.Copy(w, os.Stdin) }
func TestColorVisual(t *testing.T) { // First Visual Test fmt.Println("") Output = ansicolor.NewAnsiColorWriter(os.Stdout) New(FgRed).Printf("red\t") New(BgRed).Print(" ") New(FgRed, Bold).Println(" red") New(FgGreen).Printf("green\t") New(BgGreen).Print(" ") New(FgGreen, Bold).Println(" green") New(FgYellow).Printf("yellow\t") New(BgYellow).Print(" ") New(FgYellow, Bold).Println(" yellow") New(FgBlue).Printf("blue\t") New(BgBlue).Print(" ") New(FgBlue, Bold).Println(" blue") New(FgMagenta).Printf("magenta\t") New(BgMagenta).Print(" ") New(FgMagenta, Bold).Println(" magenta") New(FgCyan).Printf("cyan\t") New(BgCyan).Print(" ") New(FgCyan, Bold).Println(" cyan") New(FgWhite).Printf("white\t") New(BgWhite).Print(" ") New(FgWhite, Bold).Println(" white") fmt.Println("") // Second Visual test Black("black") Red("red") Green("green") Yellow("yellow") Blue("blue") Magenta("magenta") Cyan("cyan") White("white") // Third visual test fmt.Println() Set(FgBlue) fmt.Println("is this blue?") Unset() Set(FgMagenta) fmt.Println("and this magenta?") Unset() // Fourth Visual test fmt.Println() blue := New(FgBlue).PrintlnFunc() blue("blue text with custom print func") red := New(FgRed).PrintfFunc() red("red text with a printf func: %d\n", 123) put := New(FgYellow).SprintFunc() warn := New(FgRed).SprintFunc() fmt.Fprintf(Output, "this is a %s and this is %s.\n", put("warning"), warn("error")) info := New(FgWhite, BgGreen).SprintFunc() fmt.Fprintf(Output, "this %s rocks!\n", info("package")) // Fifth Visual Test fmt.Println() fmt.Fprintln(Output, BlackString("black")) fmt.Fprintln(Output, RedString("red")) fmt.Fprintln(Output, GreenString("green")) fmt.Fprintln(Output, YellowString("yellow")) fmt.Fprintln(Output, BlueString("blue")) fmt.Fprintln(Output, MagentaString("magenta")) fmt.Fprintln(Output, CyanString("cyan")) fmt.Fprintln(Output, WhiteString("white")) }
// Add is used to chain SGR parameters. Use as many as parameters to combine // and create custom color objects. Example: Add(color.FgRed, color.Underline). func (c *Color) Add(value ...Attribute) *Color { c.params = append(c.params, value...) return c } func (c *Color) prepend(value Attribute) { c.params = append(c.params, 0) copy(c.params[1:], c.params[0:]) c.params[0] = value } // Output defines the standard output of the print functions. By default // os.Stdout is used. var Output = ansicolor.NewAnsiColorWriter(os.Stdout) // Print formats using the default formats for its operands and writes to // standard output. Spaces are added between operands when neither is a // string. It returns the number of bytes written and any write error // encountered. This is the standard fmt.Print() method wrapped with the given // color. func (c *Color) Print(a ...interface{}) (n int, err error) { c.Set() defer c.unset() return fmt.Fprint(Output, a...) } // Printf formats according to a format specifier and writes to standard output. // It returns the number of bytes written and any write error encountered.