| package testutils |
| |
| import ( |
| "context" |
| "fmt" |
| "strings" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/exec" |
| ) |
| |
| // Run runs the given command in the given dir and asserts that it succeeds. |
| func Run(t require.TestingT, ctx context.Context, dir string, cmd ...string) string { |
| out, err := exec.RunCwd(ctx, dir, cmd...) |
| require.NoError(t, err, fmt.Sprintf("Command %q failed:\n%s", strings.Join(cmd, " "), out)) |
| return out |
| } |
| |
| // AssertCommandsMatch does a quick comparison of the commands returned by exec.CommandCollector |
| // with the name and arguments listed as a space seperated list. Other details of a command (e.g. |
| // if they had standard out or set environment variables) should be handled in follow on, specific |
| // assertions. If the size of the command lists does not match, as many as possible will be compared |
| // before ending in a fatal manner. |
| func AssertCommandsMatch(t require.TestingT, expectedCommands [][]string, actualCommands []*exec.Command) { |
| for i, cmd := range expectedCommands { |
| if i >= len(actualCommands) { |
| require.Fail(t, fmt.Sprintf("Ran out of actual commands to compare against after %s", |
| expectedCommands[len(expectedCommands)-1])) |
| } |
| actualCmd := actualCommands[i] |
| cli := make([]string, 1, 1+len(actualCmd.Args)) |
| cli[0] = actualCmd.Name |
| cli = append(cli, actualCmd.Args...) |
| assert.Equal(t, cmd, cli) |
| } |
| require.Equal(t, len(expectedCommands), len(actualCommands)) |
| } |