deno/tests/unit
Nathan Whitaker 9602e13d53
fix(process,node): roll our own process spawning on windows (#29609)
Fixes #16899.
Fixes https://github.com/denoland/deno/issues/23524.
Fixes https://github.com/denoland/deno/issues/23938.
Fixes https://github.com/denoland/deno/issues/27869.

Unblocks #5501.

This PR adds support for additional stdio pipes to windows, as well as
the detached option in `node:child_process`. I also ported over the
`kill` implementation for windows, which means we now can support
`kill(0)` as well as some other signals.

This means that playwright will now work on windows.

Now that we have a way to support detached processes on all platforms,
we can also easily add a `detached` option to `Deno.Command`, similar to
`child_process.spawn`.

---

The reason for moving away from `std::process::Command` is that the
standard library doesn't expose what we need to control the file
descriptor table of child processes on windows. The implementation here
is based off of parts of `std` and parts of `libuv`, and allows us to
support passing extra pipes in addition to detached processes on
windows.
2025-06-12 02:56:13 +00:00
..
__snapshots__ fix(unstable): add missing decorators nodes in lint ast (#28834) 2025-04-10 17:49:05 +02:00
abort_controller_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
blob_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
body_test.ts feat: TypeScript 5.7 (#27857) 2025-01-31 16:07:42 -05:00
broadcast_channel_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
build_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
cache_api_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
chmod_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
chown_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
command_test.ts fix(process,node): roll our own process spawning on windows (#29609) 2025-06-12 02:56:13 +00:00
console_test.ts fix(ext/console): console.group indents two spaces (#29486) 2025-05-29 10:20:43 -04:00
copy_file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
cron_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
custom_event_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
dir_test.ts feat: Deno.cwd() no longer requires --allow-read permission (#27192) 2025-01-27 15:13:59 +01:00
dom_exception_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
error_stack_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
error_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
esnext_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
event_source_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
event_target_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
event_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
fetch_test.ts feat(ext/fetch): add support for fetch on vsock sockets (#29692) 2025-06-11 09:58:02 +02:00
ffi_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
filereader_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
files_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
fs_events_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
get_random_values_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
globals_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
headers_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
http_test.ts chore: update std in test util (#27892) 2025-01-31 08:52:32 -05:00
image_bitmap_test.ts fix(ext/canvas): createImageBitmap must ignore the Blob.type value (#28741) 2025-05-08 15:57:28 +02:00
image_data_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
internals_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
intl_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
jupyter_test.ts feat(jupyter): make GPUTexture and GPUBuffer displayable (#28117) 2025-02-18 00:29:45 -08:00
kv_queue_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
kv_queue_test_no_db_close.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
kv_queue_undelivered_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
kv_test.ts fix(kv): improve backoff error message and inline documentation (#27537) 2025-01-04 00:04:14 +01:00
link_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
lint_plugin_test.ts fix(unstable): add missing decorators nodes in lint ast (#28834) 2025-04-10 17:49:05 +02:00
lint_selectors_test.ts fix(unstable): lint plugin fix :has(), :is/where/matches and :not() selectors (#28348) 2025-03-04 16:04:39 +01:00
make_temp_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
message_channel_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
mkdir_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
navigator_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
net_test.ts feat(ext/net): add signal option to Deno.connect() (#27113) 2025-04-25 20:25:50 +05:30
network_interfaces_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
ops_test.ts feat(jupyter): make GPUTexture and GPUBuffer displayable (#28117) 2025-02-18 00:29:45 -08:00
os_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
path_from_url_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
performance_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
permissions_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
process_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
progressevent_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
promise_hooks_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
quic_test.ts refactor(quic): introduce endpoint, 0rtt, cleanup (#27444) 2025-01-06 15:24:59 +01:00
read_dir_test.ts fix(types): Deno.readDirSync's type returns an IteratorObject (#27805) 2025-01-24 11:25:55 -05:00
read_file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
read_link_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
read_text_file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
README.md test: remove usage of --unstable flag (#25549) 2024-09-10 11:28:59 +00:00
real_path_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
ref_unref_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
remove_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
rename_test.ts chore: Rust 1.85.1 (#29412) 2025-05-24 04:01:25 +00:00
request_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
response_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
serve_test.ts test(ext/http): reduce flakiness of httpServerVsockWebSocketUpgrade (#29688) 2025-06-11 21:32:15 +09:00
signal_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
stat_test.ts chore: make statSync unit test less flaky (#28785) 2025-04-07 22:55:05 +00:00
stdio_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
streams_test.ts fix(streams): handle Resource stream error (#27975) 2025-02-11 09:27:52 -08:00
structured_clone_test.ts feat: TypeScript 5.7 (#27857) 2025-01-31 16:07:42 -05:00
symbol_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
symlink_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
test_util.ts chore: update std in test util (#27892) 2025-01-31 08:52:32 -05:00
testing_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
text_encoding_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
timers_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
tls_sni_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
tls_test.ts chore: update std in test util (#27892) 2025-01-31 08:52:32 -05:00
truncate_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
tty_color_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
tty_test.ts feat: deno_core 0.344.0 (#29089) 2025-04-29 13:15:08 +02:00
umask_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
url_search_params_test.ts feat: TypeScript 5.7 (#27857) 2025-01-31 16:07:42 -05:00
url_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
urlpattern_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
utime_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
version_test.ts fix: correct reported typescript version (#29053) 2025-04-25 21:27:29 +00:00
wasm_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
webcrypto_test.ts fix(ext/crypto): support cross-curve ECDSA sign and verify (#28574) 2025-03-22 17:17:44 +00:00
webgpu_test.ts feat(ext/webgpu): implement GPUQueue.onSubmittedWorkDone (#29255) 2025-05-17 01:48:03 +02:00
websocket_test.ts fix(ext/websocket): cancel in-flight handshake on close() (#28598) 2025-03-28 03:43:32 +00:00
websocketstream_test.ts.disabled chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
webstorage_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
worker_permissions_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
worker_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
write_file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
write_text_file_test.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00

Deno runtime tests

Files in this directory are unit tests for Deno runtime.

Testing Deno runtime code requires checking API under different runtime permissions. To accomplish this all tests exercised are created using Deno.test() function.

import {} from "./test_util.ts";

Deno.test(function simpleTestFn(): void {
  // test code here
});

Deno.test(
  {
    ignore: Deno.build.os === "windows",
    permissions: { read: true, write: true },
  },
  function complexTestFn(): void {
    // test code here
  },
);

Running tests

There are two ways to run unit_test_runner.ts:

# Run all tests.
cargo run --bin deno -- test --allow-all --location=http://js-unit-tests/foo/bar cli/tests/unit/

# Run a specific test module
cargo run --bin deno -- test --allow-all --location=http://js-unit-tests/foo/bar cli/tests/unit/files_test.ts

Http server

target/debug/test_server is required to run when one's running unit tests. During CI it's spawned automatically, but if you want to run tests manually make sure that server is spawned otherwise there'll be cascade of test failures.