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}