1 package table
2
3 import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 )
9
10 func TestTable_RenderCSV(t *testing.T) {
11 tw := NewWriter()
12 tw.AppendHeader(testHeader)
13 tw.AppendRows(testRows)
14 tw.AppendRow(testRowMultiLine)
15 tw.AppendRow(testRowTabs)
16 tw.AppendFooter(testFooter)
17 tw.SetCaption(testCaption)
18 tw.SetTitle(testTitle1)
19
20 compareOutput(t, tw.RenderCSV(), `Game of Thrones
21 #,First Name,Last Name,Salary,
22 1,Arya,Stark,3000,
23 20,Jon,Snow,2000,"You know nothing\, Jon Snow!"
24 300,Tyrion,Lannister,5000,
25 0,Winter,Is,0,"Coming.
26 The North Remembers!
27 This is known."
28 0,Valar,Morghulis,0,Faceless Men
29 ,,Total,10000,
30 A Song of Ice and Fire`)
31 }
32
33 func TestTable_RenderCSV_AutoIndex(t *testing.T) {
34 tw := NewWriter()
35 for rowIdx := 0; rowIdx < 10; rowIdx++ {
36 row := make(Row, 10)
37 for colIdx := 0; colIdx < 10; colIdx++ {
38 row[colIdx] = fmt.Sprintf("%s%d", AutoIndexColumnID(colIdx), rowIdx+1)
39 }
40 tw.AppendRow(row)
41 }
42 for rowIdx := 0; rowIdx < 1; rowIdx++ {
43 row := make(Row, 10)
44 for colIdx := 0; colIdx < 10; colIdx++ {
45 row[colIdx] = AutoIndexColumnID(colIdx) + "F"
46 }
47 tw.AppendFooter(row)
48 }
49 tw.SetAutoIndex(true)
50 tw.SetStyle(StyleLight)
51
52 compareOutput(t, tw.RenderCSV(), `,A,B,C,D,E,F,G,H,I,J
53 1,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1
54 2,A2,B2,C2,D2,E2,F2,G2,H2,I2,J2
55 3,A3,B3,C3,D3,E3,F3,G3,H3,I3,J3
56 4,A4,B4,C4,D4,E4,F4,G4,H4,I4,J4
57 5,A5,B5,C5,D5,E5,F5,G5,H5,I5,J5
58 6,A6,B6,C6,D6,E6,F6,G6,H6,I6,J6
59 7,A7,B7,C7,D7,E7,F7,G7,H7,I7,J7
60 8,A8,B8,C8,D8,E8,F8,G8,H8,I8,J8
61 9,A9,B9,C9,D9,E9,F9,G9,H9,I9,J9
62 10,A10,B10,C10,D10,E10,F10,G10,H10,I10,J10
63 ,AF,BF,CF,DF,EF,FF,GF,HF,IF,JF`)
64 }
65
66 func TestTable_RenderCSV_Empty(t *testing.T) {
67 tw := NewWriter()
68 assert.Empty(t, tw.RenderCSV())
69 }
70
71 func TestTable_RenderCSV_HiddenColumns(t *testing.T) {
72 tw := NewWriter()
73 tw.AppendHeader(testHeader)
74 tw.AppendRows(testRows)
75 tw.AppendFooter(testFooter)
76
77
78 tw.SortBy([]SortBy{
79 {Name: "Salary", Mode: DscNumeric},
80 })
81
82 t.Run("every column hidden", func(t *testing.T) {
83 tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0, 1, 2, 3, 4}))
84
85 compareOutput(t, tw.RenderCSV(), "")
86 })
87
88 t.Run("first column hidden", func(t *testing.T) {
89 tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0}))
90
91 compareOutput(t, tw.RenderCSV(), `First Name,Last Name,Salary,
92 >>Tyrion,Lannister<<,5013,
93 >>Arya,Stark<<,3013,
94 >>Jon,Snow<<,2013,"~You know nothing\, Jon Snow!~"
95 ,Total,10000,`)
96 })
97
98 t.Run("column hidden in the middle", func(t *testing.T) {
99 tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{1}))
100
101 compareOutput(t, tw.RenderCSV(), `#,Last Name,Salary,
102 307,Lannister<<,5013,
103 8,Stark<<,3013,
104 27,Snow<<,2013,"~You know nothing\, Jon Snow!~"
105 ,Total,10000,`)
106 })
107
108 t.Run("last column hidden", func(t *testing.T) {
109 tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{4}))
110
111 compareOutput(t, tw.RenderCSV(), `#,First Name,Last Name,Salary
112 307,>>Tyrion,Lannister<<,5013
113 8,>>Arya,Stark<<,3013
114 27,>>Jon,Snow<<,2013
115 ,,Total,10000`)
116 })
117 }
118
119 func TestTable_RenderCSV_Sorted(t *testing.T) {
120 tw := NewWriter()
121 tw.AppendHeader(testHeader)
122 tw.AppendRows(testRows)
123 tw.AppendRow(Row{11, "Sansa", "Stark", 6000})
124 tw.AppendFooter(testFooter)
125 tw.SortBy([]SortBy{{Name: "Last Name", Mode: Asc}, {Name: "First Name", Mode: Asc}})
126
127 compareOutput(t, tw.RenderCSV(), `#,First Name,Last Name,Salary,
128 300,Tyrion,Lannister,5000,
129 20,Jon,Snow,2000,"You know nothing\, Jon Snow!"
130 1,Arya,Stark,3000,
131 11,Sansa,Stark,6000,
132 ,,Total,10000,`)
133 }
134
View as plain text