From 338c7b5e4c95dc6decf6da181f117b1494cdedc3 Mon Sep 17 00:00:00 2001 From: Jeremiah Andrews Date: Tue, 10 Jul 2018 12:10:59 -0700 Subject: [PATCH] Merge pull request #1603: Adding option functions to NewBaseApp * adding option functions to baseapp constructor * Added simple test and changed godoc * remove unrelated changelog updates --- CHANGELOG.md | 1 + baseapp/baseapp.go | 6 +++++- baseapp/baseapp_test.go | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 879eaacb0..1a4c6acf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ BREAKING CHANGES * [auth] Removed MsgChangePubKey * [auth] Removed SetPubKey from account mapper * [auth] AltBytes renamed to Memo, now a string, max 100 characters, costs a bit of gas +* [baseapp] NewBaseApp now takes option functions as parameters * [types] `GetMsg()` -> `GetMsgs()` as txs wrap many messages * [types] Removed GetMemo from Tx (it is still on StdTx) * [types] renamed rational.Evaluate to rational.Round{Int64, Int} diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 0d9356960..b17e79777 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -73,7 +73,8 @@ var _ abci.Application = (*BaseApp)(nil) // Create and name new BaseApp // NOTE: The db is used to store the version number for now. -func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB) *BaseApp { +// Accepts variable number of option functions, which act on the BaseApp to set configuration choices +func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, options ...func(*BaseApp)) *BaseApp { app := &BaseApp{ Logger: logger, name: name, @@ -86,6 +87,9 @@ func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB) *Bas } // Register the undefined & root codespaces, which should not be used by any modules app.codespacer.RegisterOrPanic(sdk.CodespaceRoot) + for _, option := range options { + option(app) + } return app } diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 4448d0e33..00897392e 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -139,6 +139,21 @@ func testLoadVersionHelper(t *testing.T, app *BaseApp, expectedHeight int64, exp require.Equal(t, expectedID, lastID) } +func TestOptionFunction(t *testing.T) { + logger := defaultLogger() + db := dbm.NewMemDB() + codec := wire.NewCodec() + registerTestCodec(codec) + bap := NewBaseApp("starting name", codec, logger, db, testChangeNameHelper("new name")) + require.Equal(t, bap.name, "new name", "BaseApp should have had name changed via option function") +} + +func testChangeNameHelper(name string) func(*BaseApp) { + return func(bap *BaseApp) { + bap.name = name + } +} + // Test that the app hash is static // TODO: https://github.com/cosmos/cosmos-sdk/issues/520 /*func TestStaticAppHash(t *testing.T) {