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 func() Msg {
return batchMsg(validCmds)
return BatchMsg(validCmds)
}
}
// batchMsg is the internal message used to perform a bunch of commands. You
// can send a batchMsg with Batch.
type batchMsg []Cmd
// BatchMsg is a message used to perform a bunch of commands concurrently with
// no ordering guarantees. You can send a BatchMsg with Batch.
type BatchMsg []Cmd
// Sequence runs the given commands one at a time, in order. Contrast this with
// Batch, which runs commands concurrently.

View File

@ -94,13 +94,13 @@ func TestBatch(t *testing.T) {
})
t.Run("single cmd", func(t *testing.T) {
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.Run("mixed nil cmds", func(t *testing.T) {
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)
}
})

2
tea.go
View File

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

View File

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