(ctx context.Context, t *testctx.T)
| 920 | } |
| 921 | |
| 922 | func (ShellSuite) TestExitCommand(ctx context.Context, t *testctx.T) { |
| 923 | t.Run("specific code", func(ctx context.Context, t *testctx.T) { |
| 924 | script := `directory | with-new-file foo foo | entries; .exit 5; .echo ok` |
| 925 | |
| 926 | c := connect(ctx, t) |
| 927 | _, err := daggerCliBase(t, c).With(daggerShell(script)).Sync(ctx) |
| 928 | |
| 929 | var execErr *dagger.ExecError |
| 930 | require.ErrorAs(t, err, &execErr) |
| 931 | require.Equal(t, 5, execErr.ExitCode) |
| 932 | require.Contains(t, execErr.Stdout, "foo") |
| 933 | require.NotContains(t, execErr.Stdout, "ok") |
| 934 | }) |
| 935 | |
| 936 | t.Run("specific code with tty", func(ctx context.Context, t *testctx.T) { |
| 937 | modDir := t.TempDir() |
| 938 | |
| 939 | console, err := newTUIConsole(t, 60*time.Second) |
| 940 | |
| 941 | require.NoError(t, err) |
| 942 | defer console.Close() |
| 943 | |
| 944 | tty := console.Tty() |
| 945 | |
| 946 | cmd := hostDaggerCommand(ctx, t, modDir, "-M", "-c", ".exit 5") |
| 947 | cmd.Stdin = tty |
| 948 | cmd.Stdout = tty |
| 949 | cmd.Stderr = tty |
| 950 | err = cmd.Run() |
| 951 | |
| 952 | var exitErr *exec.ExitError |
| 953 | require.ErrorAs(t, err, &exitErr) |
| 954 | require.Equal(t, 5, exitErr.ExitCode()) |
| 955 | }) |
| 956 | |
| 957 | t.Run("no args", func(ctx context.Context, t *testctx.T) { |
| 958 | // without `set +e` it won't reach `.exit` |
| 959 | script := `_set +e; directory | with-new-file | entries; .exit; .echo ok` |
| 960 | |
| 961 | c := connect(ctx, t) |
| 962 | _, err := daggerCliBase(t, c).With(daggerShell(script)).Sync(ctx) |
| 963 | |
| 964 | var execErr *dagger.ExecError |
| 965 | require.ErrorAs(t, err, &execErr) |
| 966 | require.Equal(t, 1, execErr.ExitCode) |
| 967 | require.NotContains(t, execErr.Stdout, "ok") |
| 968 | }) |
| 969 | |
| 970 | t.Run("no error", func(ctx context.Context, t *testctx.T) { |
| 971 | // no error because `.echo ok` returns status code 0 |
| 972 | script := `_set +e; directory | with-new-file | entries; .echo ok; .exit; .echo exited` |
| 973 | |
| 974 | c := connect(ctx, t) |
| 975 | out, err := daggerCliBase(t, c).With(daggerShell(script)).Stdout(ctx) |
| 976 | |
| 977 | require.NoError(t, err) |
| 978 | require.Contains(t, out, "ok") |
| 979 | require.NotContains(t, out, "exited") |
nothing calls this directly
no test coverage detected