summaryrefslogtreecommitdiff
path: root/cli/tools/test.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-04-27 10:05:20 -0400
committerGitHub <noreply@github.com>2023-04-27 10:05:20 -0400
commit742cc3111ccb7c3c12c1b05904be052094657481 (patch)
tree56910a8843fbc666b719b61e772bfa51dbfd750e /cli/tools/test.rs
parent03132e19da6c8e34e8100c6a57cd911b43900950 (diff)
refactor(cli): extract out ProcState from CliMainWorker (#18867)
Diffstat (limited to 'cli/tools/test.rs')
-rw-r--r--cli/tools/test.rs93
1 files changed, 58 insertions, 35 deletions
diff --git a/cli/tools/test.rs b/cli/tools/test.rs
index 62a104733..3bc0e79aa 100644
--- a/cli/tools/test.rs
+++ b/cli/tools/test.rs
@@ -17,7 +17,7 @@ use crate::util::fs::collect_specifiers;
use crate::util::path::get_extension;
use crate::util::path::is_supported_ext;
use crate::util::path::mapped_specifier_for_tsc;
-use crate::worker::create_custom_worker;
+use crate::worker::CliMainWorkerFactory;
use deno_ast::swc::common::comments::CommentKind;
use deno_ast::MediaType;
@@ -336,10 +336,18 @@ pub struct TestSummary {
}
#[derive(Debug, Clone)]
-struct TestSpecifierOptions {
+struct TestSpecifiersOptions {
concurrent_jobs: NonZeroUsize,
fail_fast: Option<NonZeroUsize>,
- filter: TestFilter,
+ log_level: Option<log::Level>,
+ specifier: TestSpecifierOptions,
+}
+
+#[derive(Debug, Clone)]
+pub struct TestSpecifierOptions {
+ pub shuffle: Option<u64>,
+ pub filter: TestFilter,
+ pub trace_ops: bool,
}
impl TestSummary {
@@ -907,30 +915,30 @@ pub fn format_test_error(js_error: &JsError) -> String {
/// Test a single specifier as documentation containing test programs, an executable test module or
/// both.
pub async fn test_specifier(
- ps: &ProcState,
+ worker_factory: &CliMainWorkerFactory,
permissions: Permissions,
specifier: ModuleSpecifier,
mut sender: TestEventSender,
fail_fast_tracker: FailFastTracker,
- filter: TestFilter,
+ options: &TestSpecifierOptions,
) -> Result<(), AnyError> {
if fail_fast_tracker.should_stop() {
return Ok(());
}
let stdout = StdioPipe::File(sender.stdout());
let stderr = StdioPipe::File(sender.stderr());
- let mut worker = create_custom_worker(
- ps,
- specifier.clone(),
- PermissionsContainer::new(permissions),
- vec![ops::testing::deno_test::init_ops(sender.clone())],
- Stdio {
- stdin: StdioPipe::Inherit,
- stdout,
- stderr,
- },
- )
- .await?;
+ let mut worker = worker_factory
+ .create_custom_worker(
+ specifier.clone(),
+ PermissionsContainer::new(permissions),
+ vec![ops::testing::deno_test::init_ops(sender.clone())],
+ Stdio {
+ stdin: StdioPipe::Inherit,
+ stdout,
+ stderr,
+ },
+ )
+ .await?;
let mut coverage_collector = worker.maybe_setup_coverage_collector().await?;
@@ -951,7 +959,7 @@ pub async fn test_specifier(
}
let mut worker = worker.into_main_worker();
- if ps.options.trace_ops() {
+ if options.trace_ops {
worker.js_runtime.execute_script_static(
located_script_name!(),
"Deno[Deno.internal].enableOpCallTracing();",
@@ -971,9 +979,9 @@ pub async fn test_specifier(
let tests = if used_only { only } else { no_only };
let mut tests = tests
.into_iter()
- .filter(|(d, _)| filter.includes(&d.name))
+ .filter(|(d, _)| options.filter.includes(&d.name))
.collect::<Vec<_>>();
- if let Some(seed) = ps.options.shuffle_tests() {
+ if let Some(seed) = options.shuffle {
tests.shuffle(&mut SmallRng::seed_from_u64(seed));
}
sender.send(TestEvent::Plan(TestPlan {
@@ -1288,13 +1296,12 @@ static HAS_TEST_RUN_SIGINT_HANDLER: AtomicBool = AtomicBool::new(false);
/// Test a collection of specifiers with test modes concurrently.
async fn test_specifiers(
- ps: &ProcState,
+ worker_factory: Arc<CliMainWorkerFactory>,
permissions: &Permissions,
specifiers: Vec<ModuleSpecifier>,
- options: TestSpecifierOptions,
+ options: TestSpecifiersOptions,
) -> Result<(), AnyError> {
- let log_level = ps.options.log_level();
- let specifiers = if let Some(seed) = ps.options.shuffle_tests() {
+ let specifiers = if let Some(seed) = options.specifier.shuffle {
let mut rng = SmallRng::seed_from_u64(seed);
let mut specifiers = specifiers;
specifiers.sort();
@@ -1316,19 +1323,19 @@ async fn test_specifiers(
HAS_TEST_RUN_SIGINT_HANDLER.store(true, Ordering::Relaxed);
let join_handles = specifiers.into_iter().map(move |specifier| {
- let ps = ps.clone();
+ let worker_factory = worker_factory.clone();
let permissions = permissions.clone();
let sender = sender.clone();
- let options = options.clone();
let fail_fast_tracker = FailFastTracker::new(options.fail_fast);
+ let specifier_options = options.specifier.clone();
tokio::task::spawn_blocking(move || {
run_local(test_specifier(
- &ps,
+ &worker_factory,
permissions,
specifier,
sender.clone(),
fail_fast_tracker,
- options.filter,
+ &specifier_options,
))
})
});
@@ -1339,7 +1346,7 @@ async fn test_specifiers(
let mut reporter = Box::new(PrettyTestReporter::new(
concurrent_jobs.get() > 1,
- log_level != Some(Level::Error),
+ options.log_level != Some(Level::Error),
));
let handler = {
@@ -1626,6 +1633,7 @@ pub async fn run_tests(
// file would have impact on other files, which is undesirable.
let permissions =
Permissions::from_options(&ps.options.permissions_options())?;
+ let log_level = ps.options.log_level();
let specifiers_with_mode = fetch_specifiers_with_test_mode(
&ps,
@@ -1644,8 +1652,10 @@ pub async fn run_tests(
return Ok(());
}
+ let worker_factory = Arc::new(ps.into_cli_main_worker_factory());
+
test_specifiers(
- &ps,
+ worker_factory,
&permissions,
specifiers_with_mode
.into_iter()
@@ -1654,10 +1664,15 @@ pub async fn run_tests(
_ => Some(s),
})
.collect(),
- TestSpecifierOptions {
+ TestSpecifiersOptions {
concurrent_jobs: test_options.concurrent_jobs,
fail_fast: test_options.fail_fast,
- filter: TestFilter::from_flag(&test_options.filter),
+ log_level,
+ specifier: TestSpecifierOptions {
+ filter: TestFilter::from_flag(&test_options.filter),
+ shuffle: test_options.shuffle,
+ trace_ops: test_options.trace_ops,
+ },
},
)
.await?;
@@ -1676,6 +1691,7 @@ pub async fn run_tests_with_watch(
let permissions =
Permissions::from_options(&ps.options.permissions_options())?;
let no_check = ps.options.type_check_mode() == TypeCheckMode::None;
+ let log_level = ps.options.log_level();
let ps = RefCell::new(ps);
@@ -1816,8 +1832,10 @@ pub async fn run_tests_with_watch(
return Ok(());
}
+ let worker_factory = Arc::new(ps.into_cli_main_worker_factory());
+
test_specifiers(
- &ps,
+ worker_factory,
permissions,
specifiers_with_mode
.into_iter()
@@ -1826,10 +1844,15 @@ pub async fn run_tests_with_watch(
_ => Some(s),
})
.collect(),
- TestSpecifierOptions {
+ TestSpecifiersOptions {
concurrent_jobs: test_options.concurrent_jobs,
fail_fast: test_options.fail_fast,
- filter: TestFilter::from_flag(&test_options.filter),
+ log_level,
+ specifier: TestSpecifierOptions {
+ filter: TestFilter::from_flag(&test_options.filter),
+ shuffle: test_options.shuffle,
+ trace_ops: test_options.trace_ops,
+ },
},
)
.await?;