Renamed the pasteboard commands and added additinal tests
All checks were successful
ci / build (push) Successful in 3m25s
All checks were successful
ci / build (push) Successful in 3m25s
This commit is contained in:
parent
204c79ca2d
commit
213a4fc9cc
2
go.mod
2
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 (
|
||||
|
|
3
go.sum
3
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=
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
34
internal/common/ui/commandctrl/cmdpacks/modpb_test.go
Normal file
34
internal/common/ui/commandctrl/cmdpacks/modpb_test.go
Normal 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)
|
||||
})
|
||||
}
|
|
@ -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,
|
||||
),
|
||||
)
|
||||
|
|
|
@ -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()...)
|
||||
|
|
Loading…
Reference in a new issue