Fix broken CLI tests

This commit is contained in:
Sam Mohr 2024-08-16 23:37:31 -07:00
parent 50f6e11423
commit f9008c3af0
No known key found for this signature in database
GPG key ID: EA41D161A3C1BC99
4 changed files with 44 additions and 37 deletions

View file

@ -38,7 +38,7 @@ loop = \state, step ->
\res ->
when res is
Ok (Step newState) -> Step newState
Ok (Done result) -> Done (Ok result)
Ok (Done res2) -> Done (Ok res2)
Err e -> Done (Err e)
Effect.loop state looper
@ -55,8 +55,8 @@ after : Task a err, (a -> Task b err) -> Task b err
after = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok a -> transform a
Err err -> Task.fail err
@ -64,8 +64,8 @@ await : Task a err, (a -> Task b err) -> Task b err
await = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok a -> transform a
Err err -> Task.fail err
@ -73,8 +73,8 @@ attempt : Task a b, (Result a b -> Task c d) -> Task c d
attempt = \task, transform ->
Effect.after
task
\result ->
when result is
\res ->
when res is
Ok ok -> transform (Ok ok)
Err err -> transform (Err err)
@ -82,8 +82,8 @@ map : Task a err, (a -> b) -> Task b err
map = \effect, transform ->
Effect.map
effect
\result ->
when result is
\res ->
when res is
Ok a -> Ok (transform a)
Err err -> Err err
@ -91,7 +91,7 @@ result : Task ok err -> Task (Result ok err) *
result = \effect ->
Effect.after
effect
\result -> Task.succeed result
\res -> Task.succeed res
putLine : Str -> Task {} *
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})

View file

@ -23,6 +23,7 @@ mod cli_run {
use serial_test::serial;
use std::iter;
use std::path::Path;
use std::process::ExitStatus;
#[cfg(all(unix, not(target_os = "macos")))]
const ALLOW_VALGRIND: bool = true;
@ -106,6 +107,11 @@ mod cli_run {
assert_multiline_str_eq!(err.as_str(), expected);
}
fn assert_valid_roc_check_status(status: ExitStatus) {
// 0 means no errors or warnings, 2 means just warnings
assert!(status.code().is_some_and(|code| code == 0 || code == 2))
}
fn check_format_check_as_expected(file: &Path, expects_success_exit_code: bool) {
let out = run_roc([CMD_FORMAT, file.to_str().unwrap(), CHECK_FLAG], &[], &[]);
@ -803,7 +809,7 @@ mod cli_run {
fn check_virtual_dom_server() {
let path = file_path_from_root("examples/virtual-dom-wip", "example-server.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
// TODO: write a new test once mono bugs are resolved in investigation
@ -812,7 +818,7 @@ mod cli_run {
fn check_virtual_dom_client() {
let path = file_path_from_root("examples/virtual-dom-wip", "example-client.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
#[test]
@ -821,7 +827,7 @@ mod cli_run {
fn cli_countdown_check() {
let path = file_path_from_root("crates/cli/tests/cli", "countdown.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
#[test]
@ -830,7 +836,7 @@ mod cli_run {
fn cli_echo_check() {
let path = file_path_from_root("crates/cli/tests/cli", "echo.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
#[test]
@ -839,7 +845,7 @@ mod cli_run {
fn cli_file_check() {
let path = file_path_from_root("crates/cli/tests/cli", "fileBROKEN.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
#[test]
@ -848,7 +854,8 @@ mod cli_run {
fn cli_form_check() {
let path = file_path_from_root("crates/cli/tests/cli", "form.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
dbg!(out.stdout, out.stderr);
assert_valid_roc_check_status(out.status);
}
#[test]
@ -857,7 +864,7 @@ mod cli_run {
fn cli_http_get_check() {
let path = file_path_from_root("crates/cli/tests/cli", "http-get.roc");
let out = run_roc([CMD_CHECK, path.to_str().unwrap()], &[], &[]);
assert!(out.status.success());
assert_valid_roc_check_status(out.status);
}
#[test]
@ -1482,9 +1489,9 @@ mod cli_run {
Something is off with the body of the main definition:
6 main : Str -> Task {} []
7 main = /_ ->
8 "this is a string, not a Task {} [] function like the platform expects."
5 main : Str -> Task {} []
6 main = /_ ->
7 "this is a string, not a Task {} [] function like the platform expects."
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The body is a string of type:

View file

@ -1,8 +1,7 @@
app "type-error"
packages { pf: "../../../../examples/cli/false-interpreter/platform/main.roc" }
imports [pf.Task.{ Task }]
provides [main] to pf
app [main] { pf: platform "../../../../examples/cli/false-interpreter/platform/main.roc" }
import pf.Task exposing [Task]
main : Str -> Task {} []
main = \_ ->
"this is a string, not a Task {} [] function like the platform expects."
"this is a string, not a Task {} [] function like the platform expects."

View file

@ -6,6 +6,7 @@ module [
map,
onFail,
attempt,
result,
fromResult,
loop,
]
@ -22,7 +23,7 @@ loop = \state, step ->
\res ->
when res is
Ok (Step newState) -> Step newState
Ok (Done result) -> Done (Ok result)
Ok (Done res2) -> Done (Ok res2)
Err e -> Done (Err e)
Effect.loop state looper
@ -36,8 +37,8 @@ fail = \val ->
Effect.always (Err val)
fromResult : Result a e -> Task a e
fromResult = \result ->
when result is
fromResult = \res ->
when res is
Ok a -> succeed a
Err e -> fail e
@ -45,8 +46,8 @@ attempt : Task a b, (Result a b -> Task c d) -> Task c d
attempt = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok ok -> transform (Ok ok)
Err err -> transform (Err err)
@ -54,8 +55,8 @@ await : Task a err, (a -> Task b err) -> Task b err
await = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok a -> transform a
Err err -> Task.fail err
@ -63,8 +64,8 @@ onFail : Task ok a, (a -> Task ok b) -> Task ok b
onFail = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok a -> Task.succeed a
Err err -> transform err
@ -72,8 +73,8 @@ map : Task a err, (a -> b) -> Task b err
map = \effect, transform ->
Effect.after
effect
\result ->
when result is
\res ->
when res is
Ok a -> Task.succeed (transform a)
Err err -> Task.fail err
@ -81,4 +82,4 @@ result : Task ok err -> Task (Result ok err) *
result = \effect ->
Effect.after
effect
\result -> Task.succeed result
\res -> Task.succeed res