diff --git a/handler.go b/handler.go index 5b02bb7..e244edc 100644 --- a/handler.go +++ b/handler.go @@ -279,7 +279,7 @@ func filterNilHandlers(handlers []KeyHandler) []KeyHandler { if len(handlers) == 0 { return nil } - filtered := handlers[:0] + filtered := make([]KeyHandler, 0, len(handlers)) for _, h := range handlers { if h != nil { filtered = append(filtered, h) diff --git a/i18n_test.go b/i18n_test.go index 68ab2ea..c3c91bf 100644 --- a/i18n_test.go +++ b/i18n_test.go @@ -316,6 +316,19 @@ func TestAddHandler_Good_SkipsNil(t *testing.T) { assert.IsType(t, LabelHandler{}, handlers[0]) } +func TestAddHandler_DoesNotMutateInputSlice(t *testing.T) { + svc, err := New(WithHandlers()) + require.NoError(t, err) + _ = Init() + SetDefault(svc) + + handlers := []KeyHandler{nil, LabelHandler{}} + AddHandler(handlers...) + + assert.Nil(t, handlers[0]) + assert.IsType(t, LabelHandler{}, handlers[1]) +} + func TestPrependHandler_Good(t *testing.T) { svc, err := New(WithHandlers()) // start with no handlers require.NoError(t, err) @@ -358,6 +371,19 @@ func TestPrependHandler_Good_SkipsNil(t *testing.T) { assert.IsType(t, LabelHandler{}, handlers[0]) } +func TestPrependHandler_DoesNotMutateInputSlice(t *testing.T) { + svc, err := New(WithHandlers()) + require.NoError(t, err) + _ = Init() + SetDefault(svc) + + handlers := []KeyHandler{nil, ProgressHandler{}} + PrependHandler(handlers...) + + assert.Nil(t, handlers[0]) + assert.IsType(t, ProgressHandler{}, handlers[1]) +} + func TestClearHandlers_Good(t *testing.T) { svc, err := New() require.NoError(t, err)