From 213a4fc9cc1c92c76c5306f50356317d731e2ae2 Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Wed, 28 May 2025 21:45:59 +1000 Subject: [PATCH] Renamed the pasteboard commands and added additinal tests --- go.mod | 2 +- go.sum | 3 ++ .../common/ui/commandctrl/cmdpacks/modpb.go | 4 +-- .../ui/commandctrl/cmdpacks/modpb_test.go | 34 +++++++++++++++++++ .../ui/commandctrl/cmdpacks/stdcmds_test.go | 28 +++++++++++---- internal/common/ui/commandctrl/commandctrl.go | 10 ++++-- 6 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 internal/common/ui/commandctrl/cmdpacks/modpb_test.go diff --git a/go.mod b/go.mod index d8f76e7..0b87074 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/stretchr/testify v1.10.0 golang.design/x/clipboard v0.6.2 golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a - ucl.lmika.dev v0.0.0-20250527114213-41b4fdb00382 + ucl.lmika.dev v0.0.0-20250528113931-3a88c0c777d8 ) require ( diff --git a/go.sum b/go.sum index 2bb8119..d443ccb 100644 --- a/go.sum +++ b/go.sum @@ -156,6 +156,7 @@ github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= @@ -258,3 +259,5 @@ ucl.lmika.dev v0.0.0-20250527112110-03e6878524a1 h1:e++1/TfwVKdWi1TmO+kfCdO2+lCT ucl.lmika.dev v0.0.0-20250527112110-03e6878524a1/go.mod h1:/MMZKm6mOMtnY4I8TYEot4Pc8dKEy+/IAQo1VdpA5EY= ucl.lmika.dev v0.0.0-20250527114213-41b4fdb00382 h1:rDJtNrcKVmEqLep1l2YrodPjCfq+/yl7p8EZUrKW7Aw= ucl.lmika.dev v0.0.0-20250527114213-41b4fdb00382/go.mod h1:/MMZKm6mOMtnY4I8TYEot4Pc8dKEy+/IAQo1VdpA5EY= +ucl.lmika.dev v0.0.0-20250528113931-3a88c0c777d8 h1:kC312X0SvM9YHtuS1r6Js+CgmSS+kSAMLj8cYFuI0+4= +ucl.lmika.dev v0.0.0-20250528113931-3a88c0c777d8/go.mod h1:/MMZKm6mOMtnY4I8TYEot4Pc8dKEy+/IAQo1VdpA5EY= diff --git a/internal/common/ui/commandctrl/cmdpacks/modpb.go b/internal/common/ui/commandctrl/cmdpacks/modpb.go index f0223b9..9c38d58 100644 --- a/internal/common/ui/commandctrl/cmdpacks/modpb.go +++ b/internal/common/ui/commandctrl/cmdpacks/modpb.go @@ -39,8 +39,8 @@ func modulePB( return ucl.Module{ Name: "pb", Builtins: map[string]ucl.BuiltinHandler{ - "get": m.pbGet, - "put": m.pbPut, + "paste": m.pbGet, + "copy": m.pbPut, }, } } diff --git a/internal/common/ui/commandctrl/cmdpacks/modpb_test.go b/internal/common/ui/commandctrl/cmdpacks/modpb_test.go new file mode 100644 index 0000000..91aeb02 --- /dev/null +++ b/internal/common/ui/commandctrl/cmdpacks/modpb_test.go @@ -0,0 +1,34 @@ +package cmdpacks_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestModPB_Copy(t *testing.T) { + t.Run("copy 1", func(t *testing.T) { + svc := newService(t) + + _, err := svc.CommandController.ExecuteAndWait(t.Context(), ` + $items = @resultset.Items + $skItems = $items | map { |i| $i.sk } | lists:uniq + pb:copy ($skItems | strs:join "\n") + `) + assert.NoError(t, err) + + assert.Equal(t, "111\n222\n131", svc.pasteboard.content) + }) + + t.Run("copy 2", func(t *testing.T) { + svc := newService(t) + + _, err := svc.CommandController.ExecuteAndWait(t.Context(), ` + $items = @resultset.Items + $skItems = $items | map { |i| $i.alpha } | filter !nil | lists:uniq + pb:copy ($skItems | strs:join "\n") + `) + assert.NoError(t, err) + + assert.Equal(t, "This is some value\nThis is another some value", svc.pasteboard.content) + }) +} diff --git a/internal/common/ui/commandctrl/cmdpacks/stdcmds_test.go b/internal/common/ui/commandctrl/cmdpacks/stdcmds_test.go index 9cce268..2d65be8 100644 --- a/internal/common/ui/commandctrl/cmdpacks/stdcmds_test.go +++ b/internal/common/ui/commandctrl/cmdpacks/stdcmds_test.go @@ -3,12 +3,13 @@ package cmdpacks_test import ( "fmt" tea "github.com/charmbracelet/bubbletea" + bus "github.com/lmika/events" + "github.com/stretchr/testify/assert" "lmika.dev/cmd/dynamo-browse/internal/common/ui/commandctrl" "lmika.dev/cmd/dynamo-browse/internal/common/ui/commandctrl/cmdpacks" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/controllers" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/dynamo" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/inputhistorystore" - "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/pasteboardprovider" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/settingstore" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/workspacestore" "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/services/inputhistory" @@ -20,8 +21,6 @@ import ( "lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/ui/keybindings" "lmika.dev/cmd/dynamo-browse/test/testdynamo" "lmika.dev/cmd/dynamo-browse/test/testworkspace" - bus "github.com/lmika/events" - "github.com/stretchr/testify/assert" "testing" ) @@ -53,6 +52,20 @@ func TestStdCmds_Mark(t *testing.T) { } type testDataGenerator func() []testdynamo.TestData + +type testPasteBoard struct { + content string +} + +func (t *testPasteBoard) ReadText() (string, bool) { + return t.content, true +} + +func (t *testPasteBoard) WriteText(bts []byte) error { + t.content = string(bts) + return nil +} + type services struct { CommandController *commandctrl.CommandController SelItemIndex int @@ -61,6 +74,7 @@ type services struct { settingStore *settingstore.SettingStore table string + pasteboard *testPasteBoard testDataGenerator testDataGenerator testData []testdynamo.TestData @@ -97,10 +111,12 @@ func newService(t *testing.T, opts ...serviceOpt) *services { itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer()) inputHistoryService := inputhistory.New(inputHistoryStore) + testPB := &testPasteBoard{} s := &services{ table: "service-test-data", settingStore: settingStore, testDataGenerator: normalTestData, + pasteboard: testPB, } for _, opt := range opts { @@ -125,13 +141,13 @@ func newService(t *testing.T, opts ...serviceOpt) *services { jobsController, inputHistoryService, eventBus, - pasteboardprovider.NilProvider{}, + testPB, s.table, ) writeController := controllers.NewTableWriteController(state, service, jobsController, readController, settingStore) settingsController := controllers.NewSettingsController(settingStore, eventBus) columnsController := controllers.NewColumnsController(readController, eventBus) - exportController := controllers.NewExportController(state, service, jobsController, columnsController, pasteboardprovider.NilProvider{}) + exportController := controllers.NewExportController(state, service, jobsController, columnsController, testPB) keyBindingService := keybindings_service.NewService(keybindings.Default()) keyBindingController := controllers.NewKeyBindingController(keyBindingService, nil) @@ -144,7 +160,7 @@ func newService(t *testing.T, opts ...serviceOpt) *services { writeController, exportController, keyBindingController, - pasteboardprovider.NilProvider{}, + testPB, settingsController, ), ) diff --git a/internal/common/ui/commandctrl/commandctrl.go b/internal/common/ui/commandctrl/commandctrl.go index 5bc94d6..5e0c330 100644 --- a/internal/common/ui/commandctrl/commandctrl.go +++ b/internal/common/ui/commandctrl/commandctrl.go @@ -13,8 +13,8 @@ import ( "ucl.lmika.dev/ucl" "ucl.lmika.dev/ucl/builtins" - "lmika.dev/cmd/dynamo-browse/internal/common/ui/events" "github.com/lmika/shellwords" + "lmika.dev/cmd/dynamo-browse/internal/common/ui/events" ) const commandsCategory = "commands" @@ -47,8 +47,14 @@ func NewCommandController(historyProvider IterProvider, pkgs ...CommandPack) (*C options := []ucl.InstOption{ ucl.WithOut(ucl.LineHandler(cc.printLine)), - ucl.WithModule(builtins.OS()), + ucl.WithModule(builtins.CSV(nil)), ucl.WithModule(builtins.FS(nil)), + ucl.WithModule(builtins.Log(nil)), + ucl.WithModule(builtins.Itrs()), + ucl.WithModule(builtins.OS()), + ucl.WithModule(builtins.Strs()), + ucl.WithModule(builtins.Lists()), + ucl.WithModule(builtins.Time()), } for _, pkg := range pkgs { options = append(options, pkg.InstOptions()...)