Format authored monorepo code with pinned language formatters
This commit is contained in:
+58
-33
@@ -141,25 +141,34 @@ test("resolves root-relative lock fragments into one deterministic resource clos
|
||||
}
|
||||
}`;
|
||||
const sources = new Map([
|
||||
["locks/web-studio.lock", `quixos-lock fragment version 1 {
|
||||
[
|
||||
"locks/web-studio.lock",
|
||||
`quixos-lock fragment version 1 {
|
||||
import "locks/shared.lock";
|
||||
interface Placeable source {
|
||||
repository "https://repos.example/alice/interface-placeable.git";
|
||||
commit "${namedCommit}";
|
||||
}
|
||||
}`],
|
||||
["locks/shared.lock", `quixos-lock fragment version 1 {
|
||||
}`,
|
||||
],
|
||||
[
|
||||
"locks/shared.lock",
|
||||
`quixos-lock fragment version 1 {
|
||||
interface Named source {
|
||||
repository "https://repos.example/alice/interface-named.git";
|
||||
commit "${namedCommit}";
|
||||
}
|
||||
}`],
|
||||
["locks/domain.lock", `quixos-lock fragment version 1 {
|
||||
}`,
|
||||
],
|
||||
[
|
||||
"locks/domain.lock",
|
||||
`quixos-lock fragment version 1 {
|
||||
package TodoRuntime source {
|
||||
repository "https://repos.example/alice/package-todo.git";
|
||||
commit "${packageCommit}";
|
||||
}
|
||||
}`],
|
||||
}`,
|
||||
],
|
||||
]);
|
||||
const result = await resolveQuixosLock(root, async (relativePath) => {
|
||||
const source = sources.get(relativePath);
|
||||
@@ -174,12 +183,15 @@ test("resolves root-relative lock fragments into one deterministic resource clos
|
||||
"locks/shared.lock",
|
||||
"locks/domain.lock",
|
||||
]);
|
||||
assert.deepEqual(result.lock.resources.map(({ kind, binding }) => ({ kind, binding })), [
|
||||
{ kind: "package", binding: "RootRuntime" },
|
||||
{ kind: "interface", binding: "Placeable" },
|
||||
{ kind: "interface", binding: "Named" },
|
||||
{ kind: "package", binding: "TodoRuntime" },
|
||||
]);
|
||||
assert.deepEqual(
|
||||
result.lock.resources.map(({ kind, binding }) => ({ kind, binding })),
|
||||
[
|
||||
{ kind: "package", binding: "RootRuntime" },
|
||||
{ kind: "interface", binding: "Placeable" },
|
||||
{ kind: "interface", binding: "Named" },
|
||||
{ kind: "package", binding: "TodoRuntime" },
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
test("lock fragments format canonically and cannot redeclare the Quixos source", () => {
|
||||
@@ -187,35 +199,43 @@ test("lock fragments format canonically and cannot redeclare the Quixos source",
|
||||
kind: "fragment" as const,
|
||||
formatVersion: 1 as const,
|
||||
imports: ["locks/shared.lock"],
|
||||
resources: [{
|
||||
kind: "interface" as const,
|
||||
binding: "Named",
|
||||
source: {
|
||||
resolver: "git" as const,
|
||||
repository: "https://repos.example/alice/interface-named.git",
|
||||
commit: namedCommit,
|
||||
resources: [
|
||||
{
|
||||
kind: "interface" as const,
|
||||
binding: "Named",
|
||||
source: {
|
||||
resolver: "git" as const,
|
||||
repository: "https://repos.example/alice/interface-named.git",
|
||||
commit: namedCommit,
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
};
|
||||
assert.deepEqual(parseQuixosLockDocument(formatQuixosLockDocument(document)), {
|
||||
ok: true,
|
||||
document,
|
||||
diagnostics: [],
|
||||
});
|
||||
const invalid = parseQuixosLockDocument(`quixos-lock fragment version 1 {
|
||||
const invalid = parseQuixosLockDocument(
|
||||
`quixos-lock fragment version 1 {
|
||||
quixos source {
|
||||
repository "https://gitea.example/quixos/quixos.git";
|
||||
commit "${quixosCommit}";
|
||||
}
|
||||
}`, "bad.lock");
|
||||
}`,
|
||||
"bad.lock",
|
||||
);
|
||||
assert.equal(invalid.ok, false);
|
||||
if (!invalid.ok) assert.equal(invalid.diagnostics[0]?.code, "fragment-has-quixos-source");
|
||||
});
|
||||
|
||||
test("lock imports reject traversal, cycles, root documents, and cross-file binding collisions", async () => {
|
||||
const invalidPath = parseQuixosLockDocument(`quixos-lock fragment version 1 {
|
||||
const invalidPath = parseQuixosLockDocument(
|
||||
`quixos-lock fragment version 1 {
|
||||
import "../outside.lock";
|
||||
}`, "bad-path.lock");
|
||||
}`,
|
||||
"bad-path.lock",
|
||||
);
|
||||
assert.equal(invalidPath.ok, false);
|
||||
if (!invalidPath.ok) assert.equal(invalidPath.diagnostics[0]?.code, "invalid-import-path");
|
||||
|
||||
@@ -232,24 +252,26 @@ test("lock imports reject traversal, cycles, root documents, and cross-file bind
|
||||
}
|
||||
}`;
|
||||
const sources = new Map([
|
||||
["a.lock", `quixos-lock fragment version 1 {
|
||||
[
|
||||
"a.lock",
|
||||
`quixos-lock fragment version 1 {
|
||||
import "b.lock";
|
||||
interface Named source {
|
||||
repository "https://repos.example/alice/interface-named-copy.git";
|
||||
commit "${namedCommit}";
|
||||
}
|
||||
}`],
|
||||
}`,
|
||||
],
|
||||
["b.lock", `quixos-lock fragment version 1 { import "a.lock"; }`],
|
||||
["root-again.lock", root],
|
||||
]);
|
||||
const result = await resolveQuixosLock(root, async (relativePath) => sources.get(relativePath) ?? "");
|
||||
assert.equal(result.ok, false);
|
||||
if (!result.ok) {
|
||||
assert.deepEqual(new Set(result.diagnostics.map(({ code }) => code)), new Set([
|
||||
"duplicate-resource-binding",
|
||||
"import-cycle",
|
||||
"imported-root-lock",
|
||||
]));
|
||||
assert.deepEqual(
|
||||
new Set(result.diagnostics.map(({ code }) => code)),
|
||||
new Set(["duplicate-resource-binding", "import-cycle", "imported-root-lock"]),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -260,13 +282,16 @@ test("file loading rejects a symlink in any import path component", async (conte
|
||||
await mkdir(outside);
|
||||
await writeFile(path.join(outside, "fragment.lock"), "quixos-lock fragment version 1 {}\n");
|
||||
await symlink(outside, path.join(directory, "linked"), "dir");
|
||||
await writeFile(path.join(directory, "quixos.lock"), `quixos-lock version 1 {
|
||||
await writeFile(
|
||||
path.join(directory, "quixos.lock"),
|
||||
`quixos-lock version 1 {
|
||||
quixos source {
|
||||
repository "https://gitea.example/quixos/quixos.git";
|
||||
commit "${quixosCommit}";
|
||||
}
|
||||
import "linked/fragment.lock";
|
||||
}`);
|
||||
}`,
|
||||
);
|
||||
|
||||
const result = await loadQuixosLock(path.join(directory, "quixos.lock"));
|
||||
assert.equal(result.ok, false);
|
||||
|
||||
Reference in New Issue
Block a user