package frankenphp_test import ( "errors" "log" "os" "os/exec" "testing" "github.com/dunglas/frankenphp" "github.com/stretchr/testify/assert" ) func TestExecuteScriptCLI(t *testing.T) { if _, err := os.Stat("internal/testcli/testcli"); err != nil { t.Skip("internal/testcli/testcli has not been compiled, run `cd internal/testcli/ && go build`") } cmd := exec.Command("internal/testcli/testcli", "testdata/command.php", "foo", "bar") stdoutStderr, err := cmd.CombinedOutput() assert.Error(t, err) var exitError *exec.ExitError if errors.As(err, &exitError) { assert.Equal(t, 3, exitError.ExitCode()) } stdoutStderrStr := string(stdoutStderr) assert.Contains(t, stdoutStderrStr, `"foo"`) assert.Contains(t, stdoutStderrStr, `"bar"`) assert.Contains(t, stdoutStderrStr, "From the CLI") } func TestExecuteCLICode(t *testing.T) { if _, err := os.Stat("internal/testcli/testcli"); err != nil { t.Skip("internal/testcli/testcli has not been compiled, run `cd internal/testcli/ && go build`") } cmd := exec.Command("internal/testcli/testcli", "-r", "echo 'Hello World';") stdoutStderr, err := cmd.CombinedOutput() assert.NoError(t, err) stdoutStderrStr := string(stdoutStderr) assert.Equal(t, stdoutStderrStr, `Hello World`) } func ExampleExecuteScriptCLI() { if len(os.Args) <= 1 { log.Println("Usage: my-program script.php") os.Exit(1) } os.Exit(frankenphp.ExecuteScriptCLI(os.Args[0], os.Args)) }