Renamed the pasteboard commands and added additinal tests
All checks were successful
ci / build (push) Successful in 3m25s

This commit is contained in:
Leon Mika 2025-05-28 21:45:59 +10:00
parent 204c79ca2d
commit 213a4fc9cc
6 changed files with 70 additions and 11 deletions

2
go.mod
View file

@ -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 (

3
go.sum
View file

@ -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=

View file

@ -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,
},
}
}

View file

@ -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)
})
}

View file

@ -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,
),
)

View file

@ -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()...)