Implement reusable interface conformance rules
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { qxSourceManifest } from "../src/capability-language/source-loader.js";
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
import { mkdtemp, writeFile, readFile, rm, symlink } from "node:fs/promises";
|
||||
@@ -119,3 +120,21 @@ test("lowering diagnostics map to the imported file", async () => {
|
||||
assert.equal(position.fileName, "bad.qx");
|
||||
assert.equal(position.line, 2);
|
||||
});
|
||||
|
||||
test("source manifests include resource imports in deduplicated workspace fragments", async (t) => {
|
||||
const root = await mkdtemp(path.join(os.tmpdir(), "qx-source-manifest-"));
|
||||
t.after(() => rm(root, { recursive: true, force: true }));
|
||||
await writeFile(
|
||||
path.join(root, "workspace.qx"),
|
||||
addWorkspaceImport(addWorkspaceImport(workspace, "left.qx"), "right.qx"),
|
||||
);
|
||||
await writeFile(path.join(root, "left.qx"), 'fragment {import "rules.qx";}');
|
||||
await writeFile(path.join(root, "right.qx"), 'fragment {import "rules.qx";}');
|
||||
await writeFile(path.join(root, "rules.qx"), "fragment {import interface Person; import package Runtime;}");
|
||||
const manifest = await qxSourceManifest(root);
|
||||
assert.deepEqual(manifest.imports, [
|
||||
{ kind: "interface", binding: "Person" },
|
||||
{ kind: "package", binding: "Runtime" },
|
||||
]);
|
||||
assert.deepEqual([...manifest.sourceFiles].sort(), ["left.qx", "right.qx", "rules.qx", "workspace.qx"]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user