aboutsummaryrefslogtreecommitdiff
path: root/test/gleam_stdlib_test_ffi.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'test/gleam_stdlib_test_ffi.mjs')
-rwxr-xr-xtest/gleam_stdlib_test_ffi.mjs107
1 files changed, 6 insertions, 101 deletions
diff --git a/test/gleam_stdlib_test_ffi.mjs b/test/gleam_stdlib_test_ffi.mjs
index e497629..68922c9 100755
--- a/test/gleam_stdlib_test_ffi.mjs
+++ b/test/gleam_stdlib_test_ffi.mjs
@@ -1,103 +1,8 @@
-// This file is a verbatim copy of gleeunit 0.10.0's <https://github.com/lpil/gleeunit/blob/main/src/gleeunit_ffi.mjs>
-
-async function* gleamFiles(directory) {
- for (let entry of await read_dir(directory)) {
- let path = join_path(directory, entry);
- if (path.endsWith(".gleam")) {
- yield path;
- } else {
- try {
- yield* gleamFiles(path);
- } catch (error) {
- // Could not read directory, assume it's a file
- }
- }
- }
-}
-
-async function readRootPackageName() {
- let toml = await read_file("gleam.toml", "utf-8");
- for (let line of toml.split("\n")) {
- let matches = line.match(/\s*name\s*=\s*"([a-z][a-z0-9_]*)"/); // Match regexp in compiler-cli/src/new.rs in validate_name()
- if (matches) return matches[1];
- }
- throw new Error("Could not determine package name from gleam.toml");
-}
-
-export async function main() {
- let passes = 0;
- let failures = 0;
-
- let packageName = await readRootPackageName();
- let dist = `../${packageName}/`;
-
- for await (let path of await gleamFiles("test")) {
- let js_path = path.slice("test/".length).replace(".gleam", ".mjs");
- let module = await import(join_path(dist, js_path));
- for (let fnName of Object.keys(module)) {
- if (!fnName.endsWith("_test")) continue;
- try {
- await module[fnName]();
- write(`\u001b[32m.\u001b[0m`);
- passes++;
- } catch (error) {
- let moduleName = "\n" + js_path.slice(0, -4);
- let line = error.line ? `:${error.line}` : "";
- write(`\n❌ ${moduleName}.${fnName}${line}: ${error}\n`);
- failures++;
- }
- }
- }
-
- console.log(`
-${passes + failures} tests, ${failures} failures`);
- exit(failures ? 1 : 0);
-}
-
-export function crash(message) {
- throw new Error(message);
-}
-
-function write(message) {
- if (globalThis.Deno) {
- Deno.stdout.writeSync(new TextEncoder().encode(message));
- } else {
- process.stdout.write(message);
- }
-}
-
-function exit(code) {
- if (globalThis.Deno) {
- Deno.exit(code);
- } else {
- process.exit(code);
- }
-}
-
-async function read_dir(path) {
- if (globalThis.Deno) {
- let items = [];
- for await (let item of Deno.readDir(path, { withFileTypes: true })) {
- items.push(item.name);
- }
- return items;
- } else {
- let { readdir } = await import("fs/promises");
- return readdir(path);
- }
-}
-
-function join_path(a, b) {
- if (a.endsWith("/")) return a + b;
- return a + "/" + b;
-}
-
-async function read_file(path) {
- if (globalThis.Deno) {
- return Deno.readTextFile(path);
- } else {
- let { readFile } = await import("fs/promises");
- let contents = await readFile(path);
- return contents.toString();
+export function uint8array(list) {
+ let ints = list.toArray();
+ let array = new Uint8Array(ints.length);
+ for (let i = 0; i < ints.length; i++) {
+ array[i] = ints[i];
}
+ return array;
}