I’m working on a program that uses
github.com/rivo/tview to present some configuration options to the user. I have navigated through the ui and things look good right now.
However, I need to automate these tests. The obvious choice here is
expect or one of the go packages offering this functionality, for example
github.com/google/goexpect. Getting goexpect to work with tview is a battle I’ve yet to win fully; tview’s
Application.Run() no longer returns immediately, which is an improvement, but so far I haven’t managed any navigation with the escape sequences I’ve sent.
How would you go about automated testing of an ncurses-like ui? I’d prefer a solution using go, but I am open to non-go solutions as well.
I’m currently using goexpect along with
github.com/creack/pty. Some googling led me to
github.com/Azure/go-ansiterm and its importers, such as
github.com/kriskowal/cops/vtio – but I’m not yet certain whether they’re any help.
Once I’m at a point where the test can be automated, I hope to hook it up to dvyukov’s go-fuzz. I want to use fuzzing to find any input sequences that can cause hangs or crashes. Currently I re-exec
os.Args to connect to the pty, though if it’s possible I suspect that avoiding the exec would greatly increase fuzzing speed. Plus I suspect the mechanism used to track fuzz coverage would be broken by exec…