(t *testing.T)
| 5 | ) |
| 6 | |
| 7 | func TestMultiColumnFilter(t *testing.T) { |
| 8 | // Create test data |
| 9 | data := [][]string{ |
| 10 | {"Name", "Age", "City", "Department"}, |
| 11 | {"Alice", "30", "New York", "Engineering"}, |
| 12 | {"Bob", "25", "San Francisco", "Sales"}, |
| 13 | {"Charlie", "35", "New York", "Engineering"}, |
| 14 | {"David", "28", "Chicago", "Marketing"}, |
| 15 | {"Eve", "32", "New York", "Sales"}, |
| 16 | {"Frank", "45", "San Francisco", "Engineering"}, |
| 17 | } |
| 18 | |
| 19 | b, err := createNewBufferWithData(data, true) |
| 20 | if err != nil { |
| 21 | t.Fatalf("Failed to create buffer: %v", err) |
| 22 | } |
| 23 | b.rowFreeze = 1 |
| 24 | |
| 25 | t.Run("Apply single filter", func(t *testing.T) { |
| 26 | // Filter by City = "New York" |
| 27 | filtered := b.filterByColumn(2, FilterOptions{Query: "New York", Operator: "equals"}) |
| 28 | |
| 29 | // Should have header + 3 data rows |
| 30 | expected := 4 // 1 header + 3 matching rows |
| 31 | if filtered.rowLen != expected { |
| 32 | t.Errorf("Expected %d rows, got %d", expected, filtered.rowLen) |
| 33 | } |
| 34 | }) |
| 35 | |
| 36 | t.Run("Apply multiple filters sequentially", func(t *testing.T) { |
| 37 | // First filter by City = "New York" |
| 38 | filtered1 := b.filterByColumn(2, FilterOptions{Query: "New York", Operator: "equals"}) |
| 39 | |
| 40 | // Then filter by Department = "Engineering" |
| 41 | filtered2 := filtered1.filterByColumn(3, FilterOptions{Query: "Engineering", Operator: "equals"}) |
| 42 | |
| 43 | // Should have header + 2 data rows (Alice and Charlie) |
| 44 | expected := 3 // 1 header + 2 matching rows |
| 45 | if filtered2.rowLen != expected { |
| 46 | t.Errorf("Expected %d rows, got %d", expected, filtered2.rowLen) |
| 47 | } |
| 48 | |
| 49 | // Verify the correct rows remain |
| 50 | if filtered2.cont[1][0] != "Alice" { |
| 51 | t.Errorf("Expected Alice in row 1, got %s", filtered2.cont[1][0]) |
| 52 | } |
| 53 | if filtered2.cont[2][0] != "Charlie" { |
| 54 | t.Errorf("Expected Charlie in row 2, got %s", filtered2.cont[2][0]) |
| 55 | } |
| 56 | }) |
| 57 | |
| 58 | t.Run("Apply three filters", func(t *testing.T) { |
| 59 | // Filter by City = "New York" |
| 60 | filtered1 := b.filterByColumn(2, FilterOptions{Query: "New York", Operator: "equals"}) |
| 61 | |
| 62 | // Filter by Department containing "Eng" |
| 63 | filtered2 := filtered1.filterByColumn(3, FilterOptions{Query: "Eng", Operator: "contains"}) |
| 64 |
nothing calls this directly
no test coverage detected