mirror of
https://github.com/denoland/deno.git
synced 2025-08-03 18:38:33 +00:00
fix(test): improve how --fail-fast
shuts down when hitting limit (#16956)
Closes #15650
This commit is contained in:
parent
3863aaf8ae
commit
2fab4583ef
5 changed files with 104 additions and 31 deletions
|
@ -13,6 +13,7 @@ use crate::lsp::logging::lsp_log;
|
|||
use crate::ops;
|
||||
use crate::proc_state;
|
||||
use crate::tools::test;
|
||||
use crate::tools::test::FailFastTracker;
|
||||
use crate::tools::test::TestEventSender;
|
||||
use crate::util::checksum;
|
||||
use crate::worker::create_main_worker_for_test_or_bench;
|
||||
|
@ -144,25 +145,29 @@ impl LspTestFilter {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn test_specifier(
|
||||
ps: proc_state::ProcState,
|
||||
permissions: Permissions,
|
||||
specifier: ModuleSpecifier,
|
||||
mode: test::TestMode,
|
||||
sender: &TestEventSender,
|
||||
sender: TestEventSender,
|
||||
fail_fast_tracker: FailFastTracker,
|
||||
token: CancellationToken,
|
||||
filter: test::TestFilter,
|
||||
) -> Result<(), AnyError> {
|
||||
if !token.is_cancelled() {
|
||||
let stdout = StdioPipe::File(sender.stdout());
|
||||
let stderr = StdioPipe::File(sender.stderr());
|
||||
let mut worker = create_main_worker_for_test_or_bench(
|
||||
&ps,
|
||||
specifier.clone(),
|
||||
permissions,
|
||||
vec![ops::testing::init(sender.clone(), filter)],
|
||||
vec![ops::testing::init(sender, fail_fast_tracker, filter)],
|
||||
Stdio {
|
||||
stdin: StdioPipe::Inherit,
|
||||
stdout: StdioPipe::File(sender.stdout()),
|
||||
stderr: StdioPipe::File(sender.stderr()),
|
||||
stdout,
|
||||
stderr,
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
|
@ -262,19 +267,17 @@ impl TestRun {
|
|||
)
|
||||
.await?;
|
||||
|
||||
let (sender, mut receiver) = mpsc::unbounded_channel::<test::TestEvent>();
|
||||
let sender = TestEventSender::new(sender);
|
||||
|
||||
let (concurrent_jobs, fail_fast) =
|
||||
if let DenoSubcommand::Test(test_flags) = ps.options.sub_command() {
|
||||
(
|
||||
test_flags.concurrent_jobs.into(),
|
||||
test_flags.fail_fast.map(|count| count.into()),
|
||||
)
|
||||
(test_flags.concurrent_jobs.into(), test_flags.fail_fast)
|
||||
} else {
|
||||
unreachable!("Should always be Test subcommand.");
|
||||
};
|
||||
|
||||
let (sender, mut receiver) = mpsc::unbounded_channel::<test::TestEvent>();
|
||||
let sender = TestEventSender::new(sender);
|
||||
let fail_fast_tracker = FailFastTracker::new(fail_fast);
|
||||
|
||||
let mut queue = self.queue.iter().collect::<Vec<&ModuleSpecifier>>();
|
||||
queue.sort();
|
||||
|
||||
|
@ -288,6 +291,7 @@ impl TestRun {
|
|||
let ps = ps.clone();
|
||||
let permissions = permissions.clone();
|
||||
let mut sender = sender.clone();
|
||||
let fail_fast_tracker = fail_fast_tracker.clone();
|
||||
let lsp_filter = self.filters.get(&specifier);
|
||||
let filter = test::TestFilter {
|
||||
substring: None,
|
||||
|
@ -305,13 +309,17 @@ impl TestRun {
|
|||
let tests = tests_.clone();
|
||||
|
||||
tokio::task::spawn_blocking(move || {
|
||||
if fail_fast_tracker.should_stop() {
|
||||
return Ok(());
|
||||
}
|
||||
let origin = specifier.to_string();
|
||||
let file_result = run_local(test_specifier(
|
||||
ps,
|
||||
permissions,
|
||||
specifier,
|
||||
test::TestMode::Executable,
|
||||
&sender,
|
||||
sender.clone(),
|
||||
fail_fast_tracker,
|
||||
token,
|
||||
filter,
|
||||
));
|
||||
|
@ -427,12 +435,6 @@ impl TestRun {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(count) = fail_fast {
|
||||
if summary.failed >= count {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let elapsed = Instant::now().duration_since(earlier);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue