2022-01-07 22:09:52 -05:00
|
|
|
|
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
2021-06-27 13:27:36 -04:00
|
|
|
|
|
|
|
|
|
use deno_core::url;
|
2022-09-19 10:32:21 -04:00
|
|
|
|
use deno_runtime::deno_fetch::reqwest;
|
|
|
|
|
use std::io::Read;
|
|
|
|
|
use std::io::Write;
|
2021-06-27 13:27:36 -04:00
|
|
|
|
use std::process::Command;
|
2022-07-12 18:58:39 -04:00
|
|
|
|
use std::process::Stdio;
|
2021-06-27 13:27:36 -04:00
|
|
|
|
use test_util as util;
|
2022-04-01 11:15:37 -04:00
|
|
|
|
use test_util::TempDir;
|
2022-09-19 10:32:21 -04:00
|
|
|
|
use tokio::task::LocalSet;
|
|
|
|
|
use trust_dns_client::serialize::txt::Lexer;
|
|
|
|
|
use trust_dns_client::serialize::txt::Parser;
|
2022-07-12 18:58:39 -04:00
|
|
|
|
use util::assert_contains;
|
2021-06-27 13:27:36 -04:00
|
|
|
|
|
|
|
|
|
itest!(stdout_write_all {
|
2022-07-13 11:16:42 -04:00
|
|
|
|
args: "run --quiet run/stdout_write_all.ts",
|
|
|
|
|
output: "run/stdout_write_all.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(stdin_read_all {
|
|
|
|
|
args: "run --quiet run/stdin_read_all.ts",
|
|
|
|
|
output: "run/stdin_read_all.out",
|
|
|
|
|
input: Some("01234567890123456789012345678901234567890123456789"),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-09-04 22:33:06 -04:00
|
|
|
|
itest!(stdout_write_sync_async {
|
|
|
|
|
args: "run --quiet run/stdout_write_sync_async.ts",
|
|
|
|
|
output: "run/stdout_write_sync_async.out",
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(_001_hello {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/001_hello.js",
|
|
|
|
|
output: "run/001_hello.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_002_hello {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/002_hello.ts",
|
|
|
|
|
output: "run/002_hello.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_003_relative_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/003_relative_import.ts",
|
|
|
|
|
output: "run/003_relative_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_004_set_timeout {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/004_set_timeout.ts",
|
|
|
|
|
output: "run/004_set_timeout.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_005_more_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/005_more_imports.ts",
|
|
|
|
|
output: "run/005_more_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_006_url_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/006_url_imports.ts",
|
|
|
|
|
output: "run/006_url_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_012_async {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/012_async.ts",
|
|
|
|
|
output: "run/012_async.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_013_dynamic_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/013_dynamic_import.ts",
|
|
|
|
|
output: "run/013_dynamic_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_014_duplicate_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/014_duplicate_import.ts ",
|
|
|
|
|
output: "run/014_duplicate_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_015_duplicate_parallel_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --quiet --reload --allow-read run/015_duplicate_parallel_import.js",
|
|
|
|
|
output: "run/015_duplicate_parallel_import.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_016_double_await {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-read --reload run/016_double_await.ts",
|
|
|
|
|
output: "run/016_double_await.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_017_import_redirect {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/017_import_redirect.ts",
|
|
|
|
|
output: "run/017_import_redirect.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_017_import_redirect_nocheck {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --no-check run/017_import_redirect.ts",
|
|
|
|
|
output: "run/017_import_redirect.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_017_import_redirect_info {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "info --quiet --reload run/017_import_redirect.ts",
|
|
|
|
|
output: "run/017_import_redirect_info.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_018_async_catch {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/018_async_catch.ts",
|
|
|
|
|
output: "run/018_async_catch.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_019_media_types {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/019_media_types.ts",
|
|
|
|
|
output: "run/019_media_types.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_020_json_modules {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/020_json_modules.ts",
|
|
|
|
|
output: "run/020_json_modules.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_021_mjs_modules {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/021_mjs_modules.ts",
|
|
|
|
|
output: "run/021_mjs_modules.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_023_no_ext {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/023_no_ext",
|
|
|
|
|
output: "run/023_no_ext.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// TODO(lucacasonato): remove --unstable when permissions goes stable
|
|
|
|
|
itest!(_025_hrtime {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-hrtime --unstable --reload run/025_hrtime.ts",
|
|
|
|
|
output: "run/025_hrtime.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_025_reload_js_type_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/025_reload_js_type_error.js",
|
|
|
|
|
output: "run/025_reload_js_type_error.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_026_redirect_javascript {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/026_redirect_javascript.js",
|
|
|
|
|
output: "run/026_redirect_javascript.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_027_redirect_typescript {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/027_redirect_typescript.ts",
|
|
|
|
|
output: "run/027_redirect_typescript.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_028_args {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --quiet --reload run/028_args.ts --arg1 val1 --arg2=val2 -- arg3 arg4",
|
|
|
|
|
output: "run/028_args.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_033_import_map {
|
|
|
|
|
args:
|
|
|
|
|
"run --quiet --reload --import-map=import_maps/import_map.json import_maps/test.ts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/033_import_map.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_033_import_map_remote {
|
|
|
|
|
args:
|
2021-08-11 10:20:47 -04:00
|
|
|
|
"run --quiet --reload --import-map=http://127.0.0.1:4545/import_maps/import_map_remote.json --unstable import_maps/test_remote.ts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/033_import_map_remote.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(onload {
|
|
|
|
|
args: "run --quiet --reload run/onload/main.ts",
|
|
|
|
|
output: "run/onload/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_035_cached_only_flag {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check --cached-only http://127.0.0.1:4545/run/019_media_types.ts",
|
|
|
|
|
output: "run/035_cached_only_flag.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_038_checkjs {
|
|
|
|
|
// checking if JS file is run through TS compiler
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --reload --config run/checkjs.tsconfig.json --check run/038_checkjs.js",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/038_checkjs.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_042_dyn_import_evalcontext {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-read --reload run/042_dyn_import_evalcontext.ts",
|
|
|
|
|
output: "run/042_dyn_import_evalcontext.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_044_bad_resource {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/044_bad_resource.ts",
|
|
|
|
|
output: "run/044_bad_resource.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-05-18 16:00:11 -04:00
|
|
|
|
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(_045_proxy {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run -L debug --unstable --allow-net --allow-env --allow-run --allow-read --reload --quiet run/045_proxy_test.ts",
|
|
|
|
|
output: "run/045_proxy_test.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_046_tsx {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/046_jsx_test.tsx",
|
|
|
|
|
output: "run/046_jsx_test.tsx.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_047_jsx {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/047_jsx_test.jsx",
|
|
|
|
|
output: "run/047_jsx_test.jsx.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_048_media_types_jsx {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/048_media_types_jsx.ts",
|
|
|
|
|
output: "run/048_media_types_jsx.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_052_no_remote_flag {
|
2022-04-10 19:12:51 -04:00
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --reload --check --no-remote http://127.0.0.1:4545/run/019_media_types.ts",
|
|
|
|
|
output: "run/052_no_remote_flag.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_056_make_temp_file_write_perm {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --quiet --allow-read --allow-write=./subdir/ run/056_make_temp_file_write_perm.ts",
|
|
|
|
|
output: "run/056_make_temp_file_write_perm.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_058_tasks_microtasks_close {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/058_tasks_microtasks_close.ts",
|
|
|
|
|
output: "run/058_tasks_microtasks_close.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_059_fs_relative_path_perm {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/059_fs_relative_path_perm.ts",
|
|
|
|
|
output: "run/059_fs_relative_path_perm.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_070_location {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --location https://foo/bar?baz#bat run/070_location.ts",
|
|
|
|
|
output: "run/070_location.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_071_location_unset {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/071_location_unset.ts",
|
|
|
|
|
output: "run/071_location_unset.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_072_location_relative_fetch {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --location http://127.0.0.1:4545/ --allow-net run/072_location_relative_fetch.ts",
|
|
|
|
|
output: "run/072_location_relative_fetch.ts.out",
|
2021-10-26 20:10:27 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2022-06-28 10:49:30 -04:00
|
|
|
|
// tests the beforeunload event
|
|
|
|
|
itest!(beforeunload_event {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/before_unload.js",
|
|
|
|
|
output: "run/before_unload.js.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// tests the serialization of webstorage (both localStorage and sessionStorage)
|
|
|
|
|
itest!(webstorage_serialization {
|
|
|
|
|
args: "run run/webstorage/serialization.ts",
|
|
|
|
|
output: "run/webstorage/serialization.ts.out",
|
2022-06-28 10:49:30 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-10-26 20:10:27 -04:00
|
|
|
|
// tests to ensure that when `--location` is set, all code shares the same
|
|
|
|
|
// localStorage cache based on the origin of the location URL.
|
|
|
|
|
#[test]
|
|
|
|
|
fn webstorage_location_shares_origin() {
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--location")
|
|
|
|
|
.arg("https://example.com/a.ts")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/fixture.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--location")
|
|
|
|
|
.arg("https://example.com/b.ts")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/logger.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 1, hello: \"deno\" }\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// test to ensure that when a --config file is set, but no --location, that
|
|
|
|
|
// storage persists against unique configuration files.
|
|
|
|
|
#[test]
|
|
|
|
|
fn webstorage_config_file() {
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--config")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/config_a.jsonc")
|
|
|
|
|
.arg("run/webstorage/fixture.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--config")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/config_b.jsonc")
|
|
|
|
|
.arg("run/webstorage/logger.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--config")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/config_a.jsonc")
|
|
|
|
|
.arg("run/webstorage/logger.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 1, hello: \"deno\" }\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// tests to ensure `--config` does not effect persisted storage when a
|
|
|
|
|
// `--location` is provided.
|
|
|
|
|
#[test]
|
|
|
|
|
fn webstorage_location_precedes_config() {
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--location")
|
|
|
|
|
.arg("https://example.com/a.ts")
|
|
|
|
|
.arg("--config")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/config_a.jsonc")
|
|
|
|
|
.arg("run/webstorage/fixture.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--location")
|
|
|
|
|
.arg("https://example.com/b.ts")
|
|
|
|
|
.arg("--config")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/config_b.jsonc")
|
|
|
|
|
.arg("run/webstorage/logger.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 1, hello: \"deno\" }\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// test to ensure that when there isn't a configuration or location, that the
|
|
|
|
|
// main module is used to determine how to persist storage data.
|
|
|
|
|
#[test]
|
|
|
|
|
fn webstorage_main_module() {
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/fixture.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/logger.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 0 }\n");
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-26 20:10:27 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/webstorage/fixture.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-10-26 20:10:27 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert_eq!(output.stdout, b"Storage { length: 1, hello: \"deno\" }\n");
|
|
|
|
|
}
|
2021-06-27 13:27:36 -04:00
|
|
|
|
|
|
|
|
|
itest!(_075_import_local_query_hash {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/075_import_local_query_hash.ts",
|
|
|
|
|
output: "run/075_import_local_query_hash.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_077_fetch_empty {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run -A run/077_fetch_empty.ts",
|
|
|
|
|
output: "run/077_fetch_empty.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_078_unload_on_exit {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/078_unload_on_exit.ts",
|
|
|
|
|
output: "run/078_unload_on_exit.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_079_location_authentication {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --location https://foo:bar@baz/qux run/079_location_authentication.ts",
|
|
|
|
|
output: "run/079_location_authentication.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_081_location_relative_fetch_redirect {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --location http://127.0.0.1:4546/ --allow-net run/081_location_relative_fetch_redirect.ts",
|
|
|
|
|
output: "run/081_location_relative_fetch_redirect.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_082_prepare_stack_trace_throw {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/082_prepare_stack_trace_throw.js",
|
|
|
|
|
output: "run/082_prepare_stack_trace_throw.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn _083_legacy_external_source_map() {
|
|
|
|
|
let _g = util::http_server();
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let deno_dir = TempDir::new();
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let module_url = url::Url::parse(
|
|
|
|
|
"http://localhost:4545/run/083_legacy_external_source_map.ts",
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
2021-06-27 13:27:36 -04:00
|
|
|
|
// Write a faulty old external source map.
|
|
|
|
|
let faulty_map_path = deno_dir.path().join("gen/http/localhost_PORT4545/9576bd5febd0587c5c4d88d57cb3ac8ebf2600c529142abe3baa9a751d20c334.js.map");
|
2022-03-22 15:10:00 -04:00
|
|
|
|
std::fs::create_dir_all(faulty_map_path.parent().unwrap()).unwrap();
|
|
|
|
|
std::fs::write(faulty_map_path, "{\"version\":3,\"file\":\"\",\"sourceRoot\":\"\",\"sources\":[\"http://localhost:4545/083_legacy_external_source_map.ts\"],\"names\":[],\"mappings\":\";AAAA,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC\"}").unwrap();
|
2021-06-27 13:27:36 -04:00
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(module_url.to_string())
|
|
|
|
|
.output()
|
2022-03-22 15:10:00 -04:00
|
|
|
|
.unwrap();
|
2021-06-27 13:27:36 -04:00
|
|
|
|
// Before https://github.com/denoland/deno/issues/6965 was fixed, the faulty
|
|
|
|
|
// old external source map would cause a panic while formatting the error
|
|
|
|
|
// and the exit code would be 101. The external source map should be ignored
|
|
|
|
|
// in favor of the inline one.
|
|
|
|
|
assert_eq!(output.status.code(), Some(1));
|
|
|
|
|
let out = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
assert_eq!(out, "");
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(dynamic_import_async_error {
|
|
|
|
|
args: "run --allow-read run/dynamic_import_async_error/main.ts",
|
|
|
|
|
output: "run/dynamic_import_async_error/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(dynamic_import_already_rejected {
|
|
|
|
|
args: "run --allow-read run/dynamic_import_already_rejected/main.ts",
|
|
|
|
|
output: "run/dynamic_import_already_rejected/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(no_check_imports_not_used_as_values {
|
|
|
|
|
args: "run --config run/no_check_imports_not_used_as_values/preserve_imports.tsconfig.json --no-check run/no_check_imports_not_used_as_values/main.ts",
|
|
|
|
|
output: "run/no_check_imports_not_used_as_values/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_088_dynamic_import_already_evaluating {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/088_dynamic_import_already_evaluating.ts",
|
|
|
|
|
output: "run/088_dynamic_import_already_evaluating.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-05-18 16:00:11 -04:00
|
|
|
|
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(_089_run_allow_list {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --unstable --allow-run=curl run/089_run_allow_list.ts",
|
|
|
|
|
output: "run/089_run_allow_list.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn _090_run_permissions_request() {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let args = "run --quiet run/090_run_permissions_request.ts";
|
2021-09-09 08:38:47 -04:00
|
|
|
|
use util::PtyData::*;
|
|
|
|
|
util::test_pty2(args, vec![
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests run access to \"ls\". Run again with --allow-run to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)]"),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("y\n"),
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests run access to \"cat\". Run again with --allow-run to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)]"),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("n\n"),
|
|
|
|
|
Output("granted\r\n"),
|
|
|
|
|
Output("prompt\r\n"),
|
|
|
|
|
Output("denied\r\n"),
|
|
|
|
|
]);
|
2021-06-27 13:27:36 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
itest!(_091_use_define_for_class_fields {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --check run/091_use_define_for_class_fields.ts",
|
|
|
|
|
output: "run/091_use_define_for_class_fields.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_092_import_map_unmapped_bare_specifier {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --import-map import_maps/import_map.json run/092_import_map_unmapped_bare_specifier.ts",
|
|
|
|
|
output: "run/092_import_map_unmapped_bare_specifier.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(js_import_detect {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/js_import_detect.ts",
|
|
|
|
|
output: "run/js_import_detect.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
2021-07-05 09:34:37 -04:00
|
|
|
|
itest!(blob_gc_finalization {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/blob_gc_finalization.js",
|
|
|
|
|
output: "run/blob_gc_finalization.js.out",
|
2021-07-05 09:34:37 -04:00
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
2021-07-20 15:06:24 -04:00
|
|
|
|
itest!(fetch_response_finalization {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --v8-flags=--expose-gc --allow-net run/fetch_response_finalization.js",
|
|
|
|
|
output: "run/fetch_response_finalization.js.out",
|
2021-07-20 15:06:24 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
2021-12-09 17:12:21 -05:00
|
|
|
|
itest!(import_type {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/import_type.ts",
|
|
|
|
|
output: "run/import_type.ts.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_type_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --no-check run/import_type.ts",
|
|
|
|
|
output: "run/import_type.ts.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(private_field_presence {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/private_field_presence.ts",
|
|
|
|
|
output: "run/private_field_presence.ts.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(private_field_presence_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --no-check run/private_field_presence.ts",
|
|
|
|
|
output: "run/private_field_presence.ts.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(lock_write_requires_lock {
|
|
|
|
|
args: "run --lock-write some_file.ts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/lock_write_requires_lock.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-05-18 16:00:11 -04:00
|
|
|
|
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(lock_write_fetch {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --quiet --allow-read --allow-write --allow-env --allow-run --unstable run/lock_write_fetch/main.ts",
|
|
|
|
|
output: "run/lock_write_fetch/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(lock_check_ok {
|
2021-08-11 10:20:47 -04:00
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --lock=run/lock_check_ok.json http://127.0.0.1:4545/run/003_relative_import.ts",
|
|
|
|
|
output: "run/003_relative_import.ts.out",
|
2021-08-11 10:20:47 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
2021-06-27 13:27:36 -04:00
|
|
|
|
|
|
|
|
|
itest!(lock_check_ok2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --lock=run/lock_check_ok2.json run/019_media_types.ts",
|
|
|
|
|
output: "run/019_media_types.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(lock_dynamic_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --lock=run/lock_dynamic_imports.json --allow-read --allow-net http://127.0.0.1:4545/run/013_dynamic_import.ts",
|
|
|
|
|
output: "run/lock_dynamic_imports.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 10,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(lock_check_err {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --lock=run/lock_check_err.json http://127.0.0.1:4545/run/003_relative_import.ts",
|
|
|
|
|
output: "run/lock_check_err.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 10,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(lock_check_err2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --lock=run/lock_check_err2.json run/019_media_types.ts",
|
|
|
|
|
output: "run/lock_check_err2.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 10,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-12-09 17:12:21 -05:00
|
|
|
|
itest!(mts_dmts_mjs {
|
|
|
|
|
args: "run subdir/import.mts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/mts_dmts_mjs.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(mts_dmts_mjs_no_check {
|
|
|
|
|
args: "run --no-check subdir/import.mts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/mts_dmts_mjs.out",
|
2021-12-09 17:12:21 -05:00
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(async_error {
|
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/async_error.ts",
|
|
|
|
|
output: "run/async_error.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(config {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --reload --config run/config/tsconfig.json --check run/config/main.ts",
|
|
|
|
|
output: "run/config/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(config_types {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --reload --quiet --config run/config_types/tsconfig.json run/config_types/main.ts",
|
|
|
|
|
output: "run/config_types/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(config_types_remote {
|
|
|
|
|
http_server: true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --quiet --config run/config_types/remote.tsconfig.json run/config_types/main.ts",
|
|
|
|
|
output: "run/config_types/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(empty_typescript {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/empty.ts",
|
|
|
|
|
output_str: Some("Check file:[WILDCARD]/run/empty.ts\n"),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_001 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_001.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_001.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_002 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_002.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_002.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_003_typescript {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/error_003_typescript.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_003_typescript.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Supposing that we've already attempted to run error_003_typescript.ts
|
|
|
|
|
// we want to make sure that JS wasn't emitted. Running again without reload flag
|
|
|
|
|
// should result in the same output.
|
|
|
|
|
// https://github.com/denoland/deno/issues/2436
|
|
|
|
|
itest!(error_003_typescript2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --check run/error_003_typescript.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_003_typescript.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_004_missing_module {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_004_missing_module.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_004_missing_module.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_005_missing_dynamic_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --reload --allow-read --quiet run/error_005_missing_dynamic_import.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_005_missing_dynamic_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_006_import_ext_failure {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_006_import_ext_failure.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_006_import_ext_failure.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_007_any {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_007_any.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_007_any.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_008_checkjs {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_008_checkjs.js",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_008_checkjs.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_009_extensions_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_009_extensions_error.js",
|
|
|
|
|
output: "run/error_009_extensions_error.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_011_bad_module_specifier {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_011_bad_module_specifier.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_011_bad_module_specifier.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_012_bad_dynamic_import_specifier {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/error_012_bad_dynamic_import_specifier.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_012_bad_dynamic_import_specifier.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_013_missing_script {
|
|
|
|
|
args: "run --reload missing_file_name",
|
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_013_missing_script.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_014_catch_dynamic_import_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --reload --allow-read run/error_014_catch_dynamic_import_error.js",
|
|
|
|
|
output: "run/error_014_catch_dynamic_import_error.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_015_dynamic_import_permissions {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --quiet run/error_015_dynamic_import_permissions.js",
|
|
|
|
|
output: "run/error_015_dynamic_import_permissions.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// We have an allow-net flag but not allow-read, it should still result in error.
|
|
|
|
|
itest!(error_016_dynamic_import_permissions2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --allow-net run/error_016_dynamic_import_permissions2.js",
|
|
|
|
|
output: "run/error_016_dynamic_import_permissions2.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_017_hide_long_source_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/error_017_hide_long_source_ts.ts",
|
|
|
|
|
output: "run/error_017_hide_long_source_ts.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_018_hide_long_source_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_018_hide_long_source_js.js",
|
|
|
|
|
output: "run/error_018_hide_long_source_js.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_019_stack_function {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_019_stack_function.ts",
|
|
|
|
|
output: "run/error_019_stack_function.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_020_stack_constructor {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_020_stack_constructor.ts",
|
|
|
|
|
output: "run/error_020_stack_constructor.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_021_stack_method {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_021_stack_method.ts",
|
|
|
|
|
output: "run/error_021_stack_method.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_022_stack_custom_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_022_stack_custom_error.ts",
|
|
|
|
|
output: "run/error_022_stack_custom_error.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_023_stack_async {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_023_stack_async.ts",
|
|
|
|
|
output: "run/error_023_stack_async.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_024_stack_promise_all {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_024_stack_promise_all.ts",
|
|
|
|
|
output: "run/error_024_stack_promise_all.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_025_tab_indent {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_025_tab_indent",
|
|
|
|
|
output: "run/error_025_tab_indent.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_026_remote_import_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/error_026_remote_import_error.ts",
|
|
|
|
|
output: "run/error_026_remote_import_error.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-09-17 02:54:52 -04:00
|
|
|
|
itest!(error_for_await {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/error_for_await.ts",
|
|
|
|
|
output: "run/error_for_await.ts.out",
|
2021-09-17 02:54:52 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(error_missing_module_named_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_missing_module_named_import.ts",
|
|
|
|
|
output: "run/error_missing_module_named_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --no-check run/error_no_check.ts",
|
|
|
|
|
output: "run/error_no_check.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_syntax {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_syntax.js",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_syntax.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_syntax_empty_trailing_line {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/error_syntax_empty_trailing_line.mjs",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_syntax_empty_trailing_line.mjs.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_type_definitions {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/error_type_definitions.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_type_definitions.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_local_static_import_from_remote_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload http://localhost:4545/run/error_local_static_import_from_remote.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_local_static_import_from_remote.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_local_static_import_from_remote_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload http://localhost:4545/run/error_local_static_import_from_remote.js",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_local_static_import_from_remote.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(exit_error42 {
|
|
|
|
|
exit_code: 42,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/exit_error42.ts",
|
|
|
|
|
output: "run/exit_error42.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-11-27 18:45:38 -05:00
|
|
|
|
itest!(set_exit_code_0 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check --unstable run/set_exit_code_0.ts",
|
|
|
|
|
output_str: Some(""),
|
2021-11-27 18:45:38 -05:00
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(set_exit_code_1 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check --unstable run/set_exit_code_1.ts",
|
|
|
|
|
output_str: Some(""),
|
2021-11-27 18:45:38 -05:00
|
|
|
|
exit_code: 42,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(set_exit_code_2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check --unstable run/set_exit_code_2.ts",
|
|
|
|
|
output_str: Some(""),
|
2021-11-27 18:45:38 -05:00
|
|
|
|
exit_code: 42,
|
|
|
|
|
});
|
|
|
|
|
|
2022-06-13 17:53:04 -04:00
|
|
|
|
itest!(op_exit_op_set_exit_code_in_worker {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check --unstable --allow-read run/op_exit_op_set_exit_code_in_worker.ts",
|
2022-06-13 17:53:04 -04:00
|
|
|
|
exit_code: 21,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output_str: Some(""),
|
2021-12-11 09:56:45 -05:00
|
|
|
|
});
|
|
|
|
|
|
2022-05-19 22:57:05 -04:00
|
|
|
|
itest!(deno_exit_tampering {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check --unstable run/deno_exit_tampering.ts",
|
|
|
|
|
output_str: Some(""),
|
2022-05-19 22:57:05 -04:00
|
|
|
|
exit_code: 42,
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(heapstats {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --unstable --v8-flags=--expose-gc run/heapstats.js",
|
|
|
|
|
output: "run/heapstats.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-07-02 04:46:37 -04:00
|
|
|
|
itest!(finalization_registry {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --quiet --unstable --v8-flags=--expose-gc run/finalization_registry.js",
|
|
|
|
|
output: "run/finalization_registry.js.out",
|
2021-07-02 04:46:37 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(https_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --cert tls/RootCA.pem run/https_import.ts",
|
|
|
|
|
output: "run/https_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(if_main {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/if_main.ts",
|
|
|
|
|
output: "run/if_main.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_meta {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --import-map=run/import_meta/importmap.json run/import_meta/main.ts",
|
|
|
|
|
output: "run/import_meta/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(main_module {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-read --reload run/main_module/main.ts",
|
|
|
|
|
output: "run/main_module/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --no-check run/006_url_imports.ts",
|
|
|
|
|
output: "run/006_url_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(no_check_decorators {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --no-check run/no_check_decorators.ts",
|
|
|
|
|
output: "run/no_check_decorators.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-11-29 17:23:30 -05:00
|
|
|
|
itest!(check_remote {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --check=all run/no_check_remote.ts",
|
|
|
|
|
output: "run/no_check_remote.ts.disabled.out",
|
2021-11-29 17:23:30 -05:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(no_check_remote {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --no-check=remote run/no_check_remote.ts",
|
|
|
|
|
output: "run/no_check_remote.ts.enabled.out",
|
2021-11-29 17:23:30 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(runtime_decorators {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --no-check run/runtime_decorators.ts",
|
|
|
|
|
output: "run/runtime_decorators.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(seed_random {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --seed=100 run/seed_random.js",
|
|
|
|
|
output: "run/seed_random.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_definitions {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/type_definitions.ts",
|
|
|
|
|
output: "run/type_definitions.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_definitions_for_export {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/type_definitions_for_export.ts",
|
|
|
|
|
output: "run/type_definitions_for_export.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_directives_01 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check=all -L debug run/type_directives_01.ts",
|
|
|
|
|
output: "run/type_directives_01.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_directives_02 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check=all -L debug run/type_directives_02.ts",
|
|
|
|
|
output: "run/type_directives_02.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_directives_js_main {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload -L debug run/type_directives_js_main.js",
|
|
|
|
|
output: "run/type_directives_js_main.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 0,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_directives_redirect {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/type_directives_redirect.ts",
|
|
|
|
|
output: "run/type_directives_redirect.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(type_headers_deno_types {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/type_headers_deno_types.ts",
|
|
|
|
|
output: "run/type_headers_deno_types.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(ts_type_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/ts_type_imports.ts",
|
|
|
|
|
output: "run/ts_type_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(ts_decorators {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/ts_decorators.ts",
|
|
|
|
|
output: "run/ts_decorators.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(ts_type_only_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/ts_type_only_import.ts",
|
|
|
|
|
output: "run/ts_type_only_import.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(swc_syntax_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/swc_syntax_error.ts",
|
|
|
|
|
output: "run/swc_syntax_error.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unbuffered_stderr {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/unbuffered_stderr.ts",
|
|
|
|
|
output: "run/unbuffered_stderr.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unbuffered_stdout {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/unbuffered_stdout.ts",
|
|
|
|
|
output: "run/unbuffered_stdout.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(v8_flags_run {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --v8-flags=--expose-gc run/v8_flags.js",
|
|
|
|
|
output: "run/v8_flags.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(v8_flags_unrecognized {
|
|
|
|
|
args: "repl --v8-flags=--foo,bar,--trace-gc,-baz",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/v8_flags_unrecognized.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(v8_help {
|
|
|
|
|
args: "repl --v8-flags=--help",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/v8_help.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unsupported_dynamic_import_scheme {
|
|
|
|
|
args: "eval import('xxx:')",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/unsupported_dynamic_import_scheme.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(wasm {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/wasm.ts",
|
|
|
|
|
output: "run/wasm.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(wasm_shared {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/wasm_shared.ts",
|
|
|
|
|
output: "run/wasm_shared.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(wasm_async {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/wasm_async.js",
|
|
|
|
|
output: "run/wasm_async.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(wasm_unreachable {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/wasm_unreachable.js",
|
|
|
|
|
output: "run/wasm_unreachable.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2021-10-10 10:03:23 -04:00
|
|
|
|
itest!(wasm_url {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-net=localhost:4545 run/wasm_url.js",
|
|
|
|
|
output: "run/wasm_url.out",
|
2021-10-10 10:03:23 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(weakref {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/weakref.ts",
|
|
|
|
|
output: "run/weakref.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_await_order {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/top_level_await/order.js",
|
|
|
|
|
output: "run/top_level_await/order.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_await_loop {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/top_level_await/loop.js",
|
|
|
|
|
output: "run/top_level_await/loop.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_await_circular {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/top_level_await/circular.js",
|
|
|
|
|
output: "run/top_level_await/circular.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2021-07-05 12:59:49 -04:00
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/11238.
|
|
|
|
|
itest!(top_level_await_nested {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/top_level_await/nested/main.js",
|
|
|
|
|
output: "run/top_level_await/nested.out",
|
2021-07-05 12:59:49 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
itest!(top_level_await_unresolved {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/top_level_await/unresolved.js",
|
|
|
|
|
output: "run/top_level_await/unresolved.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_await {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read run/top_level_await/top_level_await.js",
|
|
|
|
|
output: "run/top_level_await/top_level_await.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_await_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --allow-read run/top_level_await/top_level_await.ts",
|
|
|
|
|
output: "run/top_level_await/top_level_await.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_for_await {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/top_level_await/top_level_for_await.js",
|
|
|
|
|
output: "run/top_level_await/top_level_for_await.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(top_level_for_await_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/top_level_await/top_level_for_await.ts",
|
|
|
|
|
output: "run/top_level_await/top_level_for_await.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_disabled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/unstable.ts",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/unstable_disabled.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_enabled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --unstable run/unstable.ts",
|
|
|
|
|
output: "run/unstable_enabled.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_disabled_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/unstable.js",
|
|
|
|
|
output: "run/unstable_disabled_js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_enabled_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --unstable run/unstable.ts",
|
|
|
|
|
output: "run/unstable_enabled_js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_worker {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --unstable --quiet --allow-read run/unstable_worker.ts",
|
|
|
|
|
output: "run/unstable_worker.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(import_compression {
|
|
|
|
|
args: "run --quiet --reload --allow-net run/import_compression/main.ts",
|
|
|
|
|
output: "run/import_compression/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(disallow_http_from_https_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --cert tls/RootCA.pem https://localhost:5545/run/disallow_http_from_https.js",
|
|
|
|
|
output: "run/disallow_http_from_https_js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(disallow_http_from_https_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --cert tls/RootCA.pem https://localhost:5545/run/disallow_http_from_https.ts",
|
|
|
|
|
output: "run/disallow_http_from_https_ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_conditional {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/dynamic_import_conditional.js",
|
|
|
|
|
output: "run/dynamic_import_conditional.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(tsx_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --check run/tsx_imports/tsx_imports.ts",
|
|
|
|
|
output: "run/tsx_imports/tsx_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_dynamic_import_errors {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/fix_dynamic_import_errors.js",
|
|
|
|
|
output: "run/fix_dynamic_import_errors.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_emittable_skipped {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/fix_emittable_skipped.js",
|
|
|
|
|
output: "run/fix_emittable_skipped.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_exotic_specifiers {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/fix_exotic_specifiers.ts",
|
|
|
|
|
output: "run/fix_exotic_specifiers.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_js_import_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/fix_js_import_js.ts",
|
|
|
|
|
output: "run/fix_js_import_js.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_js_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/fix_js_imports.ts",
|
|
|
|
|
output: "run/fix_js_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_tsc_file_exists {
|
|
|
|
|
args: "run --quiet --reload tsc/test.js",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/fix_tsc_file_exists.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(fix_worker_dispatchevent {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/fix_worker_dispatchevent.ts",
|
|
|
|
|
output: "run/fix_worker_dispatchevent.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(es_private_fields {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/es_private_fields.js",
|
|
|
|
|
output: "run/es_private_fields.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(cjs_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/cjs_imports/main.ts",
|
|
|
|
|
output: "run/cjs_imports/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(ts_import_from_js {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/ts_import_from_js/main.js",
|
|
|
|
|
output: "run/ts_import_from_js/main.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_from_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/jsx_import_from_ts.ts",
|
|
|
|
|
output: "run/jsx_import_from_ts.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-11-08 20:26:39 -05:00
|
|
|
|
itest!(jsx_import_source_pragma {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload run/jsx_import_source_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_with_config {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --reload --config jsx/deno-jsx.jsonc run/jsx_import_source_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_with_dev_config {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --reload --config jsx/deno-jsxdev.jsonc run/jsx_import_source_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_dev.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_no_pragma {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --reload --config jsx/deno-jsx.jsonc run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_no_pragma_dev {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --config jsx/deno-jsxdev.jsonc run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_dev.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_import_map {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json run/jsx_import_source_pragma_import_map.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_import_map_dev {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json --config jsx/deno-jsxdev-import-map.jsonc run/jsx_import_source_pragma_import_map.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map_dev.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_import_map {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json --config jsx/deno-jsx-import-map.jsonc run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_import_map_dev {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json --config jsx/deno-jsxdev-import-map.jsonc run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map_dev.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
2022-08-24 13:36:05 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_import_map_scoped {
|
|
|
|
|
args: "run --reload --import-map jsx/import-map-scoped.json --config jsx/deno-jsx-import-map.jsonc subdir/jsx_import_source_no_pragma.tsx",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/jsx_import_source_import_map.out",
|
2022-08-24 13:36:05 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_import_map_scoped_dev {
|
|
|
|
|
args: "run --reload --import-map jsx/import-map-scoped.json --config jsx/deno-jsxdev-import-map.jsonc subdir/jsx_import_source_no_pragma.tsx",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/jsx_import_source_import_map_dev.out",
|
2022-08-24 13:36:05 -04:00
|
|
|
|
http_server: true,
|
2021-11-08 20:26:39 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --no-check run/jsx_import_source_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_with_config_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --config jsx/deno-jsx.jsonc --no-check run/jsx_import_source_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_no_pragma_no_check {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --reload --config jsx/deno-jsx.jsonc --no-check run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_pragma_import_map_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json --no-check run/jsx_import_source_pragma_import_map.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(jsx_import_source_import_map_no_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --import-map jsx/import-map.json --config jsx/deno-jsx-import-map.jsonc --no-check run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_import_map.out",
|
2021-11-08 20:26:39 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2022-09-19 10:32:21 -04:00
|
|
|
|
itest!(jsx_import_source_error {
|
|
|
|
|
args: "run --config jsx/deno-jsx-error.jsonc --check run/jsx_import_source_no_pragma.tsx",
|
|
|
|
|
output: "run/jsx_import_source_error.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2021-11-08 20:26:39 -05:00
|
|
|
|
|
2021-07-07 13:52:42 -04:00
|
|
|
|
// TODO(#11128): Flaky. Re-enable later.
|
|
|
|
|
// itest!(single_compile_with_reload {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
// args: "run --relcert/oad --allow-read run/single_compile_with_reload.ts",
|
|
|
|
|
// output: "run/single_compile_with_reload.ts.out",
|
2021-07-07 13:52:42 -04:00
|
|
|
|
// });
|
2021-06-27 13:27:36 -04:00
|
|
|
|
|
|
|
|
|
itest!(proto_exploit {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/proto_exploit.js",
|
|
|
|
|
output: "run/proto_exploit.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(reference_types {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --quiet run/reference_types.ts",
|
|
|
|
|
output: "run/reference_types.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(references_types_remote {
|
|
|
|
|
http_server: true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --reload --quiet run/reference_types_remote.ts",
|
|
|
|
|
output: "run/reference_types_remote.ts.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(reference_types_error {
|
|
|
|
|
args:
|
|
|
|
|
"run --config run/checkjs.tsconfig.json --check run/reference_types_error.js",
|
|
|
|
|
output: "run/reference_types_error.js.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(reference_types_error_no_check {
|
|
|
|
|
args: "run --no-check run/reference_types_error.js",
|
|
|
|
|
output_str: Some(""),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url_error_stack {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_data_url_error_stack.ts",
|
|
|
|
|
output: "run/import_data_url_error_stack.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url_import_relative {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_data_url_import_relative.ts",
|
|
|
|
|
output: "run/import_data_url_import_relative.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url_import_map {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --import-map import_maps/import_map.json run/import_data_url.ts",
|
|
|
|
|
output: "run/import_data_url.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url_imports {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_data_url_imports.ts",
|
|
|
|
|
output: "run/import_data_url_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url_jsx {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_data_url_jsx.ts",
|
|
|
|
|
output: "run/import_data_url_jsx.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_data_url {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_data_url.ts",
|
|
|
|
|
output: "run/import_data_url.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_dynamic_data_url {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_dynamic_data_url.ts",
|
|
|
|
|
output: "run/import_dynamic_data_url.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_blob_url_error_stack {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_blob_url_error_stack.ts",
|
|
|
|
|
output: "run/import_blob_url_error_stack.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_blob_url_import_relative {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_blob_url_import_relative.ts",
|
|
|
|
|
output: "run/import_blob_url_import_relative.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_blob_url_imports {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --quiet --reload --allow-net=localhost:4545 run/import_blob_url_imports.ts",
|
|
|
|
|
output: "run/import_blob_url_imports.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_blob_url_jsx {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_blob_url_jsx.ts",
|
|
|
|
|
output: "run/import_blob_url_jsx.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_blob_url {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_blob_url.ts",
|
|
|
|
|
output: "run/import_blob_url.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_file_with_colon {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_file_with_colon.ts",
|
|
|
|
|
output: "run/import_file_with_colon.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
2021-08-18 09:19:22 -04:00
|
|
|
|
|
2022-01-31 04:32:49 -05:00
|
|
|
|
itest!(import_extensionless {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload run/import_extensionless.ts",
|
|
|
|
|
output: "run/import_extensionless.ts.out",
|
2022-01-31 04:32:49 -05:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2021-08-18 09:19:22 -04:00
|
|
|
|
itest!(classic_workers_event_loop {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --enable-testing-features-do-not-use run/classic_workers_event_loop.js",
|
|
|
|
|
output: "run/classic_workers_event_loop.js.out",
|
2021-08-18 09:19:22 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
// FIXME(bartlomieju): disabled, because this test is very flaky on CI
|
|
|
|
|
// itest!(local_sources_not_cached_in_memory {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
// args: "run --allow-read --allow-write run/no_mem_cache.js",
|
|
|
|
|
// output: "run/no_mem_cache.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
// This test checks that inline source map data is used. It uses a hand crafted
|
|
|
|
|
// source map that maps to a file that exists, but is not loaded into the module
|
|
|
|
|
// graph (inline_js_source_map_2.ts) (because there are no direct dependencies).
|
|
|
|
|
// Source line is not remapped because no inline source contents are included in
|
|
|
|
|
// the sourcemap and the file is not present in the dependency graph.
|
|
|
|
|
itest!(inline_js_source_map_2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/inline_js_source_map_2.js",
|
|
|
|
|
output: "run/inline_js_source_map_2.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// This test checks that inline source map data is used. It uses a hand crafted
|
|
|
|
|
// source map that maps to a file that exists, but is not loaded into the module
|
|
|
|
|
// graph (inline_js_source_map_2.ts) (because there are no direct dependencies).
|
|
|
|
|
// Source line remapped using th inline source contents that are included in the
|
|
|
|
|
// inline source map.
|
|
|
|
|
itest!(inline_js_source_map_2_with_inline_contents {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/inline_js_source_map_2_with_inline_contents.js",
|
|
|
|
|
output: "run/inline_js_source_map_2_with_inline_contents.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// This test checks that inline source map data is used. It uses a hand crafted
|
|
|
|
|
// source map that maps to a file that exists, and is loaded into the module
|
|
|
|
|
// graph because of a direct import statement (inline_js_source_map.ts). The
|
|
|
|
|
// source map was generated from an earlier version of this file, where the throw
|
|
|
|
|
// was not commented out. The source line is remapped using source contents that
|
|
|
|
|
// from the module graph.
|
|
|
|
|
itest!(inline_js_source_map_with_contents_from_graph {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/inline_js_source_map_with_contents_from_graph.js",
|
|
|
|
|
output: "run/inline_js_source_map_with_contents_from_graph.js.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// This test ensures that a descriptive error is shown when we're unable to load
|
|
|
|
|
// the import map. Even though this tests only the `run` subcommand, we can be sure
|
|
|
|
|
// that the error message is similar for other subcommands as they all use
|
|
|
|
|
// `program_state.maybe_import_map` to access the import map underneath.
|
|
|
|
|
itest!(error_import_map_unable_to_load {
|
|
|
|
|
args: "run --import-map=import_maps/does_not_exist.json import_maps/test.ts",
|
2022-09-19 10:32:21 -04:00
|
|
|
|
output: "run/error_import_map_unable_to_load.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2021-10-11 12:50:18 -04:00
|
|
|
|
// Test that setting `self` in the main thread to some other value doesn't break
|
|
|
|
|
// the world.
|
|
|
|
|
itest!(replace_self {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/replace_self.js",
|
|
|
|
|
output: "run/replace_self.js.out",
|
2021-10-11 12:50:18 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-07-10 17:32:10 -04:00
|
|
|
|
itest!(worker_event_handler_test {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/worker_event_handler_test.js",
|
|
|
|
|
output: "run/worker_event_handler_test.js.out",
|
2021-07-16 18:51:06 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(worker_close_race {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/worker_close_race.js",
|
|
|
|
|
output: "run/worker_close_race.js.out",
|
2021-07-10 17:32:10 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-09-22 12:02:15 -04:00
|
|
|
|
itest!(worker_drop_handle_race {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/worker_drop_handle_race.js",
|
|
|
|
|
output: "run/worker_drop_handle_race.js.out",
|
2021-09-22 12:02:15 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
fix(workers): Make `worker.terminate()` not block the current thread (#13941)
Calling `worker.terminate()` used to kill the worker's isolate and
then block until the worker's thread finished. This blocks the calling
thread if the worker's event loop was blocked in a sync op (as with
`Deno.sleepSync`), which wasn't realized at the time, but since the
worker's isolate was killed at that moment, it would not block the
calling thread if the worker was in a JS endless loop.
However, in #12831, in order to work around a V8 bug, worker
termination was changed to first set a signal to let the worker event
loop know that termination has been requested, and only kill the
isolate if the event loop has not finished after 2 seconds. However,
this change kept the blocking, which meant that JS endless loops in
the worker now blocked the parent for 2 seconds.
As it turns out, after #12831 it is fine to signal termination and
even kill the worker's isolate without waiting for the thread to
finish, so this change does that. However, that might leave the async
ops that receive messages and control data from the worker pending
after `worker.terminate()`, which leads to odd results from the op
sanitizer. Therefore, we set up a `CancelHandler` to cancel those ops
when the worker is terminated.
2022-04-27 12:22:47 -04:00
|
|
|
|
itest!(worker_drop_handle_race_terminate {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --unstable run/worker_drop_handle_race_terminate.js",
|
|
|
|
|
output: "run/worker_drop_handle_race_terminate.js.out",
|
fix(workers): Make `worker.terminate()` not block the current thread (#13941)
Calling `worker.terminate()` used to kill the worker's isolate and
then block until the worker's thread finished. This blocks the calling
thread if the worker's event loop was blocked in a sync op (as with
`Deno.sleepSync`), which wasn't realized at the time, but since the
worker's isolate was killed at that moment, it would not block the
calling thread if the worker was in a JS endless loop.
However, in #12831, in order to work around a V8 bug, worker
termination was changed to first set a signal to let the worker event
loop know that termination has been requested, and only kill the
isolate if the event loop has not finished after 2 seconds. However,
this change kept the blocking, which meant that JS endless loops in
the worker now blocked the parent for 2 seconds.
As it turns out, after #12831 it is fine to signal termination and
even kill the worker's isolate without waiting for the thread to
finish, so this change does that. However, that might leave the async
ops that receive messages and control data from the worker pending
after `worker.terminate()`, which leads to odd results from the op
sanitizer. Therefore, we set up a `CancelHandler` to cancel those ops
when the worker is terminated.
2022-04-27 12:22:47 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-09-24 22:26:57 -04:00
|
|
|
|
itest!(worker_close_nested {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/worker_close_nested.js",
|
|
|
|
|
output: "run/worker_close_nested.js.out",
|
2021-09-24 22:26:57 -04:00
|
|
|
|
});
|
|
|
|
|
|
Don't drop messages from workers that have already been closed (#11913)
When `worker.terminate()` is called, the spec requires that the
corresponding port message queue is emptied, so no messages can be
received after the call, even if they were sent from the worker before
it was terminated.
The spec doesn't require this of `self.close()`, and since Deno uses
different channels to send messages and to notify that the worker was
closed, messages might still arrive after the worker is known to be
closed, which are currently being dropped. This change fixes that.
The fix involves two parts: one on the JS side and one on the Rust side.
The JS side was using the `#terminated` flag to keep track of whether
the worker is known to be closed, without distinguishing whether further
messages should be dropped or not. This PR changes that flag to an
enum `#state`, which can be one of `"RUNNING"`, `"CLOSED"` or
`"TERMINATED"`.
The Rust side was removing the `WorkerThread` struct from the workers
table when a close control was received, regardless of whether there
were any messages left to read, which made any subsequent calls to
`op_host_recv_message` to return `Ok(None)`, as if there were no more
mesasges. This change instead waits for both a close control and for
the message channel's sender to be closed before the worker thread is
removed from the table.
2021-09-06 05:05:02 -04:00
|
|
|
|
itest!(worker_message_before_close {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-read run/worker_message_before_close.js",
|
|
|
|
|
output: "run/worker_message_before_close.js.out",
|
Don't drop messages from workers that have already been closed (#11913)
When `worker.terminate()` is called, the spec requires that the
corresponding port message queue is emptied, so no messages can be
received after the call, even if they were sent from the worker before
it was terminated.
The spec doesn't require this of `self.close()`, and since Deno uses
different channels to send messages and to notify that the worker was
closed, messages might still arrive after the worker is known to be
closed, which are currently being dropped. This change fixes that.
The fix involves two parts: one on the JS side and one on the Rust side.
The JS side was using the `#terminated` flag to keep track of whether
the worker is known to be closed, without distinguishing whether further
messages should be dropped or not. This PR changes that flag to an
enum `#state`, which can be one of `"RUNNING"`, `"CLOSED"` or
`"TERMINATED"`.
The Rust side was removing the `WorkerThread` struct from the workers
table when a close control was received, regardless of whether there
were any messages left to read, which made any subsequent calls to
`op_host_recv_message` to return `Ok(None)`, as if there were no more
mesasges. This change instead waits for both a close control and for
the message channel's sender to be closed before the worker thread is
removed from the table.
2021-09-06 05:05:02 -04:00
|
|
|
|
});
|
|
|
|
|
|
2021-09-30 13:52:58 -04:00
|
|
|
|
itest!(worker_close_in_wasm_reactions {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args:
|
|
|
|
|
"run --quiet --reload --allow-read run/worker_close_in_wasm_reactions.js",
|
|
|
|
|
output: "run/worker_close_in_wasm_reactions.js.out",
|
2021-12-16 05:45:41 -05:00
|
|
|
|
});
|
|
|
|
|
|
2022-01-16 10:48:32 -05:00
|
|
|
|
itest!(shebang_tsc {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --check run/shebang.ts",
|
|
|
|
|
output: "run/shebang.ts.out",
|
2022-01-16 10:48:32 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(shebang_swc {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/shebang.ts",
|
|
|
|
|
output: "run/shebang.ts.out",
|
2022-01-16 10:48:32 -05:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(shebang_with_json_imports_tsc {
|
|
|
|
|
args: "run --quiet import_assertions/json_with_shebang.ts",
|
|
|
|
|
output: "import_assertions/json_with_shebang.ts.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(shebang_with_json_imports_swc {
|
|
|
|
|
args: "run --quiet --no-check import_assertions/json_with_shebang.ts",
|
|
|
|
|
output: "import_assertions/json_with_shebang.ts.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn no_validate_asm() {
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/no_validate_asm.js")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::piped())
|
|
|
|
|
.stdout(Stdio::piped())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert!(output.stderr.is_empty());
|
|
|
|
|
assert!(output.stdout.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn exec_path() {
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--allow-read")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/exec_path.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stdout(Stdio::piped())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let stdout_str = std::str::from_utf8(&output.stdout).unwrap().trim();
|
|
|
|
|
let actual =
|
|
|
|
|
std::fs::canonicalize(&std::path::Path::new(stdout_str)).unwrap();
|
|
|
|
|
let expected = std::fs::canonicalize(util::deno_exe_path()).unwrap();
|
|
|
|
|
assert_eq!(expected, actual);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)]
|
|
|
|
|
// Clippy suggests to remove the `NoStd` prefix from all variants. I disagree.
|
|
|
|
|
#[allow(clippy::enum_variant_names)]
|
|
|
|
|
enum WinProcConstraints {
|
|
|
|
|
NoStdIn,
|
|
|
|
|
NoStdOut,
|
|
|
|
|
NoStdErr,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)]
|
|
|
|
|
fn run_deno_script_constrained(
|
|
|
|
|
script_path: std::path::PathBuf,
|
|
|
|
|
constraints: WinProcConstraints,
|
|
|
|
|
) -> Result<(), i64> {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let file_path = "assets/DenoWinRunner.ps1";
|
2021-06-27 13:27:36 -04:00
|
|
|
|
let constraints = match constraints {
|
|
|
|
|
WinProcConstraints::NoStdIn => "1",
|
|
|
|
|
WinProcConstraints::NoStdOut => "2",
|
|
|
|
|
WinProcConstraints::NoStdErr => "4",
|
|
|
|
|
};
|
|
|
|
|
let deno_exe_path = util::deno_exe_path()
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let deno_script_path = script_path.into_os_string().into_string().unwrap();
|
|
|
|
|
|
|
|
|
|
let args = vec![&deno_exe_path[..], &deno_script_path[..], constraints];
|
|
|
|
|
util::run_powershell_script_file(file_path, args)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)]
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_no_stdin() {
|
|
|
|
|
let output = run_deno_script_constrained(
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path().join("echo.ts"),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
WinProcConstraints::NoStdIn,
|
|
|
|
|
);
|
|
|
|
|
output.unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)]
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_no_stdout() {
|
|
|
|
|
let output = run_deno_script_constrained(
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path().join("echo.ts"),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
WinProcConstraints::NoStdOut,
|
|
|
|
|
);
|
|
|
|
|
output.unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)]
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_no_stderr() {
|
|
|
|
|
let output = run_deno_script_constrained(
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path().join("echo.ts"),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
WinProcConstraints::NoStdErr,
|
|
|
|
|
);
|
|
|
|
|
output.unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(windows))]
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_undefined_home_environment_variable() {
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.arg("echo.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.env_remove("HOME")
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_undefined_deno_dir_environment_variable() {
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.arg("echo.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.env_remove("DENO_DIR")
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(windows))]
|
|
|
|
|
#[test]
|
|
|
|
|
fn should_not_panic_on_undefined_deno_dir_and_home_environment_variables() {
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.arg("echo.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.env_remove("DENO_DIR")
|
|
|
|
|
.env_remove("HOME")
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rust_log() {
|
|
|
|
|
// Without RUST_LOG the stderr is empty.
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/001_hello.js")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::piped())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert!(output.stderr.is_empty());
|
|
|
|
|
|
|
|
|
|
// With RUST_LOG the stderr is not empty.
|
|
|
|
|
let output = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/001_hello.js")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.env("RUST_LOG", "debug")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::piped())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert!(!output.stderr.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-25 19:34:16 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn dont_cache_on_check_fail() {
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-25 19:34:16 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-06-13 17:13:16 -04:00
|
|
|
|
.arg("--check=all")
|
2021-10-25 19:34:16 -04:00
|
|
|
|
.arg("--reload")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/error_003_typescript.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::piped())
|
2021-10-25 19:34:16 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
assert!(!output.stderr.is_empty());
|
|
|
|
|
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&deno_dir);
|
2021-10-25 19:34:16 -04:00
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-06-13 17:13:16 -04:00
|
|
|
|
.arg("--check=all")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/error_003_typescript.ts")
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::piped())
|
2021-10-25 19:34:16 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
assert!(!output.stderr.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-27 13:27:36 -04:00
|
|
|
|
mod permissions {
|
|
|
|
|
use test_util as util;
|
|
|
|
|
|
2022-05-18 16:00:11 -04:00
|
|
|
|
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
|
2021-06-27 13:27:36 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn with_allow() {
|
|
|
|
|
for permission in &util::PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
2022-05-18 16:00:11 -04:00
|
|
|
|
.arg("--unstable")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(format!("--allow-{0}", permission))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/permission_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(format!("{0}Required", permission))
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-18 16:00:11 -04:00
|
|
|
|
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
|
2021-06-27 13:27:36 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn without_allow() {
|
|
|
|
|
for permission in &util::PERMISSION_VARIANTS {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
&format!(
|
|
|
|
|
"run --unstable run/permission_test.ts {0}Required",
|
|
|
|
|
permission
|
|
|
|
|
),
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_inside_project_dir() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(format!(
|
|
|
|
|
"--allow-{0}={1}",
|
|
|
|
|
permission,
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path()
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap()
|
2021-06-27 13:27:36 -04:00
|
|
|
|
))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(permission)
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_outside_test_dir() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
|
|
|
|
&format!(
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-{0}={1} run/complex_permissions_test.ts {0} {2}",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
permission,
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path()
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap(),
|
|
|
|
|
util::root_path()
|
|
|
|
|
.join("Cargo.toml")
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap(),
|
|
|
|
|
),
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_inside_test_dir() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(format!(
|
|
|
|
|
"--allow-{0}={1}",
|
|
|
|
|
permission,
|
2021-08-11 10:20:47 -04:00
|
|
|
|
util::testdata_path()
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap()
|
|
|
|
|
))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(permission)
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_outside_test_and_js_dir() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
2021-08-11 10:20:47 -04:00
|
|
|
|
let test_dir = util::testdata_path()
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let js_dir = util::root_path()
|
|
|
|
|
.join("js")
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap();
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
|
|
|
|
&format!(
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-{0}={1},{2} run/complex_permissions_test.ts {0} {3}",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
permission,
|
|
|
|
|
test_dir,
|
|
|
|
|
js_dir,
|
|
|
|
|
util::root_path()
|
|
|
|
|
.join("Cargo.toml")
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap(),
|
|
|
|
|
),
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_inside_test_and_js_dir() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
2021-08-11 10:20:47 -04:00
|
|
|
|
let test_dir = util::testdata_path()
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let js_dir = util::root_path()
|
|
|
|
|
.join("js")
|
|
|
|
|
.into_os_string()
|
|
|
|
|
.into_string()
|
|
|
|
|
.unwrap();
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(format!("--allow-{0}={1},{2}", permission, test_dir, js_dir))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(permission)
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_relative() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(format!("--allow-{0}=.", permission))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(permission)
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn rw_no_prefix() {
|
|
|
|
|
const PERMISSION_VARIANTS: [&str; 2] = ["read", "write"];
|
|
|
|
|
for permission in &PERMISSION_VARIANTS {
|
|
|
|
|
let status = util::deno_cmd()
|
2021-08-11 10:20:47 -04:00
|
|
|
|
.current_dir(&util::testdata_path())
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(format!("--allow-{0}=tls/../", permission))
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.arg(permission)
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/complex_permissions_test.ts")
|
2021-06-27 13:27:36 -04:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_fetch_allow_localhost_4545() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost:4545 run/complex_permissions_test.ts netFetch http://localhost:4545/",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_fetch_allow_deno_land() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=deno.land run/complex_permissions_test.ts netFetch http://localhost:4545/",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_fetch_localhost_4545_fail() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost:4545 run/complex_permissions_test.ts netFetch http://localhost:4546/",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_fetch_localhost() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost run/complex_permissions_test.ts netFetch http://localhost:4545/ http://localhost:4546/ http://localhost:4547/",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_connect_allow_localhost_ip_4555() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=127.0.0.1:4545 run/complex_permissions_test.ts netConnect 127.0.0.1:4545",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_connect_allow_deno_land() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=deno.land run/complex_permissions_test.ts netConnect 127.0.0.1:4546",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_connect_allow_localhost_ip_4545_fail() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=127.0.0.1:4545 run/complex_permissions_test.ts netConnect 127.0.0.1:4546",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_connect_allow_localhost_ip() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=127.0.0.1 run/complex_permissions_test.ts netConnect 127.0.0.1:4545 127.0.0.1:4546 127.0.0.1:4547",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_listen_allow_localhost_4555() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost:4558 run/complex_permissions_test.ts netListen localhost:4558",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_listen_allow_deno_land() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=deno.land run/complex_permissions_test.ts netListen localhost:4545",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_listen_allow_localhost_4555_fail() {
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
false,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost:4555 run/complex_permissions_test.ts netListen localhost:4556",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn net_listen_allow_localhost() {
|
|
|
|
|
// Port 4600 is chosen to not colide with those used by
|
|
|
|
|
// target/debug/test_server
|
|
|
|
|
let (_, err) = util::run_and_collect_output(
|
|
|
|
|
true,
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --allow-net=localhost run/complex_permissions_test.ts netListen localhost:4600",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
false,
|
|
|
|
|
);
|
|
|
|
|
assert!(!err.contains(util::PERMISSION_DENIED_PATTERN));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn _061_permissions_request() {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let args = "run --quiet run/061_permissions_request.ts";
|
2021-09-09 08:38:47 -04:00
|
|
|
|
use util::PtyData::*;
|
|
|
|
|
util::test_pty2(args, vec![
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests read access to \"foo\". Run again with --allow-read to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)] "),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("y\n"),
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests read access to \"bar\". Run again with --allow-read to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)]"),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("n\n"),
|
|
|
|
|
Output("granted\r\n"),
|
|
|
|
|
Output("prompt\r\n"),
|
|
|
|
|
Output("denied\r\n"),
|
|
|
|
|
]);
|
2021-06-27 13:27:36 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn _062_permissions_request_global() {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let args = "run --quiet run/062_permissions_request_global.ts";
|
2021-09-09 08:38:47 -04:00
|
|
|
|
use util::PtyData::*;
|
|
|
|
|
util::test_pty2(args, vec![
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests read access. Run again with --allow-read to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)] "),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("y\n"),
|
|
|
|
|
Output("PermissionStatus { state: \"granted\", onchange: null }\r\n"),
|
|
|
|
|
Output("PermissionStatus { state: \"granted\", onchange: null }\r\n"),
|
|
|
|
|
Output("PermissionStatus { state: \"granted\", onchange: null }\r\n"),
|
|
|
|
|
]);
|
2021-06-27 13:27:36 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
itest!(_063_permissions_revoke {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read=foo,bar run/063_permissions_revoke.ts",
|
|
|
|
|
output: "run/063_permissions_revoke.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(_064_permissions_revoke_global {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --allow-read=foo,bar run/064_permissions_revoke_global.ts",
|
|
|
|
|
output: "run/064_permissions_revoke_global.ts.out",
|
2021-06-27 13:27:36 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn _066_prompt() {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
let args = "run --quiet --unstable run/066_prompt.ts";
|
2021-09-09 08:38:47 -04:00
|
|
|
|
use util::PtyData::*;
|
|
|
|
|
util::test_pty2(
|
|
|
|
|
args,
|
|
|
|
|
vec![
|
|
|
|
|
Output("What is your name? [Jane Doe] "),
|
|
|
|
|
Input("John Doe\n"),
|
|
|
|
|
Output("Your name is John Doe.\r\n"),
|
|
|
|
|
Output("What is your name? [Jane Doe] "),
|
|
|
|
|
Input("\n"),
|
|
|
|
|
Output("Your name is Jane Doe.\r\n"),
|
|
|
|
|
Output("Prompt "),
|
|
|
|
|
Input("foo\n"),
|
|
|
|
|
Output("Your input is foo.\r\n"),
|
|
|
|
|
Output("Question 0 [y/N] "),
|
|
|
|
|
Input("Y\n"),
|
|
|
|
|
Output("Your answer is true\r\n"),
|
|
|
|
|
Output("Question 1 [y/N] "),
|
|
|
|
|
Input("N\n"),
|
|
|
|
|
Output("Your answer is false\r\n"),
|
|
|
|
|
Output("Question 2 [y/N] "),
|
|
|
|
|
Input("yes\n"),
|
|
|
|
|
Output("Your answer is false\r\n"),
|
|
|
|
|
Output("Confirm [y/N] "),
|
|
|
|
|
Input("\n"),
|
|
|
|
|
Output("Your answer is false\r\n"),
|
|
|
|
|
Output("What is Windows EOL? "),
|
|
|
|
|
Input("windows\n"),
|
|
|
|
|
Output("Your answer is \"windows\"\r\n"),
|
|
|
|
|
Output("Hi [Enter] "),
|
|
|
|
|
Input("\n"),
|
|
|
|
|
Output("Alert [Enter] "),
|
|
|
|
|
Input("\n"),
|
|
|
|
|
Output("The end of test\r\n"),
|
|
|
|
|
Output("What is EOF? "),
|
|
|
|
|
Input("\n"),
|
|
|
|
|
Output("Your answer is null\r\n"),
|
|
|
|
|
],
|
|
|
|
|
);
|
2021-06-27 13:27:36 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_permissions_remote_remote {
|
|
|
|
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_remote_remote.ts",
|
|
|
|
|
output: "dynamic_import/permissions_remote_remote.ts.out",
|
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_permissions_data_remote {
|
|
|
|
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_data_remote.ts",
|
|
|
|
|
output: "dynamic_import/permissions_data_remote.ts.out",
|
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_permissions_blob_remote {
|
|
|
|
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_blob_remote.ts",
|
|
|
|
|
output: "dynamic_import/permissions_blob_remote.ts.out",
|
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_permissions_data_local {
|
|
|
|
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_data_local.ts",
|
|
|
|
|
output: "dynamic_import/permissions_data_local.ts.out",
|
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(dynamic_import_permissions_blob_local {
|
|
|
|
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_blob_local.ts",
|
|
|
|
|
output: "dynamic_import/permissions_blob_local.ts.out",
|
|
|
|
|
http_server: true,
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-07-22 06:28:46 -04:00
|
|
|
|
|
|
|
|
|
itest!(tls_starttls {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-net --allow-read --unstable --cert tls/RootCA.pem run/tls_starttls.js",
|
|
|
|
|
output: "run/tls.out",
|
2021-07-22 06:28:46 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(tls_connecttls {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --reload --allow-net --allow-read --cert tls/RootCA.pem run/tls_connecttls.js",
|
|
|
|
|
output: "run/tls.out",
|
2021-07-22 06:28:46 -04:00
|
|
|
|
});
|
2021-08-16 03:28:29 -04:00
|
|
|
|
|
|
|
|
|
itest!(byte_order_mark {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-check run/byte_order_mark.ts",
|
|
|
|
|
output: "run/byte_order_mark.out",
|
2021-08-16 03:28:29 -04:00
|
|
|
|
});
|
2021-09-06 16:59:20 -04:00
|
|
|
|
|
2021-09-09 08:38:47 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn issue9750() {
|
|
|
|
|
use util::PtyData::*;
|
|
|
|
|
util::test_pty2(
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --prompt run/issue9750.js",
|
2021-09-09 08:38:47 -04:00
|
|
|
|
vec![
|
|
|
|
|
Output("Enter 'yy':\r\n"),
|
|
|
|
|
Input("yy\n"),
|
2022-02-16 18:14:46 -05:00
|
|
|
|
Output("⚠️ ️Deno requests env access. Run again with --allow-env to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)]"),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("n\n"),
|
2022-03-21 09:30:43 -04:00
|
|
|
|
Output("⚠️ ️Deno requests env access to \"SECRET\". Run again with --allow-env to bypass this prompt.\r\n Allow? [y/n (y = yes allow, n = no deny)]"),
|
2021-09-09 08:38:47 -04:00
|
|
|
|
Input("n\n"),
|
|
|
|
|
Output("error: Uncaught (in promise) PermissionDenied: Requires env access to \"SECRET\", run again with the --allow-env flag\r\n"),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-06 16:59:20 -04:00
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/11451.
|
|
|
|
|
itest!(dom_exception_formatting {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/dom_exception_formatting.ts",
|
|
|
|
|
output: "run/dom_exception_formatting.ts.out",
|
2021-09-06 16:59:20 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2021-09-18 09:40:04 -04:00
|
|
|
|
|
|
|
|
|
itest!(long_data_url_formatting {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/long_data_url_formatting.ts",
|
|
|
|
|
output: "run/long_data_url_formatting.ts.out",
|
2021-09-18 09:40:04 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2021-10-18 12:05:36 -04:00
|
|
|
|
|
2021-10-19 12:26:45 -04:00
|
|
|
|
itest!(eval_context_throw_dom_exception {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/eval_context_throw_dom_exception.js",
|
|
|
|
|
output: "run/eval_context_throw_dom_exception.js.out",
|
2021-10-19 12:26:45 -04:00
|
|
|
|
});
|
2021-11-03 09:27:36 -04:00
|
|
|
|
|
2021-11-15 18:25:52 -05:00
|
|
|
|
/// Regression test for https://github.com/denoland/deno/issues/12740.
|
|
|
|
|
#[test]
|
|
|
|
|
fn issue12740() {
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mod_dir = TempDir::new();
|
2021-11-15 18:25:52 -05:00
|
|
|
|
let mod1_path = mod_dir.path().join("mod1.ts");
|
|
|
|
|
let mod2_path = mod_dir.path().join("mod2.ts");
|
|
|
|
|
let mut deno_cmd = util::deno_cmd();
|
|
|
|
|
std::fs::write(&mod1_path, "").unwrap();
|
|
|
|
|
let status = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(&mod1_path)
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::null())
|
|
|
|
|
.stdout(Stdio::null())
|
2021-11-15 18:25:52 -05:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
std::fs::write(&mod1_path, "export { foo } from \"./mod2.ts\";").unwrap();
|
|
|
|
|
std::fs::write(&mod2_path, "(").unwrap();
|
|
|
|
|
let status = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(&mod1_path)
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::null())
|
|
|
|
|
.stdout(Stdio::null())
|
2021-11-15 18:25:52 -05:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!status.success());
|
|
|
|
|
}
|
2021-11-23 16:20:30 -05:00
|
|
|
|
|
|
|
|
|
/// Regression test for https://github.com/denoland/deno/issues/12807.
|
|
|
|
|
#[test]
|
|
|
|
|
fn issue12807() {
|
2022-04-01 11:15:37 -04:00
|
|
|
|
let mod_dir = TempDir::new();
|
2021-11-23 16:20:30 -05:00
|
|
|
|
let mod1_path = mod_dir.path().join("mod1.ts");
|
|
|
|
|
let mod2_path = mod_dir.path().join("mod2.ts");
|
|
|
|
|
let mut deno_cmd = util::deno_cmd();
|
|
|
|
|
// With a fresh `DENO_DIR`, run a module with a dependency and a type error.
|
|
|
|
|
std::fs::write(&mod1_path, "import './mod2.ts'; Deno.exit('0');").unwrap();
|
|
|
|
|
std::fs::write(&mod2_path, "console.log('Hello, world!');").unwrap();
|
|
|
|
|
let status = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-06-13 17:13:16 -04:00
|
|
|
|
.arg("--check")
|
2021-11-23 16:20:30 -05:00
|
|
|
|
.arg(&mod1_path)
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::null())
|
|
|
|
|
.stdout(Stdio::null())
|
2021-11-23 16:20:30 -05:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!status.success());
|
|
|
|
|
// Fix the type error and run again.
|
|
|
|
|
std::fs::write(&mod1_path, "import './mod2.ts'; Deno.exit(0);").unwrap();
|
|
|
|
|
let status = deno_cmd
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
2022-06-13 17:13:16 -04:00
|
|
|
|
.arg("--check")
|
2021-11-23 16:20:30 -05:00
|
|
|
|
.arg(&mod1_path)
|
2022-07-12 18:58:39 -04:00
|
|
|
|
.stderr(Stdio::null())
|
|
|
|
|
.stdout(Stdio::null())
|
2021-11-23 16:20:30 -05:00
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
2021-12-15 13:22:36 -05:00
|
|
|
|
|
2022-02-02 14:48:54 -05:00
|
|
|
|
itest!(issue_13562 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/issue13562.ts",
|
|
|
|
|
output: "run/issue13562.ts.out",
|
2022-02-02 14:48:54 -05:00
|
|
|
|
});
|
|
|
|
|
|
2021-12-15 13:22:36 -05:00
|
|
|
|
itest!(import_assertions_static_import {
|
|
|
|
|
args: "run --allow-read import_assertions/static_import.ts",
|
|
|
|
|
output: "import_assertions/static_import.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_assertions_static_export {
|
|
|
|
|
args: "run --allow-read import_assertions/static_export.ts",
|
|
|
|
|
output: "import_assertions/static_export.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_assertions_static_error {
|
|
|
|
|
args: "run --allow-read import_assertions/static_error.ts",
|
|
|
|
|
output: "import_assertions/static_error.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_assertions_dynamic_import {
|
|
|
|
|
args: "run --allow-read import_assertions/dynamic_import.ts",
|
|
|
|
|
output: "import_assertions/dynamic_import.out",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_assertions_dynamic_error {
|
|
|
|
|
args: "run --allow-read import_assertions/dynamic_error.ts",
|
|
|
|
|
output: "import_assertions/dynamic_error.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(import_assertions_type_check {
|
2022-06-13 17:13:16 -04:00
|
|
|
|
args: "run --allow-read --check import_assertions/type_check.ts",
|
2021-12-15 13:22:36 -05:00
|
|
|
|
output: "import_assertions/type_check.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-01-17 17:23:49 -05:00
|
|
|
|
|
2022-01-17 18:13:14 -05:00
|
|
|
|
itest!(delete_window {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/delete_window.js",
|
2022-01-17 18:13:14 -05:00
|
|
|
|
output_str: Some("true\n"),
|
|
|
|
|
});
|
|
|
|
|
|
2022-01-17 17:23:49 -05:00
|
|
|
|
itest!(colors_without_global_this {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/colors_without_globalThis.js",
|
2022-01-17 17:23:49 -05:00
|
|
|
|
output_str: Some("true\n"),
|
|
|
|
|
});
|
2022-02-25 00:39:18 -05:00
|
|
|
|
|
|
|
|
|
itest!(config_auto_discovered_for_local_script {
|
|
|
|
|
args: "run --quiet run/with_config/frontend_work.ts",
|
|
|
|
|
output_str: Some("ok\n"),
|
|
|
|
|
});
|
|
|
|
|
|
2022-05-13 11:40:50 -04:00
|
|
|
|
itest!(no_config_auto_discovery_for_local_script {
|
2022-06-13 17:13:16 -04:00
|
|
|
|
args: "run --quiet --no-config --check run/with_config/frontend_work.ts",
|
2022-05-13 11:40:50 -04:00
|
|
|
|
output: "run/with_config/no_auto_discovery.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-02-25 00:39:18 -05:00
|
|
|
|
itest!(config_not_auto_discovered_for_remote_script {
|
|
|
|
|
args: "run --quiet http://127.0.0.1:4545/run/with_config/server_side_work.ts",
|
|
|
|
|
output_str: Some("ok\n"),
|
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
2022-03-22 06:33:29 -04:00
|
|
|
|
|
|
|
|
|
itest!(wasm_streaming_panic_test {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/wasm_streaming_panic_test.js",
|
|
|
|
|
output: "run/wasm_streaming_panic_test.js.out",
|
2022-03-22 06:33:29 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-03-22 13:08:33 -04:00
|
|
|
|
|
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/13897.
|
|
|
|
|
itest!(fetch_async_error_stack {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet -A run/fetch_async_error_stack.ts",
|
|
|
|
|
output: "run/fetch_async_error_stack.ts.out",
|
2022-03-22 13:08:33 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-03-25 07:29:54 -04:00
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_1 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_1.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_1.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_2.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_2.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_3 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_3.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_3.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_4 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_4.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_4.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_5 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_5.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_5.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_6 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_6.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_6.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_7 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_7.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_7.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_8 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_8.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_8.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_9 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_9.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_9.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_10 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_10.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_10.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_11 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_11.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_11.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_12 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_12.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_12.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_13 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_13.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_13.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_14 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_14.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_14.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(unstable_ffi_15 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/ffi/unstable_ffi_15.js",
|
|
|
|
|
output: "run/ffi/unstable_ffi_15.js.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
exit_code: 70,
|
2022-04-10 19:12:51 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(future_check2 {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --check run/future_check.ts",
|
|
|
|
|
output: "run/future_check2.out",
|
2022-03-25 07:29:54 -04:00
|
|
|
|
});
|
2022-04-13 05:50:57 -04:00
|
|
|
|
|
|
|
|
|
itest!(event_listener_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/event_listener_error.ts",
|
|
|
|
|
output: "run/event_listener_error.ts.out",
|
2022-04-13 05:50:57 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(event_listener_error_handled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/event_listener_error_handled.ts",
|
|
|
|
|
output: "run/event_listener_error_handled.ts.out",
|
2022-04-13 05:50:57 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446
|
|
|
|
|
itest!(event_listener_error_immediate_exit {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/event_listener_error_immediate_exit.ts",
|
|
|
|
|
output: "run/event_listener_error_immediate_exit.ts.out",
|
2022-04-13 05:50:57 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-05-10 05:26:57 -04:00
|
|
|
|
// https://github.com/denoland/deno/pull/14159#issuecomment-1092285446
|
|
|
|
|
itest!(event_listener_error_immediate_exit_worker {
|
|
|
|
|
args:
|
2022-09-19 10:32:21 -04:00
|
|
|
|
"run --quiet --unstable -A run/event_listener_error_immediate_exit_worker.ts",
|
|
|
|
|
output: "run/event_listener_error_immediate_exit_worker.ts.out",
|
2022-05-10 05:26:57 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-04-13 05:50:57 -04:00
|
|
|
|
itest!(set_timeout_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/set_timeout_error.ts",
|
|
|
|
|
output: "run/set_timeout_error.ts.out",
|
2022-04-13 05:50:57 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(set_timeout_error_handled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/set_timeout_error_handled.ts",
|
|
|
|
|
output: "run/set_timeout_error_handled.ts.out",
|
2022-04-13 05:50:57 -04:00
|
|
|
|
});
|
2022-04-16 10:12:26 -04:00
|
|
|
|
|
|
|
|
|
itest!(aggregate_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/aggregate_error.ts",
|
|
|
|
|
output: "run/aggregate_error.out",
|
2022-04-16 10:12:26 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(complex_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/complex_error.ts",
|
|
|
|
|
output: "run/complex_error.ts.out",
|
2022-04-16 10:12:26 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-04-18 10:52:26 -04:00
|
|
|
|
|
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/12143.
|
|
|
|
|
itest!(js_root_with_ts_check {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --check run/js_root_with_ts_check.js",
|
|
|
|
|
output: "run/js_root_with_ts_check.js.out",
|
2022-04-18 10:52:26 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-04-18 15:08:30 -04:00
|
|
|
|
|
2022-07-12 18:58:39 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn check_local_then_remote() {
|
|
|
|
|
let _http_guard = util::http_server();
|
|
|
|
|
let deno_dir = util::new_deno_dir();
|
|
|
|
|
let output = util::deno_cmd_with_deno_dir(&deno_dir)
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg("run/remote_type_error/main.ts")
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let output = util::deno_cmd_with_deno_dir(&deno_dir)
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check=all")
|
|
|
|
|
.arg("run/remote_type_error/main.ts")
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.stderr(Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
let stderr = std::str::from_utf8(&output.stderr).unwrap();
|
|
|
|
|
assert_contains!(stderr, "Type 'string' is not assignable to type 'number'.");
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-14 10:40:47 -04:00
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/15163
|
|
|
|
|
itest!(check_js_points_to_ts {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --check --config run/checkjs.tsconfig.json run/check_js_points_to_ts/test.js",
|
2022-07-14 10:40:47 -04:00
|
|
|
|
output: "run/check_js_points_to_ts/test.js.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-04-18 15:08:30 -04:00
|
|
|
|
itest!(no_prompt_flag {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --unstable --no-prompt run/no_prompt.ts",
|
2022-04-18 15:08:30 -04:00
|
|
|
|
output_str: Some(""),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn deno_no_prompt_environment_variable() {
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--unstable")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
.arg("run/no_prompt.ts")
|
2022-04-18 15:08:30 -04:00
|
|
|
|
.env("DENO_NO_PROMPT", "1")
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
}
|
2022-04-19 04:59:51 -04:00
|
|
|
|
|
|
|
|
|
itest!(report_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/report_error.ts",
|
|
|
|
|
output: "run/report_error.ts.out",
|
2022-04-19 04:59:51 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(report_error_handled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/report_error_handled.ts",
|
|
|
|
|
output: "run/report_error_handled.ts.out",
|
2022-04-19 04:59:51 -04:00
|
|
|
|
});
|
2022-04-24 11:21:22 -04:00
|
|
|
|
|
2022-08-21 07:57:10 -04:00
|
|
|
|
// Regression test for https://github.com/denoland/deno/issues/15513.
|
|
|
|
|
itest!(report_error_end_of_program {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/report_error_end_of_program.ts",
|
|
|
|
|
output: "run/report_error_end_of_program.ts.out",
|
2022-08-21 07:57:10 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
2022-08-21 14:16:42 -04:00
|
|
|
|
itest!(queue_microtask_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/queue_microtask_error.ts",
|
|
|
|
|
output: "run/queue_microtask_error.ts.out",
|
2022-08-21 14:16:42 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(queue_microtask_error_handled {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/queue_microtask_error_handled.ts",
|
|
|
|
|
output: "run/queue_microtask_error_handled.ts.out",
|
2022-08-21 14:16:42 -04:00
|
|
|
|
});
|
|
|
|
|
|
2022-04-24 11:21:22 -04:00
|
|
|
|
itest!(spawn_stdout_inherit {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet --unstable -A run/spawn_stdout_inherit.ts",
|
|
|
|
|
output: "run/spawn_stdout_inherit.ts.out",
|
2022-04-24 11:21:22 -04:00
|
|
|
|
});
|
2022-05-08 17:03:00 -04:00
|
|
|
|
|
|
|
|
|
itest!(error_name_non_string {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet run/error_name_non_string.js",
|
|
|
|
|
output: "run/error_name_non_string.js.out",
|
2022-05-08 17:03:00 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-06-14 19:25:58 -04:00
|
|
|
|
|
|
|
|
|
itest!(custom_inspect_url {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/custom_inspect_url.js",
|
|
|
|
|
output: "run/custom_inspect_url.js.out",
|
2022-06-14 19:25:58 -04:00
|
|
|
|
});
|
2022-06-20 11:20:52 -04:00
|
|
|
|
|
2022-08-10 17:33:42 -04:00
|
|
|
|
itest!(config_json_import {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --quiet -c jsx/deno-jsx.json run/config_json_import.ts",
|
|
|
|
|
output: "run/config_json_import.ts.out",
|
2022-08-10 17:33:42 -04:00
|
|
|
|
http_server: true,
|
|
|
|
|
});
|
|
|
|
|
|
2022-06-20 11:20:52 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn running_declaration_files() {
|
|
|
|
|
let temp_dir = TempDir::new();
|
|
|
|
|
let files = vec!["file.d.ts", "file.d.cts", "file.d.mts"];
|
|
|
|
|
|
|
|
|
|
for file in files {
|
|
|
|
|
temp_dir.write(file, "");
|
|
|
|
|
let mut deno_cmd = util::deno_cmd_with_deno_dir(&temp_dir);
|
|
|
|
|
let output = deno_cmd
|
|
|
|
|
.current_dir(temp_dir.path())
|
|
|
|
|
.args(["run", file])
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-24 06:00:53 -04:00
|
|
|
|
|
|
|
|
|
itest!(test_and_bench_are_noops_in_run {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/test_and_bench_in_run.js",
|
2022-06-24 06:00:53 -04:00
|
|
|
|
output_str: Some(""),
|
|
|
|
|
});
|
2022-06-25 14:56:29 -04:00
|
|
|
|
|
|
|
|
|
itest!(followup_dyn_import_resolved {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --unstable --allow-read run/followup_dyn_import_resolves/main.ts",
|
|
|
|
|
output: "run/followup_dyn_import_resolves/main.ts.out",
|
2022-06-25 14:56:29 -04:00
|
|
|
|
});
|
2022-07-20 14:28:19 -04:00
|
|
|
|
|
|
|
|
|
itest!(unhandled_rejection {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --check run/unhandled_rejection.ts",
|
|
|
|
|
output: "run/unhandled_rejection.ts.out",
|
2022-07-20 14:28:19 -04:00
|
|
|
|
});
|
2022-07-22 18:40:42 -04:00
|
|
|
|
|
|
|
|
|
itest!(unhandled_rejection_sync_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --check run/unhandled_rejection_sync_error.ts",
|
|
|
|
|
output: "run/unhandled_rejection_sync_error.ts.out",
|
2022-07-22 18:40:42 -04:00
|
|
|
|
});
|
2022-07-30 10:09:42 -04:00
|
|
|
|
|
|
|
|
|
itest!(nested_error {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run run/nested_error.ts",
|
|
|
|
|
output: "run/nested_error.ts.out",
|
2022-07-30 10:09:42 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-09-14 11:59:20 -04:00
|
|
|
|
|
|
|
|
|
itest!(node_env_var_allowlist_with_unstable_flag {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --unstable --no-prompt run/node_env_var_allowlist.ts",
|
|
|
|
|
output: "run/node_env_var_allowlist_with_unstable_flag.ts.out",
|
2022-09-14 11:59:20 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(node_env_var_allowlist_without_unstable_flag {
|
2022-09-19 10:32:21 -04:00
|
|
|
|
args: "run --no-prompt run/node_env_var_allowlist.ts",
|
|
|
|
|
output: "run/node_env_var_allowlist_without_unstable_flag.ts.out",
|
2022-09-14 11:59:20 -04:00
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
2022-09-19 10:32:21 -04:00
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn cache_test() {
|
|
|
|
|
let _g = util::http_server();
|
|
|
|
|
let deno_dir = TempDir::new();
|
|
|
|
|
let module_url =
|
|
|
|
|
url::Url::parse("http://localhost:4545/run/006_url_imports.ts").unwrap();
|
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("cache")
|
|
|
|
|
.arg("--check=all")
|
|
|
|
|
.arg("-L")
|
|
|
|
|
.arg("debug")
|
|
|
|
|
.arg(module_url.to_string())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
|
|
|
|
|
let prg = util::deno_exe_path();
|
|
|
|
|
let output = Command::new(&prg)
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.env("HTTP_PROXY", "http://nil")
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(module_url.to_string())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
|
|
|
|
|
let str_output = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
|
|
|
|
|
let module_output_path =
|
|
|
|
|
util::testdata_path().join("run/006_url_imports.ts.out");
|
|
|
|
|
let mut module_output = String::new();
|
|
|
|
|
let mut module_output_file = std::fs::File::open(module_output_path).unwrap();
|
|
|
|
|
module_output_file
|
|
|
|
|
.read_to_string(&mut module_output)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert_eq!(module_output, str_output);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn cache_invalidation_test() {
|
|
|
|
|
let deno_dir = TempDir::new();
|
|
|
|
|
let fixture_path = deno_dir.path().join("fixture.ts");
|
|
|
|
|
{
|
|
|
|
|
let mut file = std::fs::File::create(fixture_path.clone())
|
|
|
|
|
.expect("could not create fixture");
|
|
|
|
|
file
|
|
|
|
|
.write_all(b"console.log(\"42\");")
|
|
|
|
|
.expect("could not write fixture");
|
|
|
|
|
}
|
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(fixture_path.to_str().unwrap())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let actual = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
assert_eq!(actual, "42\n");
|
|
|
|
|
{
|
|
|
|
|
let mut file = std::fs::File::create(fixture_path.clone())
|
|
|
|
|
.expect("could not create fixture");
|
|
|
|
|
file
|
|
|
|
|
.write_all(b"console.log(\"43\");")
|
|
|
|
|
.expect("could not write fixture");
|
|
|
|
|
}
|
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg(fixture_path.to_str().unwrap())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let actual = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
assert_eq!(actual, "43\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn cache_invalidation_test_no_check() {
|
|
|
|
|
let deno_dir = TempDir::new();
|
|
|
|
|
let fixture_path = deno_dir.path().join("fixture.ts");
|
|
|
|
|
{
|
|
|
|
|
let mut file = std::fs::File::create(fixture_path.clone())
|
|
|
|
|
.expect("could not create fixture");
|
|
|
|
|
file
|
|
|
|
|
.write_all(b"console.log(\"42\");")
|
|
|
|
|
.expect("could not write fixture");
|
|
|
|
|
}
|
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--no-check")
|
|
|
|
|
.arg(fixture_path.to_str().unwrap())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let actual = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
assert_eq!(actual, "42\n");
|
|
|
|
|
{
|
|
|
|
|
let mut file = std::fs::File::create(fixture_path.clone())
|
|
|
|
|
.expect("could not create fixture");
|
|
|
|
|
file
|
|
|
|
|
.write_all(b"console.log(\"43\");")
|
|
|
|
|
.expect("could not write fixture");
|
|
|
|
|
}
|
|
|
|
|
let output = Command::new(util::deno_exe_path())
|
|
|
|
|
.env("DENO_DIR", deno_dir.path())
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--no-check")
|
|
|
|
|
.arg(fixture_path.to_str().unwrap())
|
|
|
|
|
.output()
|
|
|
|
|
.expect("Failed to spawn script");
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
let actual = std::str::from_utf8(&output.stdout).unwrap();
|
|
|
|
|
assert_eq!(actual, "43\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn ts_dependency_recompilation() {
|
|
|
|
|
let t = TempDir::new();
|
|
|
|
|
let ats = t.path().join("a.ts");
|
|
|
|
|
|
|
|
|
|
std::fs::write(
|
|
|
|
|
&ats,
|
|
|
|
|
"
|
|
|
|
|
import { foo } from \"./b.ts\";
|
|
|
|
|
|
|
|
|
|
function print(str: string): void {
|
|
|
|
|
console.log(str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
print(foo);",
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let bts = t.path().join("b.ts");
|
|
|
|
|
std::fs::write(
|
|
|
|
|
&bts,
|
|
|
|
|
"
|
|
|
|
|
export const foo = \"foo\";",
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg(&ats)
|
|
|
|
|
.output()
|
|
|
|
|
.expect("failed to spawn script");
|
|
|
|
|
|
|
|
|
|
let stdout_output = std::str::from_utf8(&output.stdout).unwrap().trim();
|
|
|
|
|
let stderr_output = std::str::from_utf8(&output.stderr).unwrap().trim();
|
|
|
|
|
|
|
|
|
|
assert!(stdout_output.ends_with("foo"));
|
|
|
|
|
assert!(stderr_output.starts_with("Check"));
|
|
|
|
|
|
|
|
|
|
// Overwrite contents of b.ts and run again
|
|
|
|
|
std::fs::write(
|
|
|
|
|
&bts,
|
|
|
|
|
"
|
|
|
|
|
export const foo = 5;",
|
|
|
|
|
)
|
|
|
|
|
.expect("error writing file");
|
|
|
|
|
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg(&ats)
|
|
|
|
|
.output()
|
|
|
|
|
.expect("failed to spawn script");
|
|
|
|
|
|
|
|
|
|
let stdout_output = std::str::from_utf8(&output.stdout).unwrap().trim();
|
|
|
|
|
let stderr_output = std::str::from_utf8(&output.stderr).unwrap().trim();
|
|
|
|
|
|
|
|
|
|
// error: TS2345 [ERROR]: Argument of type '5' is not assignable to parameter of type 'string'.
|
|
|
|
|
assert!(stderr_output.contains("TS2345"));
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
assert!(stdout_output.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn basic_auth_tokens() {
|
|
|
|
|
let _g = util::http_server();
|
|
|
|
|
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::root_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("http://127.0.0.1:4554/run/001_hello.js")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
|
|
|
|
|
let stdout_str = std::str::from_utf8(&output.stdout).unwrap().trim();
|
|
|
|
|
assert!(stdout_str.is_empty());
|
|
|
|
|
|
|
|
|
|
let stderr_str = std::str::from_utf8(&output.stderr).unwrap().trim();
|
|
|
|
|
eprintln!("{}", stderr_str);
|
|
|
|
|
|
|
|
|
|
assert!(stderr_str
|
|
|
|
|
.contains("Module not found \"http://127.0.0.1:4554/run/001_hello.js\"."));
|
|
|
|
|
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::root_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("http://127.0.0.1:4554/run/001_hello.js")
|
|
|
|
|
.env("DENO_AUTH_TOKENS", "testuser123:testpassabc@127.0.0.1:4554")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let stderr_str = std::str::from_utf8(&output.stderr).unwrap().trim();
|
|
|
|
|
eprintln!("{}", stderr_str);
|
|
|
|
|
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
|
|
|
|
|
let stdout_str = std::str::from_utf8(&output.stdout).unwrap().trim();
|
|
|
|
|
assert_eq!(util::strip_ansi_codes(stdout_str), "Hello World");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
|
|
|
|
async fn test_resolve_dns() {
|
|
|
|
|
use std::net::SocketAddr;
|
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
use std::sync::Arc;
|
|
|
|
|
use std::time::Duration;
|
|
|
|
|
use tokio::net::TcpListener;
|
|
|
|
|
use tokio::net::UdpSocket;
|
|
|
|
|
use tokio::sync::oneshot;
|
|
|
|
|
use trust_dns_server::authority::Catalog;
|
|
|
|
|
use trust_dns_server::authority::ZoneType;
|
|
|
|
|
use trust_dns_server::proto::rr::Name;
|
|
|
|
|
use trust_dns_server::store::in_memory::InMemoryAuthority;
|
|
|
|
|
use trust_dns_server::ServerFuture;
|
|
|
|
|
|
|
|
|
|
const DNS_PORT: u16 = 4553;
|
|
|
|
|
|
|
|
|
|
// Setup DNS server for testing
|
|
|
|
|
async fn run_dns_server(tx: oneshot::Sender<()>) {
|
|
|
|
|
let zone_file = std::fs::read_to_string(
|
|
|
|
|
util::testdata_path().join("run/resolve_dns.zone.in"),
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
let lexer = Lexer::new(&zone_file);
|
|
|
|
|
let records = Parser::new().parse(
|
|
|
|
|
lexer,
|
|
|
|
|
Some(Name::from_str("example.com").unwrap()),
|
|
|
|
|
None,
|
|
|
|
|
);
|
|
|
|
|
if records.is_err() {
|
|
|
|
|
panic!("failed to parse: {:?}", records.err())
|
|
|
|
|
}
|
|
|
|
|
let (origin, records) = records.unwrap();
|
|
|
|
|
let authority = Box::new(Arc::new(
|
|
|
|
|
InMemoryAuthority::new(origin, records, ZoneType::Primary, false)
|
|
|
|
|
.unwrap(),
|
|
|
|
|
));
|
|
|
|
|
let mut catalog: Catalog = Catalog::new();
|
|
|
|
|
catalog.upsert(Name::root().into(), authority);
|
|
|
|
|
|
|
|
|
|
let mut server_fut = ServerFuture::new(catalog);
|
|
|
|
|
let socket_addr = SocketAddr::from(([127, 0, 0, 1], DNS_PORT));
|
|
|
|
|
let tcp_listener = TcpListener::bind(socket_addr).await.unwrap();
|
|
|
|
|
let udp_socket = UdpSocket::bind(socket_addr).await.unwrap();
|
|
|
|
|
server_fut.register_socket(udp_socket);
|
|
|
|
|
server_fut.register_listener(tcp_listener, Duration::from_secs(2));
|
|
|
|
|
|
|
|
|
|
// Notifies that the DNS server is ready
|
|
|
|
|
tx.send(()).unwrap();
|
|
|
|
|
|
|
|
|
|
server_fut.block_until_done().await.unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let (ready_tx, ready_rx) = oneshot::channel();
|
|
|
|
|
let dns_server_fut = run_dns_server(ready_tx);
|
|
|
|
|
let handle = tokio::spawn(dns_server_fut);
|
|
|
|
|
|
|
|
|
|
// Waits for the DNS server to be ready
|
|
|
|
|
ready_rx.await.unwrap();
|
|
|
|
|
|
|
|
|
|
// Pass: `--allow-net`
|
|
|
|
|
{
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("run/resolve_dns.ts")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let err = String::from_utf8_lossy(&output.stderr);
|
|
|
|
|
let out = String::from_utf8_lossy(&output.stdout);
|
|
|
|
|
println!("{}", err);
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert!(err.starts_with("Check file"));
|
|
|
|
|
|
|
|
|
|
let expected = std::fs::read_to_string(
|
|
|
|
|
util::testdata_path().join("run/resolve_dns.ts.out"),
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert_eq!(expected, out);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Pass: `--allow-net=127.0.0.1:4553`
|
|
|
|
|
{
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg("--allow-net=127.0.0.1:4553")
|
|
|
|
|
.arg("run/resolve_dns.ts")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let err = String::from_utf8_lossy(&output.stderr);
|
|
|
|
|
let out = String::from_utf8_lossy(&output.stdout);
|
|
|
|
|
assert!(output.status.success());
|
|
|
|
|
assert!(err.starts_with("Check file"));
|
|
|
|
|
|
|
|
|
|
let expected = std::fs::read_to_string(
|
|
|
|
|
util::testdata_path().join("run/resolve_dns.ts.out"),
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert_eq!(expected, out);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Permission error: `--allow-net=deno.land`
|
|
|
|
|
{
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg("--allow-net=deno.land")
|
|
|
|
|
.arg("run/resolve_dns.ts")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let err = String::from_utf8_lossy(&output.stderr);
|
|
|
|
|
let out = String::from_utf8_lossy(&output.stdout);
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
assert!(err.starts_with("Check file"));
|
|
|
|
|
assert!(err.contains(r#"error: Uncaught PermissionDenied: Requires net access to "127.0.0.1:4553""#));
|
|
|
|
|
assert!(out.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Permission error: no permission specified
|
|
|
|
|
{
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.env("NO_COLOR", "1")
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--check")
|
|
|
|
|
.arg("run/resolve_dns.ts")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let err = String::from_utf8_lossy(&output.stderr);
|
|
|
|
|
let out = String::from_utf8_lossy(&output.stdout);
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
assert!(err.starts_with("Check file"));
|
|
|
|
|
assert!(err.contains(r#"error: Uncaught PermissionDenied: Requires net access to "127.0.0.1:4553""#));
|
|
|
|
|
assert!(out.is_empty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handle.abort();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tokio::test]
|
|
|
|
|
async fn http2_request_url() {
|
|
|
|
|
// TLS streams require the presence of an ambient local task set to gracefully
|
|
|
|
|
// close dropped connections in the background.
|
|
|
|
|
LocalSet::new()
|
|
|
|
|
.run_until(async {
|
|
|
|
|
let mut child = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--quiet")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--allow-read")
|
|
|
|
|
.arg("./run/http2_request_url.ts")
|
|
|
|
|
.arg("4506")
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let stdout = child.stdout.as_mut().unwrap();
|
|
|
|
|
let mut buffer = [0; 5];
|
|
|
|
|
let read = stdout.read(&mut buffer).unwrap();
|
|
|
|
|
assert_eq!(read, 5);
|
|
|
|
|
let msg = std::str::from_utf8(&buffer).unwrap();
|
|
|
|
|
assert_eq!(msg, "READY");
|
|
|
|
|
|
|
|
|
|
let cert = reqwest::Certificate::from_pem(include_bytes!(
|
|
|
|
|
"../testdata/tls/RootCA.crt"
|
|
|
|
|
))
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let client = reqwest::Client::builder()
|
|
|
|
|
.add_root_certificate(cert)
|
|
|
|
|
.http2_prior_knowledge()
|
|
|
|
|
.build()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let res = client.get("http://127.0.0.1:4506").send().await.unwrap();
|
|
|
|
|
assert_eq!(200, res.status());
|
|
|
|
|
|
|
|
|
|
let body = res.text().await.unwrap();
|
|
|
|
|
assert_eq!(body, "http://127.0.0.1:4506/");
|
|
|
|
|
|
|
|
|
|
child.kill().unwrap();
|
|
|
|
|
child.wait().unwrap();
|
|
|
|
|
})
|
|
|
|
|
.await;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(windows))]
|
|
|
|
|
#[test]
|
|
|
|
|
fn set_raw_should_not_panic_on_no_tty() {
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.arg("eval")
|
|
|
|
|
.arg("--unstable")
|
2022-09-28 09:03:56 -04:00
|
|
|
|
.arg("Deno.stdin.setRaw(true)")
|
2022-09-19 10:32:21 -04:00
|
|
|
|
// stdin set to piped so it certainly does not refer to TTY
|
|
|
|
|
.stdin(std::process::Stdio::piped())
|
|
|
|
|
// stderr is piped so we can capture output.
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
let stderr = std::str::from_utf8(&output.stderr).unwrap().trim();
|
|
|
|
|
assert!(stderr.contains("BadResource"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn timeout_clear() {
|
|
|
|
|
// https://github.com/denoland/deno/issues/7599
|
|
|
|
|
|
|
|
|
|
use std::time::Duration;
|
|
|
|
|
use std::time::Instant;
|
|
|
|
|
|
|
|
|
|
let source_code = r#"
|
|
|
|
|
const handle = setTimeout(() => {
|
|
|
|
|
console.log("timeout finish");
|
|
|
|
|
}, 10000);
|
|
|
|
|
clearTimeout(handle);
|
|
|
|
|
console.log("finish");
|
|
|
|
|
"#;
|
|
|
|
|
|
|
|
|
|
let mut p = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("-")
|
|
|
|
|
.stdin(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap();
|
|
|
|
|
let stdin = p.stdin.as_mut().unwrap();
|
|
|
|
|
stdin.write_all(source_code.as_bytes()).unwrap();
|
|
|
|
|
let start = Instant::now();
|
|
|
|
|
let status = p.wait().unwrap();
|
|
|
|
|
let end = Instant::now();
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
// check that program did not run for 10 seconds
|
|
|
|
|
// for timeout to clear
|
|
|
|
|
assert!(end - start < Duration::new(10, 0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn broken_stdout() {
|
|
|
|
|
let (reader, writer) = os_pipe::pipe().unwrap();
|
|
|
|
|
// drop the reader to create a broken pipe
|
|
|
|
|
drop(reader);
|
|
|
|
|
|
|
|
|
|
let output = util::deno_cmd()
|
|
|
|
|
.current_dir(util::testdata_path())
|
|
|
|
|
.arg("eval")
|
|
|
|
|
.arg("console.log(3.14)")
|
|
|
|
|
.stdout(writer)
|
|
|
|
|
.stderr(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait_with_output()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(!output.status.success());
|
|
|
|
|
let stderr = std::str::from_utf8(output.stderr.as_ref()).unwrap().trim();
|
|
|
|
|
assert!(stderr.contains("Uncaught BrokenPipe"));
|
|
|
|
|
assert!(!stderr.contains("panic"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
itest!(error_cause {
|
|
|
|
|
args: "run run/error_cause.ts",
|
|
|
|
|
output: "run/error_cause.ts.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
itest!(error_cause_recursive {
|
|
|
|
|
args: "run run/error_cause_recursive.ts",
|
|
|
|
|
output: "run/error_cause_recursive.ts.out",
|
|
|
|
|
exit_code: 1,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn websocket() {
|
|
|
|
|
let _g = util::http_server();
|
|
|
|
|
|
|
|
|
|
let script = util::testdata_path().join("run/websocket_test.ts");
|
|
|
|
|
let root_ca = util::testdata_path().join("tls/RootCA.pem");
|
|
|
|
|
let status = util::deno_cmd()
|
|
|
|
|
.arg("test")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--cert")
|
|
|
|
|
.arg(root_ca)
|
|
|
|
|
.arg(script)
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-22 12:41:42 -04:00
|
|
|
|
#[ignore]
|
2022-09-19 10:32:21 -04:00
|
|
|
|
#[test]
|
|
|
|
|
fn websocketstream() {
|
|
|
|
|
let _g = util::http_server();
|
|
|
|
|
|
|
|
|
|
let script = util::testdata_path().join("run/websocketstream_test.ts");
|
|
|
|
|
let root_ca = util::testdata_path().join("tls/RootCA.pem");
|
|
|
|
|
let status = util::deno_cmd()
|
|
|
|
|
.arg("test")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--cert")
|
|
|
|
|
.arg(root_ca)
|
|
|
|
|
.arg(script)
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(status.success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn websocketstream_ping() {
|
|
|
|
|
use deno_runtime::deno_websocket::tokio_tungstenite::tungstenite;
|
|
|
|
|
let _g = util::http_server();
|
|
|
|
|
|
|
|
|
|
let script = util::testdata_path().join("run/websocketstream_ping_test.ts");
|
|
|
|
|
let root_ca = util::testdata_path().join("tls/RootCA.pem");
|
|
|
|
|
let mut child = util::deno_cmd()
|
|
|
|
|
.arg("test")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--cert")
|
|
|
|
|
.arg(root_ca)
|
|
|
|
|
.arg(script)
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let server = std::net::TcpListener::bind("127.0.0.1:4513").unwrap();
|
|
|
|
|
let (stream, _) = server.accept().unwrap();
|
|
|
|
|
let mut socket = tungstenite::accept(stream).unwrap();
|
|
|
|
|
socket
|
|
|
|
|
.write_message(tungstenite::Message::Text(String::from("A")))
|
|
|
|
|
.unwrap();
|
|
|
|
|
socket
|
|
|
|
|
.write_message(tungstenite::Message::Ping(vec![]))
|
|
|
|
|
.unwrap();
|
|
|
|
|
socket
|
|
|
|
|
.write_message(tungstenite::Message::Text(String::from("B")))
|
|
|
|
|
.unwrap();
|
|
|
|
|
let message = socket.read_message().unwrap();
|
|
|
|
|
assert_eq!(message, tungstenite::Message::Pong(vec![]));
|
|
|
|
|
socket
|
|
|
|
|
.write_message(tungstenite::Message::Text(String::from("C")))
|
|
|
|
|
.unwrap();
|
|
|
|
|
socket.close(None).unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(child.wait().unwrap().success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn websocket_server_multi_field_connection_header() {
|
|
|
|
|
let script = util::testdata_path()
|
|
|
|
|
.join("run/websocket_server_multi_field_connection_header_test.ts");
|
|
|
|
|
let root_ca = util::testdata_path().join("tls/RootCA.pem");
|
|
|
|
|
let mut child = util::deno_cmd()
|
|
|
|
|
.arg("run")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--cert")
|
|
|
|
|
.arg(root_ca)
|
|
|
|
|
.arg(script)
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let stdout = child.stdout.as_mut().unwrap();
|
|
|
|
|
let mut buffer = [0; 5];
|
|
|
|
|
let read = stdout.read(&mut buffer).unwrap();
|
|
|
|
|
assert_eq!(read, 5);
|
|
|
|
|
let msg = std::str::from_utf8(&buffer).unwrap();
|
|
|
|
|
assert_eq!(msg, "READY");
|
|
|
|
|
|
|
|
|
|
let req = http::request::Builder::new()
|
|
|
|
|
.header(http::header::CONNECTION, "keep-alive, Upgrade")
|
|
|
|
|
.uri("ws://localhost:4319")
|
|
|
|
|
.body(())
|
|
|
|
|
.unwrap();
|
|
|
|
|
let (mut socket, _) =
|
|
|
|
|
deno_runtime::deno_websocket::tokio_tungstenite::tungstenite::connect(req)
|
|
|
|
|
.unwrap();
|
|
|
|
|
let message = socket.read_message().unwrap();
|
|
|
|
|
assert_eq!(message, deno_runtime::deno_websocket::tokio_tungstenite::tungstenite::Message::Close(None));
|
|
|
|
|
socket.close(None).unwrap();
|
|
|
|
|
assert!(child.wait().unwrap().success());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO(bartlomieju): this should use `deno run`, not `deno test`; but the
|
|
|
|
|
// test hangs then. https://github.com/denoland/deno/issues/14283
|
|
|
|
|
#[test]
|
|
|
|
|
#[ignore]
|
|
|
|
|
fn websocket_server_idletimeout() {
|
|
|
|
|
let script =
|
|
|
|
|
util::testdata_path().join("run/websocket_server_idletimeout.ts");
|
|
|
|
|
let root_ca = util::testdata_path().join("tls/RootCA.pem");
|
|
|
|
|
let mut child = util::deno_cmd()
|
|
|
|
|
.arg("test")
|
|
|
|
|
.arg("--unstable")
|
|
|
|
|
.arg("--allow-net")
|
|
|
|
|
.arg("--cert")
|
|
|
|
|
.arg(root_ca)
|
|
|
|
|
.arg(script)
|
|
|
|
|
.stdout(std::process::Stdio::piped())
|
|
|
|
|
.spawn()
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let stdout = child.stdout.as_mut().unwrap();
|
|
|
|
|
let mut buffer = [0; 5];
|
|
|
|
|
let read = stdout.read(&mut buffer).unwrap();
|
|
|
|
|
assert_eq!(read, 5);
|
|
|
|
|
let msg = std::str::from_utf8(&buffer).unwrap();
|
|
|
|
|
assert_eq!(msg, "READY");
|
|
|
|
|
|
|
|
|
|
let req = http::request::Builder::new()
|
|
|
|
|
.uri("ws://localhost:4509")
|
|
|
|
|
.body(())
|
|
|
|
|
.unwrap();
|
|
|
|
|
let (_ws, _request) =
|
|
|
|
|
deno_runtime::deno_websocket::tokio_tungstenite::tungstenite::connect(req)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
assert!(child.wait().unwrap().success());
|
|
|
|
|
}
|