summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/mkdir_test.ts3
-rw-r--r--js/timers_test.ts97
-rw-r--r--js/unit_tests.ts1
-rw-r--r--src/flags.rs6
-rw-r--r--src/handlers.rs8
5 files changed, 104 insertions, 11 deletions
diff --git a/js/mkdir_test.ts b/js/mkdir_test.ts
index 4f82401dc..27da93c16 100644
--- a/js/mkdir_test.ts
+++ b/js/mkdir_test.ts
@@ -13,7 +13,8 @@ testPerm({ write: true }, function mkdirSyncMode() {
const path = deno.makeTempDirSync() + "/dir/subdir";
deno.mkdirSync(path, 0o755); // no perm for x
const pathInfo = deno.statSync(path);
- if (pathInfo.mode !== null) { // Skip windows
+ if (pathInfo.mode !== null) {
+ // Skip windows
assertEqual(pathInfo.mode & 0o777, 0o755);
}
});
diff --git a/js/timers_test.ts b/js/timers_test.ts
new file mode 100644
index 000000000..af172e976
--- /dev/null
+++ b/js/timers_test.ts
@@ -0,0 +1,97 @@
+import { test, assertEqual } from "./test_util.ts";
+
+function deferred() {
+ let resolve;
+ let reject;
+ const promise = new Promise((res, rej) => {
+ resolve = res;
+ reject = rej;
+ });
+ return {
+ promise,
+ resolve,
+ reject
+ };
+}
+
+function waitForMs(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+test(async function timeoutSuccess() {
+ const { promise, resolve } = deferred();
+ let count = 0;
+ setTimeout(() => {
+ count++;
+ resolve();
+ }, 500);
+ await promise;
+ // count should increment
+ assertEqual(count, 1);
+});
+
+test(async function timeoutCancelSuccess() {
+ let count = 0;
+ const id = setTimeout(() => {
+ count++;
+ }, 500);
+ // Cancelled, count should not increment
+ clearTimeout(id);
+ // Wait a bit longer than 500ms
+ await waitForMs(600);
+ assertEqual(count, 0);
+});
+
+test(async function timeoutCancelInvalidSilentFail() {
+ // Expect no panic
+ const { promise, resolve } = deferred();
+ let count = 0;
+ const id = setTimeout(() => {
+ count++;
+ // Should have no effect
+ clearTimeout(id);
+ resolve();
+ }, 500);
+ await promise;
+ assertEqual(count, 1);
+
+ // Should silently fail (no panic)
+ clearTimeout(2147483647);
+});
+
+test(async function intervalSuccess() {
+ const { promise, resolve } = deferred();
+ let count = 0;
+ const id = setInterval(() => {
+ count++;
+ if (count === 2) {
+ // TODO: clearInterval(id) here alone seems not working
+ // causing unit_tests.ts to block forever
+ // Requires further investigation...
+ clearInterval(id);
+ resolve();
+ }
+ }, 200);
+ await promise;
+ // Clear interval
+ clearInterval(id);
+ // count should increment twice
+ assertEqual(count, 2);
+});
+
+test(async function intervalCancelSuccess() {
+ let count = 0;
+ const id = setInterval(() => {
+ count++;
+ }, 500);
+ // Cancelled, count should not increment
+ clearInterval(id);
+ // Wait a bit longer than 500ms
+ await waitForMs(600);
+ assertEqual(count, 0);
+});
+
+test(async function intervalCancelInvalidSilentFail() {
+ // Should silently fail (no panic)
+ clearInterval(2147483647);
+});
diff --git a/js/unit_tests.ts b/js/unit_tests.ts
index e1385e011..4f7b9681d 100644
--- a/js/unit_tests.ts
+++ b/js/unit_tests.ts
@@ -12,3 +12,4 @@ import "./make_temp_dir_test.ts";
import "./stat_test.ts";
import "./rename_test.ts";
import "./blob_test.ts";
+import "./timers_test.ts";
diff --git a/src/flags.rs b/src/flags.rs
index 13f065735..2e4862218 100644
--- a/src/flags.rs
+++ b/src/flags.rs
@@ -154,8 +154,7 @@ fn parse_core_args(args: Vec<String>) -> (Vec<String>, Vec<String>) {
}
true
- })
- .collect();
+ }).collect();
// Replace args being sent to V8
for idx in 0..args.len() {
@@ -222,7 +221,6 @@ pub fn v8_set_flags(args: Vec<String>) -> Vec<String> {
let cstr = CStr::from_ptr(*ptr as *const i8);
let slice = cstr.to_str().unwrap();
slice.to_string()
- })
- .chain(rest.into_iter())
+ }).chain(rest.into_iter())
.collect()
}
diff --git a/src/handlers.rs b/src/handlers.rs
index 0917fd22a..39f2d51aa 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -288,8 +288,7 @@ fn handle_env(d: *const DenoC, base: &msg::Base) -> Box<Op> {
..Default::default()
},
)
- })
- .collect();
+ }).collect();
let tables = builder.create_vector(&vars);
let msg = msg::EnvironRes::create(
builder,
@@ -402,8 +401,7 @@ where
.and_then(|_| {
cb();
Ok(())
- })
- .select(cancel_rx)
+ }).select(cancel_rx)
.map(|_| ())
.map_err(|_| ());
@@ -604,9 +602,7 @@ fn handle_write_file(d: *const DenoC, base: &msg::Base) -> Box<Op> {
// TODO(ry) Use Deno instead of DenoC as first arg.
fn remove_timer(d: *const DenoC, timer_id: u32) {
let deno = from_c(d);
- assert!(deno.timers.contains_key(&timer_id));
deno.timers.remove(&timer_id);
- assert!(!deno.timers.contains_key(&timer_id));
}
// Prototype: https://github.com/ry/deno/blob/golang/timers.go#L25-L39