char-slop/berry

multipurpose self-modifiable agentic harness

git clone https://git.t4t.associates/char-slop/berry

Charlotte Somcut a bunch of code volumecb11725

main
3.6 KiB89 linesraw
1import { assertEquals, assertRejects } from "@std/assert";
2import { BACKGROUND_CONTEXT as context } from "@earendil-works/chord/context";
3import { ok } from "@earendil-works/pi-durable/env";
4import { localEnvironment } from "@berry/api/environment.ts";
5import { join, win32 } from "node:path";
6import { localOnly } from "./environment.ts";
7import { folders } from "./folders.ts";
8import { setup } from "./fixture.ts";
9import { tempDir } from "@berry/util";
10
11Deno.test("folder suggestions list only matching directories, including spaces, hidden folders, and directory symlinks", async () => {
12  await using rootDir = await tempDir();
13  const root = rootDir.path;
14  for (const name of ["alpha", "another folder", ".hidden", "Beta"]) {
15    await Deno.mkdir(join(root, name));
16  }
17  await Deno.writeTextFile(join(root, "a-file"), "");
18  await Deno.symlink(join(root, "alpha"), join(root, "a-link"));
19  await Deno.symlink(join(root, "a-file"), join(root, "a-file-link"));
20  await Deno.symlink(join(root, "missing"), join(root, "a-broken"));
21  const env = localEnvironment(root);
22  assertEquals(await folders(env, "a", context), ["a-link/", "alpha/", "another folder/"]);
23  assertEquals(await folders(env, ".", context), [".hidden/"]);
24  assertEquals(await folders(env, "b", context), []);
25  assertEquals(
26    await folders(env, `${root}/a`, context),
27    ["a-link", "alpha", "another folder"].map((name) => `${root}/${name}/`),
28  );
29  assertEquals(await folders(env, "alpha/", context), []);
30  await assertRejects(() => folders(env, "missing/", context));
31  await assertRejects(() => folders(env, "a\0", context));
32  for (let i = 0; i < 60; i++) await Deno.mkdir(join(root, `many-${i}`));
33  assertEquals((await folders(env, "many-", context)).length, 50);
34});
35
36Deno.test("folder completion uses the selected machine and base", async () => {
37  await using rootDir = await tempDir();
38  const root = rootDir.path;
39  await Deno.mkdir(join(root, "remote-folder"));
40  await Deno.mkdir(join(root, "nested"));
41  await Deno.mkdir(join(root, "nested", "child"));
42  await using harness = await setup({
43    open(name, cwd, during) {
44      if (name !== "other") return localOnly.open(name, cwd, during);
45      return Promise.resolve(Object.assign(localEnvironment(cwd ?? root), { name, home: root }));
46    },
47    close: () => Promise.resolve(),
48  });
49  const { berry } = harness;
50  assertEquals(await berry.folders("other", null, "remote"), ["remote-folder/"]);
51  assertEquals(await berry.folders("other", join(root, "nested"), "c"), ["child/"]);
52  assertEquals(await berry.folders("other", null, "~/remote"), [`${root}/remote-folder/`]);
53  await assertRejects(() => berry.folders("missing", null, ""));
54});
55
56Deno.test("Windows suggestions use the remote machine's separators and case-insensitive prefixes", async () => {
57  const parents: string[] = [];
58  const env = Object.assign(localEnvironment("/"), {
59    platform: "win32",
60    home: "C:\\Users\\char",
61    absolutePath(path: string) {
62      parents.push(path);
63      return Promise.resolve(ok(win32.resolve("C:\\Users\\char", path)));
64    },
65    listDir: () =>
66      Promise.resolve(ok([
67        {
68          name: "Berry",
69          path: "C:\\Users\\char\\Berry",
70          kind: "directory" as const,
71          size: 0,
72          mtime: 0,
73        },
74        {
75          name: "Book",
76          path: "C:\\Users\\char\\Book",
77          kind: "directory" as const,
78          size: 0,
79          mtime: 0,
80        },
81      ])),
82  });
83  assertEquals(await folders(env, "b", context), ["Berry\\", "Book\\"]);
84  assertEquals(await folders(env, "~\\b", context), [
85    "C:\\Users\\char\\Berry\\",
86    "C:\\Users\\char\\Book\\",
87  ]);
88  assertEquals(parents, [".", "C:\\Users\\char"]);
89});