feat: export BatchMsg

There's no good reason to keep it private. Exporting it helps
testability, debugging, and allows for a few special model.Update
implementations.
This commit is contained in:
treilik
2021-06-22 15:59:22 +02:00
committed by Christian Muehlhaeuser
parent 80f44c9384
commit 918d35746b
4 changed files with 8 additions and 8 deletions

View File

@@ -24,13 +24,13 @@ func Batch(cmds ...Cmd) Cmd {
return nil return nil
} }
return func() Msg { return func() Msg {
return batchMsg(validCmds) return BatchMsg(validCmds)
} }
} }
// batchMsg is the internal message used to perform a bunch of commands. You // BatchMsg is a message used to perform a bunch of commands concurrently with
// can send a batchMsg with Batch. // no ordering guarantees. You can send a BatchMsg with Batch.
type batchMsg []Cmd type BatchMsg []Cmd
// Sequence runs the given commands one at a time, in order. Contrast this with // Sequence runs the given commands one at a time, in order. Contrast this with
// Batch, which runs commands concurrently. // Batch, which runs commands concurrently.

View File

@@ -94,13 +94,13 @@ func TestBatch(t *testing.T) {
}) })
t.Run("single cmd", func(t *testing.T) { t.Run("single cmd", func(t *testing.T) {
b := Batch(Quit)() b := Batch(Quit)()
if l := len(b.(batchMsg)); l != 1 { if l := len(b.(BatchMsg)); l != 1 {
t.Fatalf("expected a []Cmd with len 1, got %d", l) t.Fatalf("expected a []Cmd with len 1, got %d", l)
} }
}) })
t.Run("mixed nil cmds", func(t *testing.T) { t.Run("mixed nil cmds", func(t *testing.T) {
b := Batch(nil, Quit, nil, Quit, nil, nil)() b := Batch(nil, Quit, nil, Quit, nil, nil)()
if l := len(b.(batchMsg)); l != 2 { if l := len(b.(BatchMsg)); l != 2 {
t.Fatalf("expected a []Cmd with len 2, got %d", l) t.Fatalf("expected a []Cmd with len 2, got %d", l)
} }
}) })

2
tea.go
View File

@@ -295,7 +295,7 @@ func (p *Program) eventLoop(model Model, cmds chan Cmd) (Model, error) {
// NB: this blocks. // NB: this blocks.
p.exec(msg.cmd, msg.fn) p.exec(msg.cmd, msg.fn)
case batchMsg: case BatchMsg:
for _, cmd := range msg { for _, cmd := range msg {
cmds <- cmd cmds <- cmd
} }

View File

@@ -108,7 +108,7 @@ func TestTeaBatchMsg(t *testing.T) {
m := &testModel{} m := &testModel{}
p := NewProgram(m, WithInput(&in), WithOutput(&buf)) p := NewProgram(m, WithInput(&in), WithOutput(&buf))
go func() { go func() {
p.Send(batchMsg{inc, inc}) p.Send(BatchMsg{inc, inc})
for { for {
time.Sleep(time.Millisecond) time.Sleep(time.Millisecond)