summaryrefslogtreecommitdiff
path: root/cli/main.rs
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-04-26 05:38:59 +0800
committerGitHub <noreply@github.com>2021-04-25 23:38:59 +0200
commitf3751e498faabd524494a4b70c49b1f53fe5ebdd (patch)
tree9f3cf5b15fc10d0ef12f78c984fbbb59554343ef /cli/main.rs
parent7063e449f11ab2cff492ba90314da7a0bcd994a6 (diff)
feat(cli): add test permissions to Deno.test (#10188)
This commits adds adds "permissions" option to the test definitions which allows tests to run with different permission sets than the process's permission. The change will only be in effect within the test function, once the test has completed the original process permission set is restored. Test permissions cannot exceed the process's permission. You can only narrow or drop permissions, failure to acquire a permission results in an error being thrown and the test case will fail.
Diffstat (limited to 'cli/main.rs')
-rw-r--r--cli/main.rs25
1 files changed, 18 insertions, 7 deletions
diff --git a/cli/main.rs b/cli/main.rs
index c42604146..38e67f46a 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -160,6 +160,7 @@ pub fn create_main_worker(
program_state: &Arc<ProgramState>,
main_module: ModuleSpecifier,
permissions: Permissions,
+ enable_testing: bool,
) -> MainWorker {
let module_loader = CliModuleLoader::new(program_state.clone());
@@ -219,6 +220,11 @@ pub fn create_main_worker(
// above
ops::errors::init(js_runtime);
ops::runtime_compiler::init(js_runtime);
+
+ if enable_testing {
+ ops::test_runner::init(js_runtime);
+ }
+
js_runtime.sync_ops_cache();
}
worker.bootstrap(&options);
@@ -427,7 +433,7 @@ async fn install_command(
let program_state = ProgramState::build(preload_flags).await?;
let main_module = resolve_url_or_path(&module_url)?;
let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ create_main_worker(&program_state, main_module.clone(), permissions, false);
// First, fetch and compile the module; this step ensures that the module exists.
worker.preload_module(&main_module).await?;
tools::installer::install(flags, &module_url, args, name, root, force)
@@ -494,7 +500,7 @@ async fn eval_command(
let permissions = Permissions::from_options(&flags.clone().into());
let program_state = ProgramState::build(flags).await?;
let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ create_main_worker(&program_state, main_module.clone(), permissions, false);
// Create a dummy source file.
let source_code = if print {
format!("console.log({})", code)
@@ -728,7 +734,7 @@ async fn run_repl(flags: Flags) -> Result<(), AnyError> {
let permissions = Permissions::from_options(&flags.clone().into());
let program_state = ProgramState::build(flags).await?;
let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ create_main_worker(&program_state, main_module.clone(), permissions, false);
worker.run_event_loop().await?;
tools::repl::run(&program_state, worker).await
@@ -742,6 +748,7 @@ async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> {
&program_state.clone(),
main_module.clone(),
permissions,
+ false,
);
let mut source = Vec::new();
@@ -819,8 +826,12 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<(), AnyError> {
async move {
let main_module = main_module.clone();
let program_state = ProgramState::build(flags).await?;
- let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ let mut worker = create_main_worker(
+ &program_state,
+ main_module.clone(),
+ permissions,
+ false,
+ );
debug!("main_module {}", main_module);
worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?;
@@ -853,7 +864,7 @@ async fn run_command(flags: Flags, script: String) -> Result<(), AnyError> {
let program_state = ProgramState::build(flags.clone()).await?;
let permissions = Permissions::from_options(&flags.clone().into());
let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ create_main_worker(&program_state, main_module.clone(), permissions, false);
let mut maybe_coverage_collector =
if let Some(ref coverage_dir) = program_state.coverage_dir {
@@ -970,7 +981,7 @@ async fn test_command(
}
let mut worker =
- create_main_worker(&program_state, main_module.clone(), permissions);
+ create_main_worker(&program_state, main_module.clone(), permissions, true);
if let Some(ref coverage_dir) = flags.coverage_dir {
env::set_var("DENO_UNSTABLE_COVERAGE_DIR", coverage_dir);