package fzf import ( "testing" "time" "github.com/junegunn/fzf/src/util" ) func TestReadFromCommand(t *testing.T) { strs := []string{} eb := util.NewEventBox() reader := Reader{ pusher: func(s []byte) bool { strs = append(strs, string(s)); return true }, eventBox: eb, event: int32(EvtReady)} reader.startEventPoller() // Check EventBox if eb.Peek(EvtReadNew) { t.Error("EvtReadNew should not be set yet") } // Normal command reader.fin(reader.readFromCommand("sh", `echo abc && echo def`)) if len(strs) != 2 || strs[0] != "abc" || strs[1] != "def" { t.Errorf("%s", strs) } // Check EventBox again eb.WaitFor(EvtReadFin) // Wait should return immediately eb.Wait(func(events *util.Events) { events.Clear() }) // EventBox is cleared if eb.Peek(EvtReadNew) { t.Error("EvtReadNew should not be set yet") } // Make sure that event poller is finished time.Sleep(readerPollIntervalMax) // Restart event poller reader.startEventPoller() // Failing command reader.fin(reader.readFromCommand("sh", `no-such-command`)) strs = []string{} if len(strs) > 0 { t.Errorf("%s", strs) } // Check EventBox again if eb.Peek(EvtReadNew) { t.Error("Command failed. EvtReadNew should not be set") } if !eb.Peek(EvtReadFin) { t.Error("EvtReadFin should be set") } }