Search Apps Documentation Source Content File Folder Download Copy Actions Download

table_test.gno

3.13 Kb · 146 lines
  1package table
  2
  3import (
  4	"testing"
  5
  6	"gno.land/p/nt/uassert/v0"
  7	"gno.land/p/nt/urequire/v0"
  8)
  9
 10func TestNew(t *testing.T) {
 11	header := []string{"Name", "Age", "Country"}
 12	rows := [][]string{
 13		{"Alice", "30", "USA"},
 14		{"Bob", "25", "UK"},
 15	}
 16
 17	table, err := New(header, rows)
 18	urequire.NoError(t, err)
 19
 20	uassert.Equal(t, len(header), len(table.header))
 21	uassert.Equal(t, len(rows), len(table.rows))
 22}
 23
 24func Test_AddRow(t *testing.T) {
 25	header := []string{"Name", "Age"}
 26	rows := [][]string{
 27		{"Alice", "30"},
 28		{"Bob", "25"},
 29	}
 30
 31	table, err := New(header, rows)
 32	urequire.NoError(t, err)
 33
 34	// Add a valid row
 35	err = table.AddRow([]string{"Charlie", "28"})
 36	urequire.NoError(t, err)
 37
 38	expectedRows := [][]string{
 39		{"Alice", "30"},
 40		{"Bob", "25"},
 41		{"Charlie", "28"},
 42	}
 43	uassert.Equal(t, len(expectedRows), len(table.rows))
 44
 45	// Attempt to add a row with a different number of columns
 46	err = table.AddRow([]string{"David"})
 47	uassert.Error(t, err)
 48}
 49
 50func Test_AddColumn(t *testing.T) {
 51	header := []string{"Name", "Age"}
 52	rows := [][]string{
 53		{"Alice", "30"},
 54		{"Bob", "25"},
 55	}
 56
 57	table, err := New(header, rows)
 58	urequire.NoError(t, err)
 59
 60	// Add a valid column
 61	err = table.AddColumn("Country", []string{"USA", "UK"})
 62	urequire.NoError(t, err)
 63
 64	expectedHeader := []string{"Name", "Age", "Country"}
 65	expectedRows := [][]string{
 66		{"Alice", "30", "USA"},
 67		{"Bob", "25", "UK"},
 68	}
 69	uassert.Equal(t, len(expectedHeader), len(table.header))
 70	uassert.Equal(t, len(expectedRows), len(table.rows))
 71
 72	// Attempt to add a column with a different number of values
 73	err = table.AddColumn("City", []string{"New York"})
 74	uassert.Error(t, err)
 75}
 76
 77func Test_RemoveRow(t *testing.T) {
 78	header := []string{"Name", "Age", "Country"}
 79	rows := [][]string{
 80		{"Alice", "30", "USA"},
 81		{"Bob", "25", "UK"},
 82	}
 83
 84	table, err := New(header, rows)
 85	urequire.NoError(t, err)
 86
 87	// Remove the first row
 88	err = table.RemoveRow(0)
 89	urequire.NoError(t, err)
 90
 91	expectedRows := [][]string{
 92		{"Bob", "25", "UK"},
 93	}
 94	uassert.Equal(t, len(expectedRows), len(table.rows))
 95
 96	// Attempt to remove a row out of range
 97	err = table.RemoveRow(5)
 98	uassert.Error(t, err)
 99}
100
101func Test_RemoveColumn(t *testing.T) {
102	header := []string{"Name", "Age", "Country"}
103	rows := [][]string{
104		{"Alice", "30", "USA"},
105		{"Bob", "25", "UK"},
106	}
107
108	table, err := New(header, rows)
109	urequire.NoError(t, err)
110
111	// Remove the second column (Age)
112	err = table.RemoveColumn(1)
113	urequire.NoError(t, err)
114
115	expectedHeader := []string{"Name", "Country"}
116	expectedRows := [][]string{
117		{"Alice", "USA"},
118		{"Bob", "UK"},
119	}
120	uassert.Equal(t, len(expectedHeader), len(table.header))
121	uassert.Equal(t, len(expectedRows), len(table.rows))
122
123	// Attempt to remove a column out of range
124	err = table.RemoveColumn(5)
125	uassert.Error(t, err)
126}
127
128func Test_Validate(t *testing.T) {
129	header := []string{"Name", "Age", "Country"}
130	rows := [][]string{
131		{"Alice", "30", "USA"},
132		{"Bob", "25"},
133	}
134
135	table, err := New(header, rows[:1])
136	urequire.NoError(t, err)
137
138	// Validate should pass
139	err = table.Validate()
140	urequire.NoError(t, err)
141
142	// Add an invalid row and validate again
143	table.rows = append(table.rows, rows[1])
144	err = table.Validate()
145	uassert.Error(t, err)
146}