UNPKG

@fedify/fedify

Version:

An ActivityPub server framework

143 lines (139 loc) 3.36 kB
import { Temporal } from "@js-temporal/polyfill"; import { URLPattern } from "urlpattern-polyfill"; globalThis.addEventListener = () => {}; import { __require } from "./chunk-HsBuZ-b2.js"; import { configure, getConsoleSink, reset } from "@logtape/logtape"; //#region testing/mod.ts const testDefinitions = []; function test(name, options, fn) { const def = typeof name === "string" ? typeof options === "function" ? { name, fn: options } : { name, ...options, fn } : name; testDefinitions.push(def); if ("Deno" in globalThis) { const func = def.fn; Deno.test({ ...def, async fn(t) { const records = []; await configure({ sinks: { buffer(record) { if (record.category.length > 1 && record.category[0] === "logtape" && record.category[1] === "meta") return; records.push(record); }, console: getConsoleSink() }, filters: {}, loggers: [{ category: [], sinks: [Deno.env.get("LOG") === "always" ? "console" : "buffer"] }] }); try { await func(t); } catch (e) { const consoleSink = getConsoleSink(); for (const record of records) consoleSink(record); throw e; } finally { await reset(); } } }); } else if ("Bun" in globalThis) { let failed = void 0; async function step(defOrNameOrFn, fn$2) { let def$1; if (typeof defOrNameOrFn === "string") def$1 = { name: defOrNameOrFn, fn: fn$2 }; else if (typeof defOrNameOrFn === "function") def$1 = { name: defOrNameOrFn.name, fn: defOrNameOrFn }; else def$1 = defOrNameOrFn; if (def$1.ignore) return true; try { await def$1.fn({ name: def$1.name, origin: "", step }); } catch (e) { failed ??= e; return false; } return true; } const ctx = { name: def.name, origin: "", step }; async function fn$1() { await def.fn(ctx); if (failed) throw failed; } const bunTest = Bun.jest(caller()).test; if (def.ignore) bunTest.skip(def.name, fn$1); else if (def.only) bunTest.only(def.name, fn$1); else bunTest(def.name, fn$1); } else try { const { test: nodeTest } = __require("node:test"); nodeTest(def.name, { only: def.only, skip: def.ignore }, async (t) => { await def.fn(intoDenoTestContext(def.name, t)); }); } catch {} } function intoDenoTestContext(name, ctx) { async function step(defOrNameOrFn, fn) { let def; if (typeof defOrNameOrFn === "string") def = { name: defOrNameOrFn, fn }; else if (typeof defOrNameOrFn === "function") def = { name: defOrNameOrFn.name, fn: defOrNameOrFn }; else def = defOrNameOrFn; let failed = false; await ctx.test(def.name, async (ctx2) => { try { await def.fn(intoDenoTestContext(def.name, ctx2)); } catch (e) { failed = true; throw e; } }); return failed; } const denoCtx = { name, origin: ctx.filePath ?? "", step }; return denoCtx; } /** Retrieve caller test file. */ function caller() { const Trace = Error; const _ = Trace.prepareStackTrace; Trace.prepareStackTrace = (_$1, stack$1) => stack$1; const { stack } = /* @__PURE__ */ new Error(); Trace.prepareStackTrace = _; const caller$1 = stack[2]; return caller$1.getFileName().replaceAll("\\", "/"); } //#endregion export { test, testDefinitions };