go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/nodes/pkg/types/table_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package types 9 10 import ( 11 "testing" 12 13 "go.charczuk.com/sdk/assert" 14 ) 15 16 func Test_Table_Set(t *testing.T) { 17 table := new(Table) 18 table.Columns = []TableColumn{ 19 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 20 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 21 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 22 } 23 err := table.Set(0, 0, "new-0-0") 24 assert.ItsNil(t, err) 25 assert.ItsEqual(t, "new-0-0", table.Columns[0].Values[0]) 26 assert.ItsEqual(t, "0-1", table.Columns[0].Values[1]) 27 assert.ItsEqual(t, "0-2", table.Columns[0].Values[2]) 28 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 29 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 30 } 31 32 func Test_Table_Set_addRows(t *testing.T) { 33 table := new(Table) 34 table.Columns = []TableColumn{ 35 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 36 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 37 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 38 } 39 err := table.Set(5, 0, "new-0-5") 40 assert.ItsNil(t, err) 41 assert.ItsEqual(t, 6, len(table.Columns[0].Values)) 42 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 43 assert.ItsEqual(t, "0-1", table.Columns[0].Values[1]) 44 assert.ItsEqual(t, "0-2", table.Columns[0].Values[2]) 45 assert.ItsNil(t, table.Columns[0].Values[3]) 46 assert.ItsNil(t, table.Columns[0].Values[4]) 47 assert.ItsEqual(t, "new-0-5", table.Columns[0].Values[5]) 48 assert.ItsEqual(t, "0-1", table.Columns[0].Values[1]) 49 assert.ItsEqual(t, "0-2", table.Columns[0].Values[2]) 50 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 51 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 52 } 53 54 func Test_Table_InsertColumn_invalid_before(t *testing.T) { 55 table := new(Table) 56 table.Columns = []TableColumn{ 57 {Name: "0"}, 58 {Name: "1"}, 59 {Name: "2"}, 60 } 61 err := table.InsertColumn(-1, TableColumn{Name: "New", ValueType: "string"}) 62 assert.ItsNotNil(t, err) 63 assert.ItsEqual(t, "0", table.Columns[0].Name) 64 assert.ItsEqual(t, "1", table.Columns[1].Name) 65 assert.ItsEqual(t, "2", table.Columns[2].Name) 66 } 67 68 func Test_Table_InsertColumn_invalid_after(t *testing.T) { 69 table := new(Table) 70 table.Columns = []TableColumn{ 71 {Name: "0"}, 72 {Name: "1"}, 73 {Name: "2"}, 74 } 75 err := table.InsertColumn(4, TableColumn{Name: "New", ValueType: "string"}) 76 assert.ItsNotNil(t, err) 77 assert.ItsEqual(t, "0", table.Columns[0].Name) 78 assert.ItsEqual(t, "1", table.Columns[1].Name) 79 assert.ItsEqual(t, "2", table.Columns[2].Name) 80 } 81 82 func Test_Table_InsertColumn_empty(t *testing.T) { 83 table := new(Table) 84 table.Columns = []TableColumn{} 85 err := table.InsertColumn(0, TableColumn{Name: "New", ValueType: "string"}) 86 assert.ItsNil(t, err) 87 assert.ItsEqual(t, "New", table.Columns[0].Name) 88 } 89 90 func Test_Table_InsertColumn_zero(t *testing.T) { 91 table := new(Table) 92 table.Columns = []TableColumn{ 93 {Name: "0"}, 94 {Name: "1"}, 95 {Name: "2"}, 96 } 97 err := table.InsertColumn(0, TableColumn{Name: "New", ValueType: "string"}) 98 assert.ItsNil(t, err) 99 assert.ItsEqual(t, "New", table.Columns[0].Name) 100 assert.ItsEqual(t, "0", table.Columns[1].Name) 101 assert.ItsEqual(t, "1", table.Columns[2].Name) 102 assert.ItsEqual(t, "2", table.Columns[3].Name) 103 } 104 105 func Test_Table_InsertColumn_mid(t *testing.T) { 106 table := new(Table) 107 table.Columns = []TableColumn{ 108 {Name: "0"}, 109 {Name: "1"}, 110 {Name: "2"}, 111 } 112 err := table.InsertColumn(1, TableColumn{Name: "New", ValueType: "string"}) 113 assert.ItsNil(t, err) 114 assert.ItsEqual(t, "0", table.Columns[0].Name) 115 assert.ItsEqual(t, "New", table.Columns[1].Name) 116 assert.ItsEqual(t, "1", table.Columns[2].Name) 117 assert.ItsEqual(t, "2", table.Columns[3].Name) 118 } 119 120 func Test_Table_InsertColumn_mid2(t *testing.T) { 121 table := new(Table) 122 table.Columns = []TableColumn{ 123 {Name: "0"}, 124 {Name: "1"}, 125 {Name: "2"}, 126 } 127 err := table.InsertColumn(2, TableColumn{Name: "New", ValueType: "string"}) 128 assert.ItsNil(t, err) 129 assert.ItsEqual(t, "0", table.Columns[0].Name) 130 assert.ItsEqual(t, "1", table.Columns[1].Name) 131 assert.ItsEqual(t, "New", table.Columns[2].Name) 132 assert.ItsEqual(t, "2", table.Columns[3].Name) 133 } 134 135 func Test_Table_InsertColumn_end(t *testing.T) { 136 table := new(Table) 137 table.Columns = []TableColumn{ 138 {Name: "0"}, 139 {Name: "1"}, 140 {Name: "2"}, 141 } 142 err := table.InsertColumn(3, TableColumn{Name: "New", ValueType: "string"}) 143 assert.ItsNil(t, err) 144 assert.ItsEqual(t, "0", table.Columns[0].Name) 145 assert.ItsEqual(t, "1", table.Columns[1].Name) 146 assert.ItsEqual(t, "2", table.Columns[2].Name) 147 assert.ItsEqual(t, "New", table.Columns[3].Name) 148 } 149 150 func Test_Table_ReorderColumn(t *testing.T) { 151 table := new(Table) 152 table.Columns = []TableColumn{ 153 {Name: "0"}, 154 {Name: "1"}, 155 {Name: "2"}, 156 } 157 err := table.ReorderColumn(0, 2) 158 assert.ItsNil(t, err) 159 assert.ItsEqual(t, "2", table.Columns[0].Name) 160 assert.ItsEqual(t, "1", table.Columns[1].Name) 161 assert.ItsEqual(t, "0", table.Columns[2].Name) 162 } 163 164 func Test_Table_ReorderColumn_invalid_before_old(t *testing.T) { 165 table := new(Table) 166 table.Columns = []TableColumn{ 167 {Name: "0"}, 168 {Name: "1"}, 169 {Name: "2"}, 170 } 171 err := table.ReorderColumn(-1, 2) 172 assert.ItsNotNil(t, err) 173 assert.ItsEqual(t, "0", table.Columns[0].Name) 174 assert.ItsEqual(t, "1", table.Columns[1].Name) 175 assert.ItsEqual(t, "2", table.Columns[2].Name) 176 } 177 178 func Test_Table_ReorderColumn_invalid_before_new(t *testing.T) { 179 table := new(Table) 180 table.Columns = []TableColumn{ 181 {Name: "0"}, 182 {Name: "1"}, 183 {Name: "2"}, 184 } 185 err := table.ReorderColumn(0, -2) 186 assert.ItsNotNil(t, err) 187 assert.ItsEqual(t, "0", table.Columns[0].Name) 188 assert.ItsEqual(t, "1", table.Columns[1].Name) 189 assert.ItsEqual(t, "2", table.Columns[2].Name) 190 } 191 192 func Test_Table_ReorderColumn_invalid_after_old(t *testing.T) { 193 table := new(Table) 194 table.Columns = []TableColumn{ 195 {Name: "0"}, 196 {Name: "1"}, 197 {Name: "2"}, 198 } 199 err := table.ReorderColumn(4, 2) 200 assert.ItsNotNil(t, err) 201 assert.ItsEqual(t, "0", table.Columns[0].Name) 202 assert.ItsEqual(t, "1", table.Columns[1].Name) 203 assert.ItsEqual(t, "2", table.Columns[2].Name) 204 } 205 206 func Test_Table_ReorderColumn_invalid_after_new(t *testing.T) { 207 table := new(Table) 208 table.Columns = []TableColumn{ 209 {Name: "0"}, 210 {Name: "1"}, 211 {Name: "2"}, 212 } 213 err := table.ReorderColumn(0, 4) 214 assert.ItsNotNil(t, err) 215 assert.ItsEqual(t, "0", table.Columns[0].Name) 216 assert.ItsEqual(t, "1", table.Columns[1].Name) 217 assert.ItsEqual(t, "2", table.Columns[2].Name) 218 } 219 220 func Test_Table_DeleteColumn_invalid_before(t *testing.T) { 221 table := new(Table) 222 table.Columns = []TableColumn{ 223 {Name: "0"}, 224 {Name: "1"}, 225 {Name: "2"}, 226 } 227 err := table.DeleteColumn(-1) 228 assert.ItsNotNil(t, err) 229 assert.ItsEqual(t, "0", table.Columns[0].Name) 230 assert.ItsEqual(t, "1", table.Columns[1].Name) 231 assert.ItsEqual(t, "2", table.Columns[2].Name) 232 } 233 234 func Test_Table_DeleteColumn_invalid_after(t *testing.T) { 235 table := new(Table) 236 table.Columns = []TableColumn{ 237 {Name: "0"}, 238 {Name: "1"}, 239 {Name: "2"}, 240 } 241 err := table.DeleteColumn(3) 242 assert.ItsNotNil(t, err) 243 assert.ItsEqual(t, "0", table.Columns[0].Name) 244 assert.ItsEqual(t, "1", table.Columns[1].Name) 245 assert.ItsEqual(t, "2", table.Columns[2].Name) 246 } 247 248 func Test_Table_DeleteColumn_zero(t *testing.T) { 249 table := new(Table) 250 table.Columns = []TableColumn{ 251 {Name: "0"}, 252 {Name: "1"}, 253 {Name: "2"}, 254 } 255 err := table.DeleteColumn(0) 256 assert.ItsNil(t, err) 257 assert.ItsEqual(t, "1", table.Columns[0].Name) 258 assert.ItsEqual(t, "2", table.Columns[1].Name) 259 } 260 261 func Test_Table_DeleteColumn_mid(t *testing.T) { 262 table := new(Table) 263 table.Columns = []TableColumn{ 264 {Name: "0"}, 265 {Name: "1"}, 266 {Name: "2"}, 267 } 268 err := table.DeleteColumn(1) 269 assert.ItsNil(t, err) 270 assert.ItsEqual(t, "0", table.Columns[0].Name) 271 assert.ItsEqual(t, "2", table.Columns[1].Name) 272 } 273 274 func Test_Table_DeleteColumn_end(t *testing.T) { 275 table := new(Table) 276 table.Columns = []TableColumn{ 277 {Name: "0"}, 278 {Name: "1"}, 279 {Name: "2"}, 280 } 281 err := table.DeleteColumn(2) 282 assert.ItsNil(t, err) 283 assert.ItsEqual(t, "0", table.Columns[0].Name) 284 assert.ItsEqual(t, "1", table.Columns[1].Name) 285 } 286 287 func Test_Table_ReorderRow(t *testing.T) { 288 table := new(Table) 289 table.Columns = []TableColumn{ 290 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 291 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 292 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 293 } 294 err := table.ReorderRow(0, 1) 295 assert.ItsNil(t, err) 296 assert.ItsEqual(t, "0-1", table.Columns[0].Values[0]) 297 assert.ItsEqual(t, "1-1", table.Columns[1].Values[0]) 298 assert.ItsEqual(t, "2-1", table.Columns[2].Values[0]) 299 assert.ItsEqual(t, "0-0", table.Columns[0].Values[1]) 300 assert.ItsEqual(t, "1-0", table.Columns[1].Values[1]) 301 assert.ItsEqual(t, "2-0", table.Columns[2].Values[1]) 302 } 303 304 func Test_Table_InsertRow_zero(t *testing.T) { 305 table := new(Table) 306 table.Columns = []TableColumn{ 307 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 308 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 309 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 310 {Name: "3", Values: []any{}}, 311 } 312 313 err := table.InsertRow(0, []any{"a", "b", "c", "d"}) 314 assert.ItsNil(t, err) 315 assert.ItsEqual(t, 4, len(table.Columns[0].Values)) 316 assert.ItsEqual(t, "a", table.Columns[0].Values[0]) 317 assert.ItsEqual(t, "0-0", table.Columns[0].Values[1]) 318 319 assert.ItsEqual(t, 5, len(table.Columns[1].Values)) 320 assert.ItsEqual(t, "b", table.Columns[1].Values[0]) 321 assert.ItsEqual(t, "1-0", table.Columns[1].Values[1]) 322 323 assert.ItsEqual(t, 6, len(table.Columns[2].Values)) 324 assert.ItsEqual(t, "c", table.Columns[2].Values[0]) 325 assert.ItsEqual(t, "2-0", table.Columns[2].Values[1]) 326 327 assert.ItsEqual(t, 1, len(table.Columns[3].Values)) 328 assert.ItsEqual(t, "d", table.Columns[3].Values[0]) 329 } 330 331 func Test_Table_InsertRow_mid(t *testing.T) { 332 table := new(Table) 333 table.Columns = []TableColumn{ 334 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 335 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 336 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 337 {Name: "3", Values: []any{}}, 338 } 339 340 err := table.InsertRow(1, []any{"a", "b", "c", "d"}) 341 assert.ItsNil(t, err) 342 assert.ItsEqual(t, 4, len(table.Columns[0].Values)) 343 assert.ItsEqual(t, "a", table.Columns[0].Values[1]) 344 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 345 346 assert.ItsEqual(t, 5, len(table.Columns[1].Values)) 347 assert.ItsEqual(t, "b", table.Columns[1].Values[1]) 348 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 349 350 assert.ItsEqual(t, 6, len(table.Columns[2].Values)) 351 assert.ItsEqual(t, "c", table.Columns[2].Values[1]) 352 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 353 354 assert.ItsEqual(t, 2, len(table.Columns[3].Values)) 355 assert.ItsNil(t, table.Columns[3].Values[0]) 356 assert.ItsEqual(t, "d", table.Columns[3].Values[1]) 357 } 358 359 func Test_Table_InsertRow_mid_short(t *testing.T) { 360 table := new(Table) 361 table.Columns = []TableColumn{ 362 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 363 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 364 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 365 {Name: "3", Values: []any{}}, 366 } 367 368 err := table.InsertRow(1, []any{"a", "b", "c"}) 369 assert.ItsNil(t, err) 370 assert.ItsEqual(t, 4, len(table.Columns[0].Values)) 371 assert.ItsEqual(t, "a", table.Columns[0].Values[1]) 372 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 373 374 assert.ItsEqual(t, 5, len(table.Columns[1].Values)) 375 assert.ItsEqual(t, "b", table.Columns[1].Values[1]) 376 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 377 378 assert.ItsEqual(t, 6, len(table.Columns[2].Values)) 379 assert.ItsEqual(t, "c", table.Columns[2].Values[1]) 380 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 381 382 assert.ItsEqual(t, 2, len(table.Columns[3].Values)) 383 assert.ItsNil(t, table.Columns[3].Values[0]) 384 assert.ItsNil(t, table.Columns[3].Values[1]) 385 } 386 387 func Test_Table_InsertRow_mid_veryShort(t *testing.T) { 388 table := new(Table) 389 table.Columns = []TableColumn{ 390 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 391 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 392 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 393 {Name: "3", Values: []any{}}, 394 } 395 396 err := table.InsertRow(1, nil) 397 assert.ItsNil(t, err) 398 assert.ItsEqual(t, 4, len(table.Columns[0].Values)) 399 assert.ItsNil(t, table.Columns[0].Values[1]) 400 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 401 402 assert.ItsEqual(t, 5, len(table.Columns[1].Values)) 403 assert.ItsNil(t, table.Columns[1].Values[1]) 404 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 405 406 assert.ItsEqual(t, 6, len(table.Columns[2].Values)) 407 assert.ItsNil(t, table.Columns[2].Values[1]) 408 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 409 410 assert.ItsEqual(t, 2, len(table.Columns[3].Values)) 411 assert.ItsNil(t, table.Columns[3].Values[0]) 412 assert.ItsNil(t, table.Columns[3].Values[1]) 413 } 414 415 func Test_Table_InsertRow_mid2(t *testing.T) { 416 table := new(Table) 417 table.Columns = []TableColumn{ 418 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 419 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 420 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 421 {Name: "3", Values: []any{}}, 422 } 423 424 err := table.InsertRow(2, []any{"a", "b", "c", "d"}) 425 assert.ItsNil(t, err) 426 assert.ItsEqual(t, 4, len(table.Columns[0].Values)) 427 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 428 assert.ItsEqual(t, "0-1", table.Columns[0].Values[1]) 429 assert.ItsEqual(t, "a", table.Columns[0].Values[2]) 430 431 assert.ItsEqual(t, 5, len(table.Columns[1].Values)) 432 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 433 assert.ItsEqual(t, "1-1", table.Columns[1].Values[1]) 434 assert.ItsEqual(t, "b", table.Columns[1].Values[2]) 435 436 assert.ItsEqual(t, 6, len(table.Columns[2].Values)) 437 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 438 assert.ItsEqual(t, "2-1", table.Columns[2].Values[1]) 439 assert.ItsEqual(t, "c", table.Columns[2].Values[2]) 440 441 assert.ItsEqual(t, 3, len(table.Columns[3].Values)) 442 assert.ItsNil(t, table.Columns[3].Values[0]) 443 assert.ItsNil(t, table.Columns[3].Values[1]) 444 assert.ItsEqual(t, "d", table.Columns[3].Values[2]) 445 } 446 447 func Test_Table_DeleteRow_zero(t *testing.T) { 448 table := new(Table) 449 table.Columns = []TableColumn{ 450 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 451 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 452 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 453 {Name: "3", Values: []any{}}, 454 } 455 456 err := table.DeleteRow(0) 457 assert.ItsNil(t, err) 458 assert.ItsEqual(t, 2, len(table.Columns[0].Values)) 459 assert.ItsEqual(t, "0-1", table.Columns[0].Values[0]) 460 assert.ItsEqual(t, "0-2", table.Columns[0].Values[1]) 461 462 assert.ItsEqual(t, 3, len(table.Columns[1].Values)) 463 assert.ItsEqual(t, "1-1", table.Columns[1].Values[0]) 464 assert.ItsEqual(t, "1-2", table.Columns[1].Values[1]) 465 466 assert.ItsEqual(t, 4, len(table.Columns[2].Values)) 467 assert.ItsEqual(t, "2-1", table.Columns[2].Values[0]) 468 assert.ItsEqual(t, "2-2", table.Columns[2].Values[1]) 469 470 assert.ItsEqual(t, 0, len(table.Columns[3].Values)) 471 } 472 473 func Test_Table_DeleteRow_mid(t *testing.T) { 474 table := new(Table) 475 table.Columns = []TableColumn{ 476 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 477 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 478 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 479 {Name: "3", Values: []any{}}, 480 } 481 482 err := table.DeleteRow(1) 483 assert.ItsNil(t, err) 484 assert.ItsEqual(t, 2, len(table.Columns[0].Values)) 485 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 486 assert.ItsEqual(t, "0-2", table.Columns[0].Values[1]) 487 488 assert.ItsEqual(t, 3, len(table.Columns[1].Values)) 489 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 490 assert.ItsEqual(t, "1-2", table.Columns[1].Values[1]) 491 492 assert.ItsEqual(t, 4, len(table.Columns[2].Values)) 493 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 494 assert.ItsEqual(t, "2-2", table.Columns[2].Values[1]) 495 496 assert.ItsEqual(t, 0, len(table.Columns[3].Values)) 497 } 498 499 func Test_Table_DeleteRow_end(t *testing.T) { 500 table := new(Table) 501 table.Columns = []TableColumn{ 502 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 503 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 504 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 505 {Name: "3", Values: []any{}}, 506 } 507 508 err := table.DeleteRow(2) 509 assert.ItsNil(t, err) 510 assert.ItsEqual(t, 2, len(table.Columns[0].Values)) 511 assert.ItsEqual(t, "0-0", table.Columns[0].Values[0]) 512 assert.ItsEqual(t, "0-1", table.Columns[0].Values[1]) 513 514 assert.ItsEqual(t, 3, len(table.Columns[1].Values)) 515 assert.ItsEqual(t, "1-0", table.Columns[1].Values[0]) 516 assert.ItsEqual(t, "1-1", table.Columns[1].Values[1]) 517 518 assert.ItsEqual(t, 4, len(table.Columns[2].Values)) 519 assert.ItsEqual(t, "2-0", table.Columns[2].Values[0]) 520 assert.ItsEqual(t, "2-1", table.Columns[2].Values[1]) 521 522 assert.ItsEqual(t, 0, len(table.Columns[3].Values)) 523 } 524 525 func Test_Table_ApplyOps(t *testing.T) { 526 table := new(Table) 527 table.Columns = []TableColumn{ 528 {Name: "0", Values: []any{"0-0", "0-1", "0-2"}}, 529 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 530 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 531 {Name: "3", Values: []any{}}, 532 } 533 534 ops := []TableOp{ 535 {Type: TableOpTypeInsertColumn, Col: 4, Values: []any{"4-0", "4-1", "4-2", "4-3", "4-4"}}, 536 {Type: TableOpTypeSet, Row: 0, Col: 4, Value: "4-0-a"}, 537 {Type: TableOpTypeDeleteColumn, Col: 3}, 538 {Type: TableOpTypeReorderColumn, Old: 0, New: 3}, 539 } 540 541 err := table.ApplyOps(ops...) 542 assert.ItsNil(t, err) 543 544 assert.ItsEqual(t, "4-0-a", table.Columns[0].Values[0]) 545 } 546 547 func Test_Table_Range(t *testing.T) { 548 table := new(Table) 549 table.Columns = []TableColumn{ 550 {Name: "0", Values: []any{"0-0", "0-1"}}, 551 {Name: "1", Values: []any{"1-0", "1-1", "1-2", "1-3"}}, 552 {Name: "2", Values: []any{"2-0", "2-1", "2-2", "2-3", "2-3"}}, 553 {Name: "3", Values: []any{"3-0", "3-1"}}, 554 {Name: "4", Values: []any{"4-0", "4-1", "4-2", "4-3", "4-4", "4-5"}}, 555 } 556 557 rangeValues := table.Range(TableRange{Top: 1, Left: 1, Bottom: 3, Right: 3}) 558 assert.ItsLen(t, rangeValues, 3) 559 560 // NOTE(wc): ids are col-row! 561 assert.ItsLen(t, rangeValues[0], 3) 562 assert.ItsEqual(t, "1-1", rangeValues[0][0]) 563 assert.ItsEqual(t, "2-1", rangeValues[0][1]) 564 assert.ItsEqual(t, "3-1", rangeValues[0][2]) 565 566 assert.ItsLen(t, rangeValues[1], 3) 567 assert.ItsEqual(t, "1-2", rangeValues[1][0]) 568 assert.ItsEqual(t, "2-2", rangeValues[1][1]) 569 assert.ItsEqual(t, nil, rangeValues[1][2]) 570 571 assert.ItsLen(t, rangeValues[2], 3) 572 assert.ItsEqual(t, "1-2", rangeValues[1][0]) 573 assert.ItsEqual(t, "2-2", rangeValues[1][1]) 574 assert.ItsEqual(t, nil, rangeValues[1][2]) 575 }