forked from Mirrors/bubbletea
Add a tea.Sequentially command
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
This commit is contained in:
parent
b65205a7e5
commit
a0c6074bbb
24
commands.go
24
commands.go
|
@ -51,3 +51,27 @@ func Tick(d time.Duration, fn func(time.Time) Msg) Cmd {
|
||||||
return fn(<-t.C)
|
return fn(<-t.C)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sequentially produces a command that sequentially executes the given
|
||||||
|
// commands.
|
||||||
|
// The Msg returned is the first non-nil message returned by a Cmd.
|
||||||
|
//
|
||||||
|
// func saveStateCmd() Msg {
|
||||||
|
// if err := save(); err != nil {
|
||||||
|
// return errMsg{err}
|
||||||
|
// }
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// cmd := Sequentially(saveStateCmd, Quit)
|
||||||
|
//
|
||||||
|
func Sequentially(cmds ...Cmd) Cmd {
|
||||||
|
return func() Msg {
|
||||||
|
for _, cmd := range cmds {
|
||||||
|
if msg := cmd(); msg != nil {
|
||||||
|
return msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package tea
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSequentially(t *testing.T) {
|
||||||
|
var expectedErrMsg = fmt.Errorf("some err")
|
||||||
|
var expectedStrMsg = "some msg"
|
||||||
|
|
||||||
|
var nilReturnCmd = func() Msg {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
cmds []Cmd
|
||||||
|
expected Msg
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "all nil",
|
||||||
|
cmds: []Cmd{nilReturnCmd, nilReturnCmd},
|
||||||
|
expected: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "one error",
|
||||||
|
cmds: []Cmd{
|
||||||
|
nilReturnCmd,
|
||||||
|
func() Msg {
|
||||||
|
return expectedErrMsg
|
||||||
|
},
|
||||||
|
nilReturnCmd,
|
||||||
|
},
|
||||||
|
expected: expectedErrMsg,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "some msg",
|
||||||
|
cmds: []Cmd{
|
||||||
|
nilReturnCmd,
|
||||||
|
func() Msg {
|
||||||
|
return expectedStrMsg
|
||||||
|
},
|
||||||
|
nilReturnCmd,
|
||||||
|
},
|
||||||
|
expected: expectedStrMsg,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
if msg := Sequentially(test.cmds...)(); msg != test.expected {
|
||||||
|
t.Fatalf("expected a msg %v but got %v", test.expected, msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue