(t *testing.T)
| 149 | } |
| 150 | |
| 151 | func TestCheckedEntryBefore(t *testing.T) { |
| 152 | t.Run("nil is safe", func(t *testing.T) { |
| 153 | var ce *CheckedEntry |
| 154 | ce = ce.Before(Entry{Message: "hello"}, func(ent Entry, fields []Field) (Entry, []Field) { |
| 155 | ent.Message = "modified" |
| 156 | return ent, fields |
| 157 | }) |
| 158 | assert.NotNil(t, ce) |
| 159 | assert.Equal(t, "hello", ce.Entry.Message) |
| 160 | }) |
| 161 | |
| 162 | t.Run("modifies entry and fields", func(t *testing.T) { |
| 163 | core := &recordingCore{} |
| 164 | var ce *CheckedEntry |
| 165 | ce = ce.AddCore(Entry{Message: "original"}, core) |
| 166 | ce = ce.Before(Entry{}, func(ent Entry, fields []Field) (Entry, []Field) { |
| 167 | ent.Message = "modified" |
| 168 | fields = append(fields, Field{Key: "added", Type: StringType, String: "value"}) |
| 169 | return ent, fields |
| 170 | }) |
| 171 | ce.Write(Field{Key: "initial", Type: StringType, String: "v"}) |
| 172 | |
| 173 | assert.Equal(t, "modified", core.entry.Message) |
| 174 | assert.Len(t, core.fields, 2) |
| 175 | assert.Equal(t, "initial", core.fields[0].Key) |
| 176 | assert.Equal(t, "added", core.fields[1].Key) |
| 177 | }) |
| 178 | |
| 179 | t.Run("multiple hooks chain in order", func(t *testing.T) { |
| 180 | core := &recordingCore{} |
| 181 | var ce *CheckedEntry |
| 182 | ce = ce.AddCore(Entry{Message: "start"}, core) |
| 183 | ce = ce.Before(Entry{}, func(ent Entry, fields []Field) (Entry, []Field) { |
| 184 | ent.Message = ent.Message + "-first" |
| 185 | return ent, fields |
| 186 | }) |
| 187 | ce = ce.Before(Entry{}, func(ent Entry, fields []Field) (Entry, []Field) { |
| 188 | ent.Message = ent.Message + "-second" |
| 189 | return ent, fields |
| 190 | }) |
| 191 | ce.Write() |
| 192 | |
| 193 | assert.Equal(t, "start-first-second", core.entry.Message) |
| 194 | }) |
| 195 | |
| 196 | t.Run("hooks reset on pool reuse", func(t *testing.T) { |
| 197 | core := &recordingCore{} |
| 198 | var ce *CheckedEntry |
| 199 | ce = ce.AddCore(Entry{Message: "first"}, core) |
| 200 | ce = ce.Before(Entry{}, func(ent Entry, fields []Field) (Entry, []Field) { |
| 201 | ent.Message = "hooked" |
| 202 | return ent, fields |
| 203 | }) |
| 204 | ce.Write() |
| 205 | assert.Equal(t, "hooked", core.entry.Message) |
| 206 | |
| 207 | // Get a new entry from the pool — hooks should be cleared. |
| 208 | ce2 := getCheckedEntry() |
nothing calls this directly
no test coverage detected