diff --git a/hooks.go b/hooks.go index 6d46f70..bbb1fc9 100644 --- a/hooks.go +++ b/hooks.go @@ -66,6 +66,11 @@ func OnMissingKey(h MissingKeyHandler) { missingKeyHandler.Store(missingKeyHandlersState{handlers: []MissingKeyHandler{h}}) } +// ClearMissingKeyHandlers removes all registered missing-key handlers. +func ClearMissingKeyHandlers() { + missingKeyHandler.Store(missingKeyHandlersState{}) +} + // AddMissingKeyHandler appends a missing-key handler without replacing any // existing handlers. func AddMissingKeyHandler(h MissingKeyHandler) { diff --git a/hooks_test.go b/hooks_test.go index b0d29a5..31a0fb9 100644 --- a/hooks_test.go +++ b/hooks_test.go @@ -279,14 +279,16 @@ func TestAddMissingKeyHandler_Good(t *testing.T) { require.NoError(t, err) prev := Default() SetDefault(svc) + prevHandlers := missingKeyHandlers() t.Cleanup(func() { + missingKeyHandler.Store(prevHandlers) SetDefault(prev) }) svc.SetMode(ModeCollect) - OnMissingKey(nil) + ClearMissingKeyHandlers() t.Cleanup(func() { - OnMissingKey(nil) + ClearMissingKeyHandlers() }) var first, second int @@ -303,6 +305,30 @@ func TestAddMissingKeyHandler_Good(t *testing.T) { assert.Equal(t, 1, second) } +func TestClearMissingKeyHandlers_Good(t *testing.T) { + svc, err := New() + require.NoError(t, err) + prev := Default() + SetDefault(svc) + prevHandlers := missingKeyHandlers() + t.Cleanup(func() { + missingKeyHandler.Store(prevHandlers) + SetDefault(prev) + }) + svc.SetMode(ModeCollect) + + var called int + AddMissingKeyHandler(func(MissingKey) { + called++ + }) + + ClearMissingKeyHandlers() + + _ = T("missing.after.clear") + + assert.Equal(t, 0, called) +} + func TestOnMissingKey_Good_SubjectArgs(t *testing.T) { svc, err := New() require.NoError(t, err)