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
|
github.com/stretchr/testify v1.10.0
|
||||||
golang.design/x/clipboard v0.6.2
|
golang.design/x/clipboard v0.6.2
|
||||||
golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a
|
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 (
|
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/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 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
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/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 h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
|
||||||
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
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-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 h1:rDJtNrcKVmEqLep1l2YrodPjCfq+/yl7p8EZUrKW7Aw=
|
||||||
ucl.lmika.dev v0.0.0-20250527114213-41b4fdb00382/go.mod h1:/MMZKm6mOMtnY4I8TYEot4Pc8dKEy+/IAQo1VdpA5EY=
|
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{
|
return ucl.Module{
|
||||||
Name: "pb",
|
Name: "pb",
|
||||||
Builtins: map[string]ucl.BuiltinHandler{
|
Builtins: map[string]ucl.BuiltinHandler{
|
||||||
"get": m.pbGet,
|
"paste": m.pbGet,
|
||||||
"put": m.pbPut,
|
"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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
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"
|
||||||
"lmika.dev/cmd/dynamo-browse/internal/common/ui/commandctrl/cmdpacks"
|
"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/controllers"
|
||||||
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/dynamo"
|
"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/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/settingstore"
|
||||||
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/workspacestore"
|
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/providers/workspacestore"
|
||||||
"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/services/inputhistory"
|
"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/internal/dynamo-browse/ui/keybindings"
|
||||||
"lmika.dev/cmd/dynamo-browse/test/testdynamo"
|
"lmika.dev/cmd/dynamo-browse/test/testdynamo"
|
||||||
"lmika.dev/cmd/dynamo-browse/test/testworkspace"
|
"lmika.dev/cmd/dynamo-browse/test/testworkspace"
|
||||||
bus "github.com/lmika/events"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -53,6 +52,20 @@ func TestStdCmds_Mark(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type testDataGenerator func() []testdynamo.TestData
|
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 {
|
type services struct {
|
||||||
CommandController *commandctrl.CommandController
|
CommandController *commandctrl.CommandController
|
||||||
SelItemIndex int
|
SelItemIndex int
|
||||||
|
@ -61,6 +74,7 @@ type services struct {
|
||||||
|
|
||||||
settingStore *settingstore.SettingStore
|
settingStore *settingstore.SettingStore
|
||||||
table string
|
table string
|
||||||
|
pasteboard *testPasteBoard
|
||||||
|
|
||||||
testDataGenerator testDataGenerator
|
testDataGenerator testDataGenerator
|
||||||
testData []testdynamo.TestData
|
testData []testdynamo.TestData
|
||||||
|
@ -97,10 +111,12 @@ func newService(t *testing.T, opts ...serviceOpt) *services {
|
||||||
itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer())
|
itemRendererService := itemrenderer.NewService(itemrenderer.PlainTextRenderer(), itemrenderer.PlainTextRenderer())
|
||||||
inputHistoryService := inputhistory.New(inputHistoryStore)
|
inputHistoryService := inputhistory.New(inputHistoryStore)
|
||||||
|
|
||||||
|
testPB := &testPasteBoard{}
|
||||||
s := &services{
|
s := &services{
|
||||||
table: "service-test-data",
|
table: "service-test-data",
|
||||||
settingStore: settingStore,
|
settingStore: settingStore,
|
||||||
testDataGenerator: normalTestData,
|
testDataGenerator: normalTestData,
|
||||||
|
pasteboard: testPB,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
|
@ -125,13 +141,13 @@ func newService(t *testing.T, opts ...serviceOpt) *services {
|
||||||
jobsController,
|
jobsController,
|
||||||
inputHistoryService,
|
inputHistoryService,
|
||||||
eventBus,
|
eventBus,
|
||||||
pasteboardprovider.NilProvider{},
|
testPB,
|
||||||
s.table,
|
s.table,
|
||||||
)
|
)
|
||||||
writeController := controllers.NewTableWriteController(state, service, jobsController, readController, settingStore)
|
writeController := controllers.NewTableWriteController(state, service, jobsController, readController, settingStore)
|
||||||
settingsController := controllers.NewSettingsController(settingStore, eventBus)
|
settingsController := controllers.NewSettingsController(settingStore, eventBus)
|
||||||
columnsController := controllers.NewColumnsController(readController, 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())
|
keyBindingService := keybindings_service.NewService(keybindings.Default())
|
||||||
keyBindingController := controllers.NewKeyBindingController(keyBindingService, nil)
|
keyBindingController := controllers.NewKeyBindingController(keyBindingService, nil)
|
||||||
|
@ -144,7 +160,7 @@ func newService(t *testing.T, opts ...serviceOpt) *services {
|
||||||
writeController,
|
writeController,
|
||||||
exportController,
|
exportController,
|
||||||
keyBindingController,
|
keyBindingController,
|
||||||
pasteboardprovider.NilProvider{},
|
testPB,
|
||||||
settingsController,
|
settingsController,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -13,8 +13,8 @@ import (
|
||||||
"ucl.lmika.dev/ucl"
|
"ucl.lmika.dev/ucl"
|
||||||
"ucl.lmika.dev/ucl/builtins"
|
"ucl.lmika.dev/ucl/builtins"
|
||||||
|
|
||||||
"lmika.dev/cmd/dynamo-browse/internal/common/ui/events"
|
|
||||||
"github.com/lmika/shellwords"
|
"github.com/lmika/shellwords"
|
||||||
|
"lmika.dev/cmd/dynamo-browse/internal/common/ui/events"
|
||||||
)
|
)
|
||||||
|
|
||||||
const commandsCategory = "commands"
|
const commandsCategory = "commands"
|
||||||
|
@ -47,8 +47,14 @@ func NewCommandController(historyProvider IterProvider, pkgs ...CommandPack) (*C
|
||||||
|
|
||||||
options := []ucl.InstOption{
|
options := []ucl.InstOption{
|
||||||
ucl.WithOut(ucl.LineHandler(cc.printLine)),
|
ucl.WithOut(ucl.LineHandler(cc.printLine)),
|
||||||
ucl.WithModule(builtins.OS()),
|
ucl.WithModule(builtins.CSV(nil)),
|
||||||
ucl.WithModule(builtins.FS(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 {
|
for _, pkg := range pkgs {
|
||||||
options = append(options, pkg.InstOptions()...)
|
options = append(options, pkg.InstOptions()...)
|
||||||
|
|
Loading…
Reference in a new issue