package table import ( "fmt" "testing" "github.com/jedib0t/go-pretty/v6/text" "github.com/stretchr/testify/assert" ) func TestTable_RenderHTML(t *testing.T) { tw := NewWriter() tw.AppendHeader(testHeader) tw.AppendRows(testRows) tw.AppendRow(testRowMultiLine) tw.AppendFooter(testFooter) tw.SetColumnConfigs([]ColumnConfig{ {Name: "Salary", VAlign: text.VAlignBottom}, {Number: 5, VAlign: text.VAlignBottom}, }) tw.SetTitle(testTitle1) tw.SetCaption(testCaption) tw.Style().Title = TitleOptions{ Align: text.AlignLeft, Colors: text.Colors{text.BgBlack, text.Bold, text.FgHiBlue}, Format: text.FormatTitle, } compareOutput(t, tw.RenderHTML(), `
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.
    Total 10000  
A Song of Ice and Fire
`) } func TestTable_RenderHTML_AutoIndex(t *testing.T) { tw := NewWriter() for rowIdx := 0; rowIdx < 3; rowIdx++ { row := make(Row, 3) for colIdx := 0; colIdx < 3; colIdx++ { row[colIdx] = fmt.Sprintf("%s%d", AutoIndexColumnID(colIdx), rowIdx+1) } tw.AppendRow(row) } for rowIdx := 0; rowIdx < 1; rowIdx++ { row := make(Row, 3) for colIdx := 0; colIdx < 3; colIdx++ { row[colIdx] = AutoIndexColumnID(colIdx) + "F" } tw.AppendFooter(row) } tw.SetOutputMirror(nil) tw.SetAutoIndex(true) tw.SetStyle(StyleLight) compareOutput(t, tw.RenderHTML(), `
  A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
  AF BF CF
`) } func TestTable_RenderHTML_Colored(t *testing.T) { tw := NewWriter() tw.AppendHeader(testHeader) tw.AppendRows(testRows) tw.AppendRow(testRowMultiLine) tw.AppendFooter(testFooter) tw.SetCaption(testCaption) tw.SetTitle(testTitle1) tw.Style().HTML.CSSClass = "go-pretty-table-colored" colorsBlackOnWhite := text.Colors{text.BgWhite, text.FgBlack} tw.SetColumnConfigs([]ColumnConfig{ { Name: "#", Colors: text.Colors{text.Bold}, ColorsHeader: colorsBlackOnWhite, }, { Name: "First Name", Colors: text.Colors{text.FgCyan}, ColorsHeader: colorsBlackOnWhite, }, { Name: "Last Name", Colors: text.Colors{text.FgMagenta}, ColorsHeader: colorsBlackOnWhite, ColorsFooter: colorsBlackOnWhite, }, { Name: "Salary", Colors: text.Colors{text.FgYellow}, ColorsHeader: colorsBlackOnWhite, ColorsFooter: colorsBlackOnWhite, VAlign: text.VAlignBottom, }, { Number: 5, Colors: text.Colors{text.FgBlack}, ColorsHeader: colorsBlackOnWhite, VAlign: text.VAlignBottom, }, }) compareOutput(t, tw.RenderHTML(), `
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.
    Total 10000  
A Song of Ice and Fire
`) } func TestTable_RenderHTML_CustomStyle(t *testing.T) { tw := NewWriter() tw.AppendHeader(testHeader) tw.AppendRow(Row{1, "Arya", "Stark", 3000, "Not today."}) tw.AppendRow(Row{1, "Jon", "Snow", 2000, "You know\nnothing,\nJon Snow!"}) tw.AppendRow(Row{300, "Tyrion", "Lannister", 5000}) tw.AppendFooter(testFooter) tw.SetAutoIndex(true) tw.Style().HTML = HTMLOptions{ CSSClass: "game-of-thrones", EmptyColumn: " ", EscapeText: false, Newline: "", } tw.SetOutputMirror(nil) compareOutput(t, tw.RenderHTML(), `
  # First Name Last Name Salary  
1 1 Arya Stark 3000 Not today.
2 1 Jon Snow 2000 You knownothing,Jon Snow!
3 300 Tyrion Lannister 5000  
      Total 10000  
`) } func TestTable_RenderHTML_Empty(t *testing.T) { tw := NewWriter() assert.Empty(t, tw.RenderHTML()) } func TestTable_RenderHTML_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.RenderHTML(), "") }) t.Run("first column hidden", func(t *testing.T) { tw.SetColumnConfigs(generateColumnConfigsWithHiddenColumns([]int{0})) compareOutput(t, tw.RenderHTML(), `
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.RenderHTML(), `
# 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.RenderHTML(), `
# First Name Last Name Salary
307 >>Tyrion Lannister<< 5013
8 >>Arya Stark<< 3013
27 >>Jon Snow<< 2013
    Total 10000
`) }) } func TestTable_RenderHTML_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.RenderHTML(), `
# 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  
`) }