summaryrefslogtreecommitdiff
path: root/cli/js
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js')
-rw-r--r--cli/js/ops/fs/utime.ts2
-rw-r--r--cli/js/tests/utime_test.ts51
2 files changed, 52 insertions, 1 deletions
diff --git a/cli/js/ops/fs/utime.ts b/cli/js/ops/fs/utime.ts
index cd195531c..2755a7e96 100644
--- a/cli/js/ops/fs/utime.ts
+++ b/cli/js/ops/fs/utime.ts
@@ -2,7 +2,7 @@
import { sendSync, sendAsync } from "../dispatch_json.ts";
function toSecondsFromEpoch(v: number | Date): number {
- return v instanceof Date ? v.valueOf() / 1000 : v;
+ return v instanceof Date ? Math.trunc(v.valueOf() / 1000) : v;
}
export function utimeSync(
diff --git a/cli/js/tests/utime_test.ts b/cli/js/tests/utime_test.ts
index 917b8b8b6..a81600e54 100644
--- a/cli/js/tests/utime_test.ts
+++ b/cli/js/tests/utime_test.ts
@@ -60,6 +60,31 @@ unitTest(
unitTest(
{ perms: { read: true, write: true } },
+ function utimeSyncFileDateSuccess() {
+ const testDir = Deno.makeTempDirSync();
+ const filename = testDir + "/file.txt";
+ Deno.writeFileSync(filename, new TextEncoder().encode("hello"), {
+ mode: 0o666,
+ });
+ const atime = new Date();
+ const mtime = new Date();
+ Deno.utimeSync(filename, atime, mtime);
+
+ const fileInfo = Deno.statSync(filename);
+ // atime and mtime must be scaled by a factor of 1000 to be recorded in seconds
+ assertFuzzyTimestampEquals(
+ fileInfo.accessed,
+ Math.trunc(atime.valueOf() / 1000)
+ );
+ assertFuzzyTimestampEquals(
+ fileInfo.modified,
+ Math.trunc(mtime.valueOf() / 1000)
+ );
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
function utimeSyncLargeNumberSuccess(): void {
const testDir = Deno.makeTempDirSync();
@@ -160,6 +185,32 @@ unitTest(
unitTest(
{ perms: { read: true, write: true } },
+ async function utimeFileDateSuccess(): Promise<void> {
+ const testDir = Deno.makeTempDirSync();
+ const filename = testDir + "/file.txt";
+ Deno.writeFileSync(filename, new TextEncoder().encode("hello"), {
+ mode: 0o666,
+ });
+
+ const atime = new Date();
+ const mtime = new Date();
+ await Deno.utime(filename, atime, mtime);
+
+ const fileInfo = Deno.statSync(filename);
+ // The dates must be scaled by a factored of 1000 to make them seconds
+ assertFuzzyTimestampEquals(
+ fileInfo.accessed,
+ Math.trunc(atime.valueOf() / 1000)
+ );
+ assertFuzzyTimestampEquals(
+ fileInfo.modified,
+ Math.trunc(mtime.valueOf() / 1000)
+ );
+ }
+);
+
+unitTest(
+ { perms: { read: true, write: true } },
async function utimeNotFound(): Promise<void> {
const atime = 1000;
const mtime = 50000;