1 package tableprinter
2
3 import (
4 "bytes"
5 "fmt"
6 "log"
7 "os"
8 "strings"
9 "testing"
10
11 "github.com/MakeNowJust/heredoc"
12 )
13
14 func ExampleTablePrinter() {
15
16 isTTY := true
17 termWidth := 14
18 red := func(s string) string {
19 return "\x1b[31m" + s + "\x1b[m"
20 }
21
22 t := New(os.Stdout, isTTY, termWidth)
23 t.AddField("9", WithTruncate(nil))
24 t.AddField("hello")
25 t.EndRow()
26 t.AddField("10", WithTruncate(nil))
27 t.AddField("long description", WithColor(red))
28 t.EndRow()
29 if err := t.Render(); err != nil {
30 log.Fatal(err)
31 }
32
33
34
35 }
36
37 func Test_ttyTablePrinter_autoTruncate(t *testing.T) {
38 buf := bytes.Buffer{}
39 tp := New(&buf, true, 5)
40
41 tp.AddField("1")
42 tp.AddField("hello")
43 tp.EndRow()
44 tp.AddField("2")
45 tp.AddField("world")
46 tp.EndRow()
47
48 err := tp.Render()
49 if err != nil {
50 t.Fatalf("unexpected error: %v", err)
51 }
52
53 expected := "1 he\n2 wo\n"
54 if buf.String() != expected {
55 t.Errorf("expected: %q, got: %q", expected, buf.String())
56 }
57 }
58
59 func Test_ttyTablePrinter_WithTruncate(t *testing.T) {
60 buf := bytes.Buffer{}
61 tp := New(&buf, true, 15)
62
63 tp.AddField("long SHA", WithTruncate(nil))
64 tp.AddField("hello")
65 tp.EndRow()
66 tp.AddField("another SHA", WithTruncate(nil))
67 tp.AddField("world")
68 tp.EndRow()
69
70 err := tp.Render()
71 if err != nil {
72 t.Fatalf("unexpected error: %v", err)
73 }
74
75 expected := "long SHA he\nanother SHA wo\n"
76 if buf.String() != expected {
77 t.Errorf("expected: %q, got: %q", expected, buf.String())
78 }
79 }
80
81 func Test_ttyTablePrinter_AddHeader(t *testing.T) {
82 buf := bytes.Buffer{}
83 tp := New(&buf, true, 80)
84
85 tp.AddHeader([]string{"ONE", "TWO", "THREE"}, WithColor(func(s string) string {
86 return fmt.Sprintf("\x1b[4m%s\x1b[m", s)
87 }))
88
89 tp.AddHeader([]string{"SHOULD", "NOT", "EXIST"})
90
91 tp.AddField("hello")
92 tp.AddField("beautiful")
93 tp.AddField("people")
94 tp.EndRow()
95
96 err := tp.Render()
97 if err != nil {
98 t.Fatalf("unexpected error: %v", err)
99 }
100
101 expected := heredoc.Docf(`
102 %[1]s[4mONE %[1]s[m %[1]s[4mTWO %[1]s[m %[1]s[4mTHREE%[1]s[m
103 hello beautiful people
104 `, "\x1b")
105 if buf.String() != expected {
106 t.Errorf("expected: %q, got: %q", expected, buf.String())
107 }
108 }
109
110 func Test_ttyTablePrinter_WithPadding(t *testing.T) {
111 buf := bytes.Buffer{}
112 tp := New(&buf, true, 80)
113
114
115 tp.AddHeader([]string{"A", "B", "C"}, WithPadding(func(width int, s string) string {
116 left := (width - len(s)) / 2
117 return strings.Repeat(" ", left) + s + strings.Repeat(" ", width-left-len(s))
118 }))
119
120 tp.AddField("hello")
121 tp.AddField("beautiful")
122 tp.AddField("people")
123 tp.EndRow()
124
125 err := tp.Render()
126 if err != nil {
127 t.Fatalf("unexpected error: %v", err)
128 }
129
130 expected := heredoc.Doc(`
131 A B C
132 hello beautiful people
133 `)
134 if buf.String() != expected {
135 t.Errorf("expected: %q, got: %q", expected, buf.String())
136 }
137 }
138
139 func Test_tsvTablePrinter(t *testing.T) {
140 buf := bytes.Buffer{}
141 tp := New(&buf, false, 0)
142
143 tp.AddField("1")
144 tp.AddField("hello")
145 tp.EndRow()
146 tp.AddField("2")
147 tp.AddField("world")
148 tp.EndRow()
149
150 err := tp.Render()
151 if err != nil {
152 t.Fatalf("unexpected error: %v", err)
153 }
154
155 expected := "1\thello\n2\tworld\n"
156 if buf.String() != expected {
157 t.Errorf("expected: %q, got: %q", expected, buf.String())
158 }
159 }
160
161 func Test_tsvTablePrinter_AddHeader(t *testing.T) {
162 buf := bytes.Buffer{}
163 tp := New(&buf, false, 0)
164
165
166 tp.AddHeader([]string{"ONE", "TWO", "THREE"})
167
168 tp.AddField("hello")
169 tp.AddField("beautiful")
170 tp.AddField("people")
171 tp.EndRow()
172 tp.AddField("1")
173 tp.AddField("2")
174 tp.AddField("3")
175 tp.EndRow()
176
177 err := tp.Render()
178 if err != nil {
179 t.Fatalf("unexpected error: %v", err)
180 }
181
182 expected := "hello\tbeautiful\tpeople\n1\t2\t3\n"
183 if buf.String() != expected {
184 t.Errorf("expected: %q, got: %q", expected, buf.String())
185 }
186 }
187
View as plain text