Skip to content

Commit be981b3

Browse files
authored
feat(lexarg): Add --fail-fast flag (#105)
See rust-lang/rust#142859
2 parents cd30944 + b3f435a commit be981b3

3 files changed

Lines changed: 284 additions & 0 deletions

File tree

crates/libtest-lexarg/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ Options:
108108
--ignored Run only ignored tests
109109
--include-ignored
110110
Run ignored and not ignored tests
111+
--fail-fast Don't start new tests after the first failure
111112
--no-capture don't capture stdout/stderr of each task, allow
112113
printing directly
113114
--show-output Show captured stdout of successful tests
@@ -221,6 +222,9 @@ impl TestOptsBuilder {
221222
Long("exact") => {
222223
self.opts.filter_exact = true;
223224
}
225+
Long("fail-fast") => {
226+
self.opts.fail_fast = true;
227+
}
224228
Long("color") => {
225229
let color = parser
226230
.next_flag_value()

crates/libtest2-mimic/tests/testsuite/mixed_bag.rs

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,146 @@ failures:
10121012
test result: FAILED. 2 passed; 1 failed; 5 ignored; 0 filtered out; finished in [..]s
10131013
10141014
1015+
"#]],
1016+
);
1017+
}
1018+
1019+
#[test]
1020+
fn fail_fast() {
1021+
check(
1022+
&["--fail-fast"],
1023+
101,
1024+
str![[r#"
1025+
1026+
running 8 tests
1027+
test bear ... ignored
1028+
test bunny ... ignored
1029+
test cat ... ok
1030+
test dog ... FAILED
1031+
1032+
failures:
1033+
1034+
---- dog ----
1035+
was not a good boy
1036+
1037+
1038+
failures:
1039+
dog
1040+
1041+
test result: FAILED. 1 passed; 1 failed; 2 ignored; 0 filtered out; finished in [..]s
1042+
1043+
1044+
"#]],
1045+
str![[r#"
1046+
...
1047+
1048+
"#]],
1049+
);
1050+
}
1051+
1052+
#[test]
1053+
#[cfg(feature = "json")]
1054+
fn fail_fast_json() {
1055+
check(
1056+
&["-Zunstable-options", "--format=json", "--fail-fast"],
1057+
101,
1058+
str![[r#"
1059+
[
1060+
{
1061+
"event": "discover_start"
1062+
},
1063+
{
1064+
"event": "discover_case",
1065+
"name": "bear"
1066+
},
1067+
{
1068+
"event": "discover_case",
1069+
"name": "bunny"
1070+
},
1071+
{
1072+
"event": "discover_case",
1073+
"name": "cat"
1074+
},
1075+
{
1076+
"event": "discover_case",
1077+
"name": "dog"
1078+
},
1079+
{
1080+
"event": "discover_case",
1081+
"name": "fly"
1082+
},
1083+
{
1084+
"event": "discover_case",
1085+
"name": "fox"
1086+
},
1087+
{
1088+
"event": "discover_case",
1089+
"name": "frog"
1090+
},
1091+
{
1092+
"event": "discover_case",
1093+
"name": "owl"
1094+
},
1095+
{
1096+
"elapsed_s": "[..]",
1097+
"event": "discover_complete"
1098+
},
1099+
{
1100+
"event": "suite_start"
1101+
},
1102+
{
1103+
"event": "case_start",
1104+
"name": "bear"
1105+
},
1106+
{
1107+
"elapsed_s": "[..]",
1108+
"event": "case_complete",
1109+
"message": "fails",
1110+
"name": "bear",
1111+
"status": "ignored"
1112+
},
1113+
{
1114+
"event": "case_start",
1115+
"name": "bunny"
1116+
},
1117+
{
1118+
"elapsed_s": "[..]",
1119+
"event": "case_complete",
1120+
"message": "fails",
1121+
"name": "bunny",
1122+
"status": "ignored"
1123+
},
1124+
{
1125+
"event": "case_start",
1126+
"name": "cat"
1127+
},
1128+
{
1129+
"elapsed_s": "[..]",
1130+
"event": "case_complete",
1131+
"name": "cat"
1132+
},
1133+
{
1134+
"event": "case_start",
1135+
"name": "dog"
1136+
},
1137+
{
1138+
"elapsed_s": "[..]",
1139+
"event": "case_complete",
1140+
"message": "was not a good boy",
1141+
"name": "dog",
1142+
"status": "failed"
1143+
},
1144+
{
1145+
"elapsed_s": "[..]",
1146+
"event": "suite_complete"
1147+
}
1148+
]
1149+
"#]]
1150+
.is_json()
1151+
.against_jsonlines(),
1152+
str![[r#"
1153+
...
1154+
10151155
"#]],
10161156
);
10171157
}

crates/libtest2/tests/testsuite/mixed_bag.rs

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,146 @@ failures:
10191019
test result: FAILED. 2 passed; 1 failed; 5 ignored; 0 filtered out; finished in [..]s
10201020
10211021
1022+
"#]],
1023+
);
1024+
}
1025+
1026+
#[test]
1027+
fn fail_fast() {
1028+
check(
1029+
&["--fail-fast"],
1030+
101,
1031+
str![[r#"
1032+
1033+
running 8 tests
1034+
test bear ... ignored
1035+
test bunny ... ignored
1036+
test cat ... ok
1037+
test dog ... FAILED
1038+
1039+
failures:
1040+
1041+
---- dog ----
1042+
was not a good boy
1043+
1044+
1045+
failures:
1046+
dog
1047+
1048+
test result: FAILED. 1 passed; 1 failed; 2 ignored; 0 filtered out; finished in [..]s
1049+
1050+
1051+
"#]],
1052+
str![[r#"
1053+
...
1054+
1055+
"#]],
1056+
);
1057+
}
1058+
1059+
#[test]
1060+
#[cfg(feature = "json")]
1061+
fn fail_fast_json() {
1062+
check(
1063+
&["-Zunstable-options", "--format=json", "--fail-fast"],
1064+
101,
1065+
str![[r#"
1066+
[
1067+
{
1068+
"event": "discover_start"
1069+
},
1070+
{
1071+
"event": "discover_case",
1072+
"name": "bear"
1073+
},
1074+
{
1075+
"event": "discover_case",
1076+
"name": "bunny"
1077+
},
1078+
{
1079+
"event": "discover_case",
1080+
"name": "cat"
1081+
},
1082+
{
1083+
"event": "discover_case",
1084+
"name": "dog"
1085+
},
1086+
{
1087+
"event": "discover_case",
1088+
"name": "fly"
1089+
},
1090+
{
1091+
"event": "discover_case",
1092+
"name": "fox"
1093+
},
1094+
{
1095+
"event": "discover_case",
1096+
"name": "frog"
1097+
},
1098+
{
1099+
"event": "discover_case",
1100+
"name": "owl"
1101+
},
1102+
{
1103+
"elapsed_s": "[..]",
1104+
"event": "discover_complete"
1105+
},
1106+
{
1107+
"event": "suite_start"
1108+
},
1109+
{
1110+
"event": "case_start",
1111+
"name": "bear"
1112+
},
1113+
{
1114+
"elapsed_s": "[..]",
1115+
"event": "case_complete",
1116+
"message": "fails",
1117+
"name": "bear",
1118+
"status": "ignored"
1119+
},
1120+
{
1121+
"event": "case_start",
1122+
"name": "bunny"
1123+
},
1124+
{
1125+
"elapsed_s": "[..]",
1126+
"event": "case_complete",
1127+
"message": "fails",
1128+
"name": "bunny",
1129+
"status": "ignored"
1130+
},
1131+
{
1132+
"event": "case_start",
1133+
"name": "cat"
1134+
},
1135+
{
1136+
"elapsed_s": "[..]",
1137+
"event": "case_complete",
1138+
"name": "cat"
1139+
},
1140+
{
1141+
"event": "case_start",
1142+
"name": "dog"
1143+
},
1144+
{
1145+
"elapsed_s": "[..]",
1146+
"event": "case_complete",
1147+
"message": "was not a good boy",
1148+
"name": "dog",
1149+
"status": "failed"
1150+
},
1151+
{
1152+
"elapsed_s": "[..]",
1153+
"event": "suite_complete"
1154+
}
1155+
]
1156+
"#]]
1157+
.is_json()
1158+
.against_jsonlines(),
1159+
str![[r#"
1160+
...
1161+
10221162
"#]],
10231163
);
10241164
}

0 commit comments

Comments
 (0)