From bef215fe3ed717d51740539f305aad331d4b9f0d Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Mon, 11 Jul 2016 07:39:58 +0100 Subject: [PATCH] app: Allocate Metadata map automatically --- app.go | 4 ++++ command_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/app.go b/app.go index a046c01..0755bb6 100644 --- a/app.go +++ b/app.go @@ -160,6 +160,10 @@ func (a *App) Setup() { a.categories = a.categories.AddCommand(command.Category, command) } sort.Sort(a.categories) + + if a.Metadata == nil { + a.Metadata = make(map[string]interface{}) + } } // Run is the entry point to the cli app. Parses the arguments slice and routes diff --git a/command_test.go b/command_test.go index 6608254..1d5a711 100644 --- a/command_test.go +++ b/command_test.go @@ -73,6 +73,54 @@ func TestCommand_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) { } } +func TestCommand_Run_BeforeSavesMetadata(t *testing.T) { + var receivedMsgFromAction string + var receivedMsgFromAfter string + + app := NewApp() + app.Commands = []Command{ + { + Name: "bar", + Before: func(c *Context) error { + c.App.Metadata["msg"] = "hello world" + return nil + }, + Action: func(c *Context) error { + msg, ok := c.App.Metadata["msg"] + if !ok { + return errors.New("msg not found") + } + receivedMsgFromAction = msg.(string) + return nil + }, + After: func(c *Context) error { + msg, ok := c.App.Metadata["msg"] + if !ok { + return errors.New("msg not found") + } + receivedMsgFromAfter = msg.(string) + return nil + }, + }, + } + + err := app.Run([]string{"foo", "bar"}) + if err != nil { + t.Fatalf("expected no error from Run, got %s", err) + } + + expectedMsg := "hello world" + + if receivedMsgFromAction != expectedMsg { + t.Fatalf("expected msg from Action to match. Given: %q\nExpected: %q", + receivedMsgFromAction, expectedMsg) + } + if receivedMsgFromAfter != expectedMsg { + t.Fatalf("expected msg from After to match. Given: %q\nExpected: %q", + receivedMsgFromAction, expectedMsg) + } +} + func TestCommand_OnUsageError_WithWrongFlagValue(t *testing.T) { app := NewApp() app.Commands = []Command{