Files
wazero/examples/cli/cli_test.go
Crypt Keeper 329ccca6b1 Switches from gofmt to gofumpt (#848)
This switches to gofumpt and applies changes, as I've noticed working
in dapr (who uses this) that it finds some things that are annoying,
such as inconsistent block formatting in test tables.

Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-11-09 05:48:24 +01:00

60 lines
1.3 KiB
Go

package cli
import (
"bytes"
_ "embed"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"testing"
"github.com/tetratelabs/wazero/internal/testing/require"
)
//go:embed testdata/cli.wasm
var cliWasm []byte
func TestRun(t *testing.T) {
tests := []struct {
args []string
stdOut string
}{
{
args: []string{"3", "1"},
stdOut: "result: 4",
},
{
args: []string{"-sub=true", "3", "1"},
stdOut: "result: 2",
},
}
wasmPath := filepath.Join(t.TempDir(), "cli.wasm")
require.NoError(t, os.WriteFile(wasmPath, cliWasm, 0o755))
// We can't invoke go run in our docker based cross-architecture tests. We do want to use
// otherwise so running unit tests normally does not require special build steps.
var cmdExe string
var cmdArgs []string
if cmdPath := os.Getenv("WAZEROCLI"); cmdPath != "" {
cmdExe = cmdPath
} else {
cmdExe = filepath.Join(runtime.GOROOT(), "bin", "go")
cmdArgs = []string{"run", "../../cmd/wazero"}
}
cmdArgs = append(cmdArgs, "run", wasmPath)
for _, tc := range tests {
tt := tc
t.Run(strings.Join(tt.args, " "), func(t *testing.T) {
stdOut := &bytes.Buffer{}
cmd := exec.Command(cmdExe, append(cmdArgs, tt.args...)...)
cmd.Stdout = stdOut
require.NoError(t, cmd.Run())
require.Equal(t, tt.stdOut, strings.TrimSpace(stdOut.String()))
})
}
}