You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
4 years ago
|
package colorable
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"os"
|
||
|
"runtime"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// checkEncoding checks that colorable is output encoding agnostic as long as
|
||
|
// the encoding is a superset of ASCII. This implies that one byte not part of
|
||
|
// an ANSI sequence must give exactly one byte in output
|
||
|
func checkEncoding(t *testing.T, data []byte) {
|
||
|
// Send non-UTF8 data to colorable
|
||
|
b := bytes.NewBuffer(make([]byte, 0, 10))
|
||
|
if b.Len() != 0 {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
// TODO move colorable wrapping outside the test
|
||
|
NewNonColorable(b).Write(data)
|
||
|
if b.Len() != len(data) {
|
||
|
t.Fatalf("%d bytes expected, got %d", len(data), b.Len())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestEncoding(t *testing.T) {
|
||
|
checkEncoding(t, []byte{}) // Empty
|
||
|
checkEncoding(t, []byte(`abc`)) // "abc"
|
||
|
checkEncoding(t, []byte(`é`)) // "é" in UTF-8
|
||
|
checkEncoding(t, []byte{233}) // 'é' in Latin-1
|
||
|
}
|
||
|
|
||
|
func TestNonColorable(t *testing.T) {
|
||
|
var buf bytes.Buffer
|
||
|
want := "hello"
|
||
|
NewNonColorable(&buf).Write([]byte("\x1b[0m" + want + "\x1b[2J"))
|
||
|
got := buf.String()
|
||
|
if got != "hello" {
|
||
|
t.Fatalf("want %q but %q", want, got)
|
||
|
}
|
||
|
|
||
|
buf.Reset()
|
||
|
NewNonColorable(&buf).Write([]byte("\x1b["))
|
||
|
got = buf.String()
|
||
|
if got != "" {
|
||
|
t.Fatalf("want %q but %q", "", got)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNonColorableNil(t *testing.T) {
|
||
|
paniced := false
|
||
|
func() {
|
||
|
defer func() {
|
||
|
recover()
|
||
|
paniced = true
|
||
|
}()
|
||
|
NewNonColorable(nil)
|
||
|
NewColorable(nil)
|
||
|
}()
|
||
|
|
||
|
if !paniced {
|
||
|
t.Fatalf("should panic")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNonColorableESC(t *testing.T) {
|
||
|
var b bytes.Buffer
|
||
|
NewNonColorable(&b).Write([]byte{0x1b})
|
||
|
if b.Len() > 0 {
|
||
|
t.Fatalf("0 bytes expected, got %d", b.Len())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNonColorableBadESC(t *testing.T) {
|
||
|
var b bytes.Buffer
|
||
|
NewNonColorable(&b).Write([]byte{0x1b, 0x1b})
|
||
|
if b.Len() > 0 {
|
||
|
t.Fatalf("0 bytes expected, got %d", b.Len())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestColorable(t *testing.T) {
|
||
|
if runtime.GOOS == "windows" {
|
||
|
t.Skipf("skip this test on windows")
|
||
|
}
|
||
|
_, ok := NewColorableStdout().(*os.File)
|
||
|
if !ok {
|
||
|
t.Fatalf("should os.Stdout on UNIX")
|
||
|
}
|
||
|
_, ok = NewColorableStderr().(*os.File)
|
||
|
if !ok {
|
||
|
t.Fatalf("should os.Stdout on UNIX")
|
||
|
}
|
||
|
_, ok = NewColorable(os.Stdout).(*os.File)
|
||
|
if !ok {
|
||
|
t.Fatalf("should os.Stdout on UNIX")
|
||
|
}
|
||
|
}
|