go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/ansi/table_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package ansi 9 10 import ( 11 "bytes" 12 "fmt" 13 "testing" 14 15 . "go.charczuk.com/sdk/assert" 16 ) 17 18 func Test_Table(t *testing.T) { 19 buffer := new(bytes.Buffer) 20 21 err := Table(buffer, []string{"foo", "bar"}, [][]string{{"1", "2"}, {"3", "4"}}) 22 ItsNil(t, err) 23 ItsEqual(t, false, buffer.String() == "") 24 } 25 26 func Test_Table_emptyErr(t *testing.T) { 27 buffer := new(bytes.Buffer) 28 29 err := Table(buffer, nil, [][]string{{"1", "2"}, {"3", "4"}}) 30 ItsNotNil(t, err) 31 } 32 33 func Test_Table_writeErr(t *testing.T) { 34 failAfter := &failAfter{MaxBytes: 32} 35 36 err := Table(failAfter, []string{"foo", "bar", "baz"}, [][]string{ 37 {"1", "2", "3"}, 38 {"4", "5", "6"}, 39 {"7", "8", "9"}, 40 }) 41 ItsNotNil(t, err) 42 } 43 44 type failAfter struct { 45 Written []byte 46 MaxBytes int 47 } 48 49 func (fa *failAfter) Write(contents []byte) (int, error) { 50 fa.Written = append(fa.Written, contents...) 51 if len(fa.Written) > fa.MaxBytes { 52 return len(contents), fmt.Errorf("did fail") 53 } 54 return len(contents), nil 55 } 56 57 func Test_TableForSlice(t *testing.T) { 58 objects := []struct { 59 ID int 60 Name string 61 }{ 62 {1, "Foo"}, 63 {2, "Bar"}, 64 {3, "Baz"}, 65 } 66 67 output := new(bytes.Buffer) 68 err := TableForSlice(output, objects) 69 ItsNil(t, err) 70 ItsEqual(t, 71 "┌──┬────┐\n│ID│Name│\n├──┼────┤\n│1 │Foo │\n│2 │Bar │\n│3 │Baz │\n└──┴────┘\n", 72 output.String(), 73 ) 74 } 75 76 func Test_TableForSlice_unicode(t *testing.T) { 77 objects := []struct { 78 ID string 79 Count int 80 }{ 81 {"モ foo", 1}, 82 {"ふ bar", 1}, 83 {"ス baz", 3}, 84 } 85 86 output := new(bytes.Buffer) 87 err := TableForSlice(output, objects) 88 ItsNil(t, err) 89 ItsEqual(t, 90 "┌──────┬─────┐\n│ID │Count│\n├──────┼─────┤\n│モ foo│1 │\n│ふ bar│1 │\n│ス baz│3 │\n└──────┴─────┘\n", 91 output.String(), 92 ) 93 }