run npm install to generate a package lock
This commit is contained in:
54
node_modules/@weborigami/async-tree/test/browser/assert.js
generated
vendored
Normal file
54
node_modules/@weborigami/async-tree/test/browser/assert.js
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* A simple test runner for the browser to run the subset of the Node.s test
|
||||
* runner used by the project.
|
||||
*/
|
||||
|
||||
export default function assert(condition) {
|
||||
if (!condition) {
|
||||
throw new Error("Assertion failed");
|
||||
}
|
||||
}
|
||||
|
||||
assert.equal = (actual, expected) => {
|
||||
if (Number.isNaN(actual) && Number.isNaN(expected)) {
|
||||
return;
|
||||
} else if (actual == expected) {
|
||||
return;
|
||||
} else {
|
||||
throw new Error(`Expected ${expected} but got ${actual}`);
|
||||
}
|
||||
};
|
||||
|
||||
// This is a simplified deepEqual test that examines the conditions we care
|
||||
// about. For reference, the actual Node assert.deepEqual is much more complex:
|
||||
// see https://github.com/nodejs/node/blob/main/lib/internal/util/comparisons.js
|
||||
assert.deepEqual = (actual, expected) => {
|
||||
if (actual === expected) {
|
||||
return;
|
||||
} else if (
|
||||
typeof actual === "object" &&
|
||||
actual != null &&
|
||||
typeof expected === "object" &&
|
||||
expected != null &&
|
||||
Object.keys(actual).length === Object.keys(expected).length
|
||||
) {
|
||||
for (const prop in actual) {
|
||||
if (!expected.hasOwnProperty(prop)) {
|
||||
break;
|
||||
}
|
||||
assert.deepEqual(actual[prop], expected[prop]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
throw new Error(`Expected ${expected} but got ${actual}`);
|
||||
};
|
||||
|
||||
assert.rejects = async (promise) => {
|
||||
try {
|
||||
await promise;
|
||||
throw new Error("Expected promise to reject but it resolved");
|
||||
} catch (error) {
|
||||
return;
|
||||
}
|
||||
};
|
||||
35
node_modules/@weborigami/async-tree/test/browser/index.html
generated
vendored
Normal file
35
node_modules/@weborigami/async-tree/test/browser/index.html
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"node:assert": "./assert.js",
|
||||
"node:test": "./testRunner.js"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!-- Omit FileTree.test.js, which is Node.js only -->
|
||||
<!-- Omit SiteTree.test.js, which requires mocks -->
|
||||
<script type="module" src="../BrowserFileTree.test.js"></script>
|
||||
<script type="module" src="../DeferredTree.test.js"></script>
|
||||
<script type="module" src="../FunctionTree.test.js"></script>
|
||||
<script type="module" src="../MapTree.test.js"></script>
|
||||
<script type="module" src="../ObjectTree.test.js"></script>
|
||||
<script type="module" src="../SetTree.test.js"></script>
|
||||
<script type="module" src="../Tree.test.js"></script>
|
||||
<script type="module" src="../operations/cache.test.js"></script>
|
||||
<script type="module" src="../operations/merge.test.js"></script>
|
||||
<script type="module" src="../operations/deepMerge.test.js"></script>
|
||||
<script type="module" src="../transforms/cachedKeyMaps.test.js"></script>
|
||||
<script
|
||||
type="module"
|
||||
src="../transforms/keyFunctionsForExtensions.test.js"
|
||||
></script>
|
||||
<script type="module" src="../transforms/mapFn.test.js"></script>
|
||||
<script type="module" src="../utilities.test.js"></script>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
||||
51
node_modules/@weborigami/async-tree/test/browser/testRunner.js
generated
vendored
Normal file
51
node_modules/@weborigami/async-tree/test/browser/testRunner.js
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* A simple test runner for the browser to run the subset of the Node.s test
|
||||
* runner used by the project.
|
||||
*/
|
||||
|
||||
let promises = {};
|
||||
let currentSuite;
|
||||
|
||||
const markers = {
|
||||
success: "✅",
|
||||
skipped: "ー",
|
||||
fail: "❌",
|
||||
};
|
||||
|
||||
export async function describe(name, fn) {
|
||||
promises[name] = [];
|
||||
currentSuite = name;
|
||||
await fn();
|
||||
const results = await Promise.all(promises[name]);
|
||||
const someFailed = results.some((result) => result.result === "fail");
|
||||
const header = `${someFailed ? markers.fail : markers.success} ${name}`;
|
||||
console[someFailed ? "group" : "groupCollapsed"](header);
|
||||
for (const result of results) {
|
||||
const marker = markers[result.result];
|
||||
const name = result.name;
|
||||
const message = result.result === "fail" ? `: ${result.message}` : "";
|
||||
const skipped = result.result === "skipped" ? " [skipped]" : "";
|
||||
console.log(`${marker} ${name}${message}${skipped}`);
|
||||
}
|
||||
console.groupEnd();
|
||||
}
|
||||
|
||||
// Node test() calls can call an async function, but the test() function isn't
|
||||
// declared async. We implicitly wrap the test call with a Promise and add it to
|
||||
// the list of promises for the current suite.
|
||||
export async function test(name, fn) {
|
||||
promises[currentSuite].push(runTest(name, fn));
|
||||
}
|
||||
|
||||
test.skip = (name, fn) => {
|
||||
promises[currentSuite].push(Promise.resolve({ result: "skipped", name }));
|
||||
};
|
||||
|
||||
async function runTest(name, fn) {
|
||||
try {
|
||||
await fn();
|
||||
return { result: "success", name };
|
||||
} catch (/** @type {any} */ error) {
|
||||
return { result: "fail", name, message: error.message };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user