summaryrefslogtreecommitdiff
path: root/std/node
diff options
context:
space:
mode:
Diffstat (limited to 'std/node')
-rw-r--r--std/node/process.ts42
-rw-r--r--std/node/process_test.ts103
2 files changed, 145 insertions, 0 deletions
diff --git a/std/node/process.ts b/std/node/process.ts
new file mode 100644
index 000000000..35de23b88
--- /dev/null
+++ b/std/node/process.ts
@@ -0,0 +1,42 @@
+import { notImplemented } from "./_utils.ts";
+
+const version = `v${Deno.version.deno}`;
+
+const versions = {
+ node: Deno.version.deno,
+ ...Deno.version
+};
+
+const osToPlatform = (os: Deno.OperatingSystem): string =>
+ os === "win" ? "win32" : os === "mac" ? "darwin" : os;
+
+const platform = osToPlatform(Deno.build.os);
+
+const { arch } = Deno.build;
+
+const { pid, cwd, chdir, exit } = Deno;
+
+function on(_event: string, _callback: Function): void {
+ // TODO(rsp): to be implemented
+ notImplemented();
+}
+
+export const process = {
+ version,
+ versions,
+ platform,
+ arch,
+ pid,
+ cwd,
+ chdir,
+ exit,
+ on,
+ get env(): { [index: string]: string } {
+ // using getter to avoid --allow-env unless it's used
+ return Deno.env();
+ },
+ get argv(): string[] {
+ // Deno.execPath() also requires --allow-env
+ return [Deno.execPath(), ...Deno.args];
+ }
+};
diff --git a/std/node/process_test.ts b/std/node/process_test.ts
new file mode 100644
index 000000000..0ddf71fbc
--- /dev/null
+++ b/std/node/process_test.ts
@@ -0,0 +1,103 @@
+import { test } from "../testing/mod.ts";
+import { assert, assertThrows, assertEquals } from "../testing/asserts.ts";
+import { process } from "./process.ts";
+
+// NOTE: Deno.execPath() (and thus process.argv) currently requires --allow-env
+// (Also Deno.env() (and process.env) requires --allow-env but it's more obvious)
+
+test({
+ name: "process.cwd and process.chdir success",
+ fn() {
+ // this should be run like other tests from directory up
+ assert(process.cwd().match(/\Wstd$/));
+ process.chdir("node");
+ assert(process.cwd().match(/\Wnode$/));
+ process.chdir("..");
+ assert(process.cwd().match(/\Wstd$/));
+ }
+});
+
+test({
+ name: "process.chdir failure",
+ fn() {
+ assertThrows(
+ () => {
+ process.chdir("non-existent-directory-name");
+ },
+ Deno.DenoError,
+ "file"
+ // On every OS Deno returns: "No such file" except for Windows, where it's:
+ // "The system cannot find the file specified. (os error 2)" so "file" is
+ // the only common string here.
+ // TODO(rsp): Crazy idea: 404 for things like this?
+ // It would be nice to have error codes like 404 or 403 in addition to strings.
+ );
+ }
+});
+
+test({
+ name: "process.version",
+ fn() {
+ assertEquals(typeof process, "object");
+ assertEquals(typeof process.version, "string");
+ assertEquals(typeof process.versions, "object");
+ assertEquals(typeof process.versions.node, "string");
+ }
+});
+
+test({
+ name: "process.platform",
+ fn() {
+ assertEquals(typeof process.platform, "string");
+ }
+});
+
+test({
+ name: "process.arch",
+ fn() {
+ assertEquals(typeof process.arch, "string");
+ // TODO(rsp): make sure that the arch strings should be the same in Node and Deno:
+ assertEquals(process.arch, Deno.build.arch);
+ }
+});
+
+test({
+ name: "process.pid",
+ fn() {
+ assertEquals(typeof process.pid, "number");
+ assertEquals(process.pid, Deno.pid);
+ }
+});
+
+test({
+ name: "process.on",
+ fn() {
+ assertEquals(typeof process.on, "function");
+ assertThrows(
+ () => {
+ process.on("uncaughtException", (_err: Error) => {});
+ },
+ Error,
+ "implemented"
+ );
+ }
+});
+
+test({
+ name: "process.argv",
+ fn() {
+ assert(Array.isArray(process.argv));
+ assert(
+ process.argv[0].match(/[^/\\]*deno[^/\\]*$/),
+ "deno included in the file name of argv[0]"
+ );
+ // we cannot test for anything else (we see test runner arguments here)
+ }
+});
+
+test({
+ name: "process.env",
+ fn() {
+ assertEquals(typeof process.env.PATH, "string");
+ }
+});