Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/tests/unit/project/utils.ts
12925 views
1
/*
2
* utils.ts
3
*
4
* Test utilities for project-related unit tests
5
*
6
* Copyright (C) 2026 Posit Software, PBC
7
*/
8
9
import { ProjectContext } from "../../../src/project/types.ts";
10
import { FileInformationCacheMap } from "../../../src/project/project-shared.ts";
11
12
/**
13
* Create a minimal mock ProjectContext for testing.
14
*
15
* @param options.dir - The project directory (defaults to a temp directory)
16
* @param options.isSingleFile - Whether this is a single-file project (defaults to false)
17
* @param options.config - Project config (defaults to { project: {} })
18
* @returns A mock ProjectContext suitable for unit testing
19
*/
20
export function createMockProjectContext(
21
options?: {
22
dir?: string;
23
isSingleFile?: boolean;
24
config?: ProjectContext["config"];
25
},
26
): ProjectContext {
27
const projectDir = options?.dir ??
28
Deno.makeTempDirSync({ prefix: "quarto-test" });
29
const ownsDir = options?.dir === undefined;
30
31
return {
32
dir: projectDir,
33
engines: [],
34
files: { input: [] },
35
config: options?.config ?? { project: {} },
36
notebookContext: {} as ProjectContext["notebookContext"],
37
fileInformationCache: new FileInformationCacheMap(),
38
resolveBrand: () => Promise.resolve(undefined),
39
resolveFullMarkdownForFile: () => Promise.resolve({} as never),
40
fileExecutionEngineAndTarget: () => Promise.resolve({} as never),
41
fileMetadata: () => Promise.resolve({}),
42
environment: () => Promise.resolve({} as never),
43
renderFormats: () => Promise.resolve({}),
44
clone: function () {
45
return this;
46
},
47
isSingleFile: options?.isSingleFile ?? false,
48
diskCache: {} as ProjectContext["diskCache"],
49
temp: {} as ProjectContext["temp"],
50
cleanup: () => {
51
if (ownsDir) {
52
try {
53
Deno.removeSync(projectDir, { recursive: true });
54
} catch {
55
// Ignore cleanup errors in tests
56
}
57
}
58
},
59
} as ProjectContext;
60
}
61
62