silverbullet/plug-api/lib/query_expression.test.ts

46 lines
1.0 KiB
TypeScript

import { evalQueryExpression } from "@silverbulletmd/silverbullet/lib/query_expression";
import { assert, assertEquals } from "@std/assert";
Deno.test("Test query expression evaluation", async () => {
assertEquals(
evalQueryExpression(
["+", ["number", 1], ["number", 2]],
{},
{},
{},
),
3,
);
assertEquals(
evalQueryExpression(
["?", [">", ["number", 8], ["number", 3]], ["string", "yes"], [
"string",
"no",
]],
{},
{},
{},
),
"yes",
);
// Only when an expression calls an async function should the result be a
const prom = evalQueryExpression(
["+", ["call", "asyncCall", []], ["number", 2]],
{},
{},
{ asyncCall: () => Promise.resolve(1) },
);
assert(prom instanceof Promise);
assertEquals(await prom, 3);
const nonProm = evalQueryExpression(
["+", ["call", "asyncCall", []], ["number", 2]],
{},
{},
{ asyncCall: () => 1 },
);
assert(!(nonProm instanceof Promise));
assertEquals(nonProm, 3);
});