aab1acaed1
Rewrites "cli/js/unit_test_runner.ts" to communicate with spawned subprocesses using TCP socket. * Rewrite "Deno.runTests()" by factoring out testing logic to private "TestApi" class. "TestApi" implements "AsyncIterator" that yields "TestEvent"s, which is an interface for different types of event occuring during running tests. * Add "reporter" argument to "Deno.runTests()" to allow users to provide custom reporting mechanism for tests. It's represented by "TestReporter" interface, that implements hook functions for each type of "TestEvent". If "reporter" is not provided then default console reporting is used (via "ConsoleReporter"). * Change how "unit_test_runner" communicates with spawned suprocesses. Instead of parsing text data from child's stdout, a TCP socket is created and used for communication. "unit_test_runner" can run in either "master" or "worker" mode. Former is responsible for test discovery and establishing needed permission combinations; while latter (that is spawned by "master") executes tests that match given permission set. * Use "SocketReporter" that implements "TestReporter" interface to send output of tests to "master" process. Data is sent as stringified JSON and then parsed by "master" as structured data. "master" applies it's own reporting logic to output tests to console (by reusing default "ConsoleReporter"). |
||
---|---|---|
.. | ||
blob_test.ts | ||
body_test.ts | ||
buffer_test.ts | ||
build_test.ts | ||
chmod_test.ts | ||
chown_test.ts | ||
console_test.ts | ||
copy_file_test.ts | ||
custom_event_test.ts | ||
dir_test.ts | ||
dispatch_json_test.ts | ||
dispatch_minimal_test.ts | ||
dom_iterable_test.ts | ||
error_stack_test.ts | ||
event_target_test.ts | ||
event_test.ts | ||
fetch_test.ts | ||
file_test.ts | ||
files_test.ts | ||
form_data_test.ts | ||
format_error_test.ts | ||
fs_events_test.ts | ||
get_random_values_test.ts | ||
globals_test.ts | ||
headers_test.ts | ||
internals_test.ts | ||
link_test.ts | ||
location_test.ts | ||
make_temp_test.ts | ||
metrics_test.ts | ||
mkdir_test.ts | ||
net_test.ts | ||
os_test.ts | ||
performance_test.ts | ||
permissions_test.ts | ||
process_test.ts | ||
read_dir_test.ts | ||
read_file_test.ts | ||
read_link_test.ts | ||
README.md | ||
realpath_test.ts | ||
remove_test.ts | ||
rename_test.ts | ||
request_test.ts | ||
resources_test.ts | ||
signal_test.ts | ||
stat_test.ts | ||
symbols_test.ts | ||
symlink_test.ts | ||
test_util.ts | ||
testing_test.ts | ||
text_encoding_test.ts | ||
timers_test.ts | ||
tls_test.ts | ||
truncate_test.ts | ||
tty_test.ts | ||
umask_test.ts | ||
unit_test_runner.ts | ||
unit_tests.ts | ||
url_search_params_test.ts | ||
url_test.ts | ||
utime_test.ts | ||
version_test.ts | ||
write_file_test.ts |
Deno runtime tests
Files in this directory are unit tests for Deno runtime.
They are run under compiled Deno binary as opposed to files in cli/js/
which
are bundled and snapshotted using deno_typescript
crate.
Testing Deno runtime code requires checking API under different runtime
permissions (ie. running with different --allow-*
flags). To accomplish this
all tests exercised are created using unitTest()
function.
import { unitTest } from "./test_util.ts";
unitTest(function simpleTestFn(): void {
// test code here
});
unitTest({
skip: Deno.build.os === "win",
perms: { read: true, write: true },
},
function complexTestFn(): void {
// test code here
}
);
unitTest
is is a wrapper function that enhances Deno.test()
API in several
ways:
- ability to conditionally skip tests using
UnitTestOptions.skip
- ability to register required set of permissions for given test case using
UnitTestOptions.perms
- sanitization of resources - ensuring that tests close all opened resources preventing interference between tests
- sanitization of async ops - ensuring that tests don't leak async ops by ensuring that all started async ops are done before test finishes
unit_test_runner.ts
is main script used to run unit tests.
Runner discoveres required permissions combinations by loading
cli/js/tests/unit_tests.ts
and going through all registered instances of
unitTest
. For each discovered permission combination a new Deno process is
created with respective --allow-*
flags which loads
cli/js/tests/unit_tests.ts
and executes all unitTest
that match runtime
permissions.