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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
package table
import (
"fmt"
"testing"
)
func TestTable_RenderTSV(t *testing.T) {
tests := []struct {
name string
tw func() Writer
output string
}{
{
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendRow(testRowMultiLine)
tw.AppendRow(testRowTabs)
tw.AppendRow(testRowDoubleQuotes)
tw.AppendFooter(testFooter)
tw.SetCaption(testCaption)
tw.SetTitle(testTitle1)
return tw
},
output: `
Game of Thrones
# First Name Last Name Salary
1 Arya Stark 3000
20 Jon Snow 2000 You know nothing, Jon Snow!
300 Tyrion Lannister 5000
0 Winter Is 0 "Coming.
The North Remembers!
This is known."
0 Valar Morghulis 0 "Faceless Men"
0 Valar Morghulis 0 "Faceless""Men"
Total 10000
A Song of Ice and Fire`,
},
{
name: "Auto index",
tw: func() Writer {
tw := NewWriter()
for rowIdx := 0; rowIdx < 10; rowIdx++ {
row := make(Row, 10)
for colIdx := 0; colIdx < 10; colIdx++ {
row[colIdx] = fmt.Sprintf("%s%d", AutoIndexColumnID(colIdx), rowIdx+1)
}
tw.AppendRow(row)
}
for rowIdx := 0; rowIdx < 1; rowIdx++ {
row := make(Row, 10)
for colIdx := 0; colIdx < 10; colIdx++ {
row[colIdx] = AutoIndexColumnID(colIdx) + "F"
}
tw.AppendFooter(row)
}
tw.SetAutoIndex(true)
tw.SetStyle(StyleLight)
return tw
},
output: `
A B C D E F G H I J
1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1
2 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2
3 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3
4 A4 B4 C4 D4 E4 F4 G4 H4 I4 J4
5 A5 B5 C5 D5 E5 F5 G5 H5 I5 J5
6 A6 B6 C6 D6 E6 F6 G6 H6 I6 J6
7 A7 B7 C7 D7 E7 F7 G7 H7 I7 J7
8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8
9 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9
10 A10 B10 C10 D10 E10 F10 G10 H10 I10 J10
AF BF CF DF EF FF GF HF IF JF`,
},
{
name: "Empty",
tw: func() Writer {
tw := NewWriter()
return tw
},
output: ``,
},
{
name: "Every column hidden",
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendFooter(testFooter)
tw.SortBy([]SortBy{
{Name: "Salary", Mode: DscNumeric},
})
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0, 1, 2, 3, 4}))
return tw
},
output: ``,
},
{
name: "First column hidden",
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendFooter(testFooter)
tw.SortBy([]SortBy{
{Name: "Salary", Mode: DscNumeric},
})
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0}))
return tw
},
output: `
First Name Last Name Salary
>>Tyrion Lannister<< 5013
>>Arya Stark<< 3013
>>Jon Snow<< 2013 ~You know nothing, Jon Snow!~
Total 10000 `,
},
{
name: "Column hidden in the middle",
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendFooter(testFooter)
tw.SortBy([]SortBy{
{Name: "Salary", Mode: DscNumeric},
})
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{1}))
return tw
},
output: `
# Last Name Salary
307 Lannister<< 5013
8 Stark<< 3013
27 Snow<< 2013 ~You know nothing, Jon Snow!~
Total 10000 `,
},
{
name: "Last column hidden",
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendFooter(testFooter)
tw.SortBy([]SortBy{
{Name: "Salary", Mode: DscNumeric},
})
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{4}))
return tw
},
output: `
# First Name Last Name Salary
307 >>Tyrion Lannister<< 5013
8 >>Arya Stark<< 3013
27 >>Jon Snow<< 2013
Total 10000`,
},
{
name: "Sorted",
tw: func() Writer {
tw := NewWriter()
tw.AppendHeader(testHeader)
tw.AppendRows(testRows)
tw.AppendRow(Row{11, "Sansa", "Stark", 6000})
tw.AppendFooter(testFooter)
tw.SortBy([]SortBy{{Name: "Last Name", Mode: Asc}, {Name: "First Name", Mode: Asc}})
return tw
},
output: `
# First Name Last Name Salary
300 Tyrion Lannister 5000
20 Jon Snow 2000 You know nothing, Jon Snow!
1 Arya Stark 3000
11 Sansa Stark 6000
Total 10000 `,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
output := tt.tw().RenderTSV()
compareOutput(t, output, tt.output)
})
}
}
|