mdtable_test.gno

4.03 Kb · 158 lines
  1package mdtable_test
  2
  3import (
  4	"testing"
  5
  6	"gno.land/p/demo/urequire"
  7	"gno.land/p/moul/mdtable"
  8)
  9
 10// XXX: switch to `func Example() {}` when supported.
 11func TestExample(t *testing.T) {
 12	table := mdtable.Table{
 13		Headers: []string{"ID", "Title", "Status"},
 14		Rows: [][]string{
 15			{"#1", "Add a new validator", "succeed"},
 16			{"#2", "Change parameter", "timed out"},
 17			{"#3", "Fill pool", "active"},
 18		},
 19	}
 20
 21	got := table.String()
 22	expected := `| ID | Title | Status |
 23| --- | --- | --- |
 24| #1 | Add a new validator | succeed |
 25| #2 | Change parameter | timed out |
 26| #3 | Fill pool | active |
 27`
 28
 29	urequire.Equal(t, got, expected)
 30}
 31
 32func TestTableString(t *testing.T) {
 33	tests := []struct {
 34		name     string
 35		table    mdtable.Table
 36		expected string
 37	}{
 38		{
 39			name: "With Headers and Rows",
 40			table: mdtable.Table{
 41				Headers: []string{"ID", "Title", "Status", "Date"},
 42				Rows: [][]string{
 43					{"#1", "Add a new validator", "succeed", "2024-01-01"},
 44					{"#2", "Change parameter", "timed out", "2024-01-02"},
 45				},
 46			},
 47			expected: `| ID | Title | Status | Date |
 48| --- | --- | --- | --- |
 49| #1 | Add a new validator | succeed | 2024-01-01 |
 50| #2 | Change parameter | timed out | 2024-01-02 |
 51`,
 52		},
 53		{
 54			name: "Without Headers",
 55			table: mdtable.Table{
 56				Rows: [][]string{
 57					{"#1", "Add a new validator", "succeed", "2024-01-01"},
 58					{"#2", "Change parameter", "timed out", "2024-01-02"},
 59				},
 60			},
 61			expected: `|  |  |  |  |
 62| --- | --- | --- | --- |
 63| #1 | Add a new validator | succeed | 2024-01-01 |
 64| #2 | Change parameter | timed out | 2024-01-02 |
 65`,
 66		},
 67		{
 68			name: "Without Rows",
 69			table: mdtable.Table{
 70				Headers: []string{"ID", "Title", "Status", "Date"},
 71			},
 72			expected: `| ID | Title | Status | Date |
 73| --- | --- | --- | --- |
 74`,
 75		},
 76		{
 77			name: "With Pipe Character in Content",
 78			table: mdtable.Table{
 79				Headers: []string{"ID", "Title", "Status", "Date"},
 80				Rows: [][]string{
 81					{"#1", "Add a new | validator", "succeed", "2024-01-01"},
 82					{"#2", "Change parameter", "timed out", "2024-01-02"},
 83				},
 84			},
 85			expected: `| ID | Title | Status | Date |
 86| --- | --- | --- | --- |
 87| #1 | Add a new | validator | succeed | 2024-01-01 |
 88| #2 | Change parameter | timed out | 2024-01-02 |
 89`,
 90		},
 91		{
 92			name: "With Varying Row Sizes", // XXX: should we have a different behavior?
 93			table: mdtable.Table{
 94				Headers: []string{"ID", "Title"},
 95				Rows: [][]string{
 96					{"#1", "Add a new validator"},
 97					{"#2", "Change parameter", "Extra Column"},
 98					{"#3", "Fill pool"},
 99				},
100			},
101			expected: `| ID | Title |
102| --- | --- |
103| #1 | Add a new validator |
104| #2 | Change parameter | Extra Column |
105| #3 | Fill pool |
106`,
107		},
108		{
109			name: "With UTF-8 Characters",
110			table: mdtable.Table{
111				Headers: []string{"ID", "Title", "Status", "Date"},
112				Rows: [][]string{
113					{"#1", "Café", "succeed", "2024-01-01"},
114					{"#2", "München", "timed out", "2024-01-02"},
115					{"#3", "São Paulo", "active", "2024-01-03"},
116				},
117			},
118			expected: `| ID | Title | Status | Date |
119| --- | --- | --- | --- |
120| #1 | Café | succeed | 2024-01-01 |
121| #2 | München | timed out | 2024-01-02 |
122| #3 | São Paulo | active | 2024-01-03 |
123`,
124		},
125		{
126			name:     "With no Headers and no Rows",
127			table:    mdtable.Table{},
128			expected: ``,
129		},
130	}
131
132	for _, tt := range tests {
133		t.Run(tt.name, func(t *testing.T) {
134			got := tt.table.String()
135			urequire.Equal(t, got, tt.expected)
136		})
137	}
138}
139
140func TestTableAppend(t *testing.T) {
141	table := mdtable.Table{
142		Headers: []string{"ID", "Title", "Status", "Date"},
143	}
144
145	// Use the Append method to add rows to the table
146	table.Append([]string{"#1", "Add a new validator", "succeed", "2024-01-01"})
147	table.Append([]string{"#2", "Change parameter", "timed out", "2024-01-02"})
148	table.Append([]string{"#3", "Fill pool", "active", "2024-01-03"})
149	got := table.String()
150
151	expected := `| ID | Title | Status | Date |
152| --- | --- | --- | --- |
153| #1 | Add a new validator | succeed | 2024-01-01 |
154| #2 | Change parameter | timed out | 2024-01-02 |
155| #3 | Fill pool | active | 2024-01-03 |
156`
157	urequire.Equal(t, got, expected)
158}