diff --git a/app.go b/app.go index 38d89ae..95ffc0b 100644 --- a/app.go +++ b/app.go @@ -479,7 +479,9 @@ func (a Author) String() string { // it's an ActionFunc or a func with the legacy signature for Action, the func // is run! func HandleAction(action interface{}, context *Context) (err error) { - if a, ok := action.(func(*Context) error); ok { + if a, ok := action.(ActionFunc); ok { + return a(context) + } else if a, ok := action.(func(*Context) error); ok { return a(context) } else if a, ok := action.(func(*Context)); ok { // deprecated function signature a(context) diff --git a/app_test.go b/app_test.go index fadeb20..10f1562 100644 --- a/app_test.go +++ b/app_test.go @@ -1664,3 +1664,22 @@ func TestShellCompletionForIncompleteFlags(t *testing.T) { t.Errorf("app should not return an error: %s", err) } } + +func TestHandleActionActuallyWorksWithActions(t *testing.T) { + var f ActionFunc + called := false + f = func(c *Context) error { + called = true + return nil + } + + err := HandleAction(f, nil) + + if err != nil { + t.Errorf("Should not have errored: %v", err) + } + + if !called { + t.Errorf("Function was not called") + } +}