| 121 | } |
| 122 | |
| 123 | func TestHookTriggerErrorPropagation(t *testing.T) { |
| 124 | err := errors.New("test") |
| 125 | |
| 126 | scenarios := []struct { |
| 127 | name string |
| 128 | handlers []func(*Event) error |
| 129 | expectedError error |
| 130 | }{ |
| 131 | { |
| 132 | "without error", |
| 133 | []func(*Event) error{ |
| 134 | func(e *Event) error { return e.Next() }, |
| 135 | func(e *Event) error { return e.Next() }, |
| 136 | }, |
| 137 | nil, |
| 138 | }, |
| 139 | { |
| 140 | "with error", |
| 141 | []func(*Event) error{ |
| 142 | func(e *Event) error { return e.Next() }, |
| 143 | func(e *Event) error { e.Next(); return err }, |
| 144 | func(e *Event) error { return e.Next() }, |
| 145 | }, |
| 146 | err, |
| 147 | }, |
| 148 | } |
| 149 | |
| 150 | for _, s := range scenarios { |
| 151 | t.Run(s.name, func(t *testing.T) { |
| 152 | h := Hook[*Event]{} |
| 153 | for _, handler := range s.handlers { |
| 154 | h.BindFunc(handler) |
| 155 | } |
| 156 | result := h.Trigger(&Event{}) |
| 157 | if result != s.expectedError { |
| 158 | t.Fatalf("Expected %v, got %v", s.expectedError, result) |
| 159 | } |
| 160 | }) |
| 161 | } |
| 162 | } |