147 lines
3.6 KiB
Go
147 lines
3.6 KiB
Go
//
|
|
// render_csv_test.go
|
|
// Copyright (C) 2023 tiglog <me@tiglog.com>
|
|
//
|
|
// Distributed under terms of the MIT license.
|
|
//
|
|
|
|
package table
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestTable_RenderCSV(t *testing.T) {
|
|
tw := NewWriter()
|
|
tw.AppendHeader(testHeader)
|
|
tw.AppendRows(testRows)
|
|
tw.AppendRow(testRowMultiLine)
|
|
tw.AppendRow(testRowTabs)
|
|
tw.AppendFooter(testFooter)
|
|
tw.SetCaption(testCaption)
|
|
tw.SetTitle(testTitle1)
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
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
|
|
,,Total,10000,
|
|
A Song of Ice and Fire`)
|
|
}
|
|
|
|
func TestTable_RenderCSV_AutoIndex(t *testing.T) {
|
|
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)
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
,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`)
|
|
}
|
|
|
|
func TestTable_RenderCSV_Empty(t *testing.T) {
|
|
tw := NewWriter()
|
|
assert.Empty(t, tw.RenderCSV())
|
|
}
|
|
|
|
func TestTable_RenderCSV_HiddenColumns(t *testing.T) {
|
|
tw := NewWriter()
|
|
tw.AppendHeader(testHeader)
|
|
tw.AppendRows(testRows)
|
|
tw.AppendFooter(testFooter)
|
|
|
|
// ensure sorting is done before hiding the columns
|
|
tw.SortBy([]SortBy{
|
|
{Name: "Salary", Mode: DscNumeric},
|
|
})
|
|
|
|
t.Run("every column hidden", func(t *testing.T) {
|
|
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0, 1, 2, 3, 4}))
|
|
|
|
compareOutput(t, tw.RenderCSV(), "")
|
|
})
|
|
|
|
t.Run("first column hidden", func(t *testing.T) {
|
|
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0}))
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
First Name,Last Name,Salary,
|
|
>>Tyrion,Lannister<<,5013,
|
|
>>Arya,Stark<<,3013,
|
|
>>Jon,Snow<<,2013,"~You know nothing\, Jon Snow!~"
|
|
,Total,10000,`)
|
|
})
|
|
|
|
t.Run("column hidden in the middle", func(t *testing.T) {
|
|
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{1}))
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
#,Last Name,Salary,
|
|
307,Lannister<<,5013,
|
|
8,Stark<<,3013,
|
|
27,Snow<<,2013,"~You know nothing\, Jon Snow!~"
|
|
,Total,10000,`)
|
|
})
|
|
|
|
t.Run("last column hidden", func(t *testing.T) {
|
|
tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{4}))
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
#,First Name,Last Name,Salary
|
|
307,>>Tyrion,Lannister<<,5013
|
|
8,>>Arya,Stark<<,3013
|
|
27,>>Jon,Snow<<,2013
|
|
,,Total,10000`)
|
|
})
|
|
}
|
|
|
|
func TestTable_RenderCSV_Sorted(t *testing.T) {
|
|
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}})
|
|
|
|
compareOutput(t, tw.RenderCSV(), `
|
|
#,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,`)
|
|
}
|