diff --git a/hooks.go b/hooks.go index de49b5f..6d46f70 100644 --- a/hooks.go +++ b/hooks.go @@ -66,7 +66,9 @@ func OnMissingKey(h MissingKeyHandler) { missingKeyHandler.Store(missingKeyHandlersState{handlers: []MissingKeyHandler{h}}) } -func appendMissingKeyHandler(h MissingKeyHandler) { +// AddMissingKeyHandler appends a missing-key handler without replacing any +// existing handlers. +func AddMissingKeyHandler(h MissingKeyHandler) { if h == nil { return } @@ -75,6 +77,10 @@ func appendMissingKeyHandler(h MissingKeyHandler) { missingKeyHandler.Store(current) } +func appendMissingKeyHandler(h MissingKeyHandler) { + AddMissingKeyHandler(h) +} + func missingKeyHandlers() missingKeyHandlersState { v := missingKeyHandler.Load() if v == nil { diff --git a/hooks_test.go b/hooks_test.go index 7d05b23..b0d29a5 100644 --- a/hooks_test.go +++ b/hooks_test.go @@ -274,6 +274,35 @@ func TestOnMissingKey_Good(t *testing.T) { assert.Equal(t, "hooks_test.go", filepath.Base(captured.CallerFile)) } +func TestAddMissingKeyHandler_Good(t *testing.T) { + svc, err := New() + require.NoError(t, err) + prev := Default() + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prev) + }) + svc.SetMode(ModeCollect) + + OnMissingKey(nil) + t.Cleanup(func() { + OnMissingKey(nil) + }) + + var first, second int + AddMissingKeyHandler(func(MissingKey) { + first++ + }) + AddMissingKeyHandler(func(MissingKey) { + second++ + }) + + _ = T("missing.multiple.handlers") + + assert.Equal(t, 1, first) + assert.Equal(t, 1, second) +} + func TestOnMissingKey_Good_SubjectArgs(t *testing.T) { svc, err := New() require.NoError(t, err)