1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
package output
import (
"bytes"
"strings"
"testing"
)
type writerFlusherStub struct {
bytes.Buffer
}
func (s writerFlusherStub) Flush() error {
return nil
}
type testFieldsStruct struct {
Name string
Number int
}
func TestTableOutput(t *testing.T) {
var wfs writerFlusherStub
to := NewTable()
to.w = &wfs
t.Run("AddAllowedFields", func(t *testing.T) {
to.AddAllowedFields(testFieldsStruct{})
if _, ok := to.allowedFields["name"]; !ok {
t.Error("name should be a allowed field")
}
})
t.Run("AddFieldAlias", func(t *testing.T) {
to.AddFieldAlias("leeroy_jenkins", "leeroy jenkins")
if alias, ok := to.fieldAlias["leeroy_jenkins"]; !ok || alias != "leeroy jenkins" {
t.Errorf("leeroy_jenkins alias should be 'leeroy jenkins', is: %v", alias)
}
})
t.Run("AddFieldOutputFn", func(t *testing.T) {
to.AddFieldFn("leeroy jenkins", FieldFn(func(obj interface{}) string {
return "LEEROY JENKINS!!!"
}))
if _, ok := to.fieldMapping["leeroy jenkins"]; !ok {
t.Errorf("'leeroy jenkins' field output fn should be set")
}
})
t.Run("ValidateColumns", func(t *testing.T) {
err := to.ValidateColumns([]string{"non-existent", "NAME"})
if err == nil ||
strings.Contains(err.Error(), "name") ||
!strings.Contains(err.Error(), "non-existent") {
t.Errorf("error should contain 'non-existent' but not 'name': %v", err)
}
})
t.Run("WriteHeader", func(t *testing.T) {
to.WriteHeader([]string{"leeroy_jenkins", "name"})
if wfs.String() != "LEEROY JENKINS\tNAME\n" {
t.Errorf("written header should be 'LEEROY JENKINS\\tNAME\\n', is: %q", wfs.String())
}
wfs.Reset()
})
t.Run("WriteLine", func(t *testing.T) {
to.Write([]string{"leeroy_jenkins", "name", "number"}, &testFieldsStruct{"test123", 1000000000})
if wfs.String() != "LEEROY JENKINS!!!\ttest123\t1000000000\n" {
t.Errorf("written line should be 'LEEROY JENKINS!!!\\ttest123\\t1000000000\\n', is: %q", wfs.String())
}
wfs.Reset()
})
t.Run("Columns", func(t *testing.T) {
if len(to.Columns()) != 3 {
t.Errorf("unexpected number of columns: %v", to.Columns())
}
})
}
func TestFieldName(t *testing.T) {
type fixture struct {
in, out string
}
tests := []fixture{
{"test", "test"},
{"t", "t"},
{"T", "t"},
{"Server", "server"},
{"BoundTo", "bound_to"},
}
for _, test := range tests {
if f := fieldName(test.in); f != test.out {
t.Errorf("Unexpected output expected %q, is %q", test.out, f)
}
}
}
|