diff options
Diffstat (limited to 'pkg/commands/oscommands/fake_cmd_obj_runner.go')
-rw-r--r-- | pkg/commands/oscommands/fake_cmd_obj_runner.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/pkg/commands/oscommands/fake_cmd_obj_runner.go b/pkg/commands/oscommands/fake_cmd_obj_runner.go new file mode 100644 index 000000000..09431bb20 --- /dev/null +++ b/pkg/commands/oscommands/fake_cmd_obj_runner.go @@ -0,0 +1,84 @@ +package oscommands + +import ( + "bufio" + "fmt" + "strings" + "testing" + + "github.com/go-errors/errors" + "github.com/stretchr/testify/assert" +) + +// for use in testing + +type FakeCmdObjRunner struct { + t *testing.T + expectedCmds []func(ICmdObj) (string, error) + expectedCmdIndex int +} + +var _ ICmdObjRunner = &FakeCmdObjRunner{} + +func NewFakeRunner(t *testing.T) *FakeCmdObjRunner { + return &FakeCmdObjRunner{t: t} +} + +func (self *FakeCmdObjRunner) Run(cmdObj ICmdObj) error { + _, err := self.RunWithOutput(cmdObj) + return err +} + +func (self *FakeCmdObjRunner) RunWithOutput(cmdObj ICmdObj) (string, error) { + if self.expectedCmdIndex > len(self.expectedCmds)-1 { + self.t.Errorf("ran too many commands. Unexpected command: `%s`", cmdObj.ToString()) + return "", errors.New("ran too many commands") + } + + expectedCmd := self.expectedCmds[self.expectedCmdIndex] + self.expectedCmdIndex++ + + return expectedCmd(cmdObj) +} + +func (self *FakeCmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error { + output, err := self.RunWithOutput(cmdObj) + if err != nil { + return err + } + + scanner := bufio.NewScanner(strings.NewReader(output)) + scanner.Split(bufio.ScanLines) + for scanner.Scan() { + line := scanner.Text() + stop, err := onLine(line) + if err != nil { + return err + } + if stop { + break + } + } + + return nil +} + +func (self *FakeCmdObjRunner) ExpectFunc(fn func(cmdObj ICmdObj) (string, error)) *FakeCmdObjRunner { + self.expectedCmds = append(self.expectedCmds, fn) + + return self +} + +func (self *FakeCmdObjRunner) Expect(expectedCmdStr string, output string, err error) *FakeCmdObjRunner { + self.ExpectFunc(func(cmdObj ICmdObj) (string, error) { + cmdStr := cmdObj.ToString() + if cmdStr != expectedCmdStr { + assert.Equal(self.t, expectedCmdStr, cmdStr, fmt.Sprintf("expected command %d to be %s, but was %s", self.expectedCmdIndex+1, expectedCmdStr, cmdStr)) + return "", errors.New("expected cmd") + } + + return output, err + }) + + return self +} |