Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/tests/smoke/render/render-format-extension.test.ts
12921 views
1
/*
2
* render-format-extension.test.ts
3
*
4
* Copyright (C) 2020-2022 Posit Software, PBC
5
*/
6
7
// TODO re-enable the ACM tests once the template has been updated
8
9
// This test file focuses on rendering documents with journal extensions.
10
// It tests HTML formats, PDF formats, and format variants (e.g., elsevier-pdf+foobar).
11
// Note: extension-render-journals.test.ts tests template scaffolding (quarto use template).
12
// Both files serve different purposes and should remain separate.
13
14
import { safeRemoveSync } from "../../../src/core/path.ts";
15
import { docs } from "../../utils.ts";
16
import { quarto } from "../../../src/quarto.ts";
17
18
import { testRender } from "./render.ts";
19
20
// Update extensions to latest versions before testing
21
// Falls back to committed versions on network failure
22
//
23
// Maintenance note: Committed extension files serve as fallback for offline/CI
24
// failure scenarios. They don't need frequent updates since tests always fetch
25
// latest versions. When extension-related issues occur, consider updating the
26
// committed files to document the working version (see commits c3149a9ba and
27
// b8421caf9 for example).
28
const updateExtensions = async () => {
29
try {
30
console.log("Updating quarto-journals extensions to latest versions...");
31
const wd = Deno.cwd();
32
Deno.chdir(docs("extensions/format/academic"));
33
34
for (const repo of ["acs", "elsevier"]) {
35
await quarto([
36
"update",
37
"extension",
38
`quarto-journals/${repo}`,
39
"--no-prompt",
40
]);
41
}
42
43
Deno.chdir(wd);
44
console.log("Extensions updated successfully");
45
} catch (error) {
46
const message = error instanceof Error ? error.message : String(error);
47
console.warn(`Failed to update extensions: ${message}`);
48
console.warn("Falling back to committed extension versions");
49
}
50
};
51
52
// Some HTML tests
53
testRender(docs("extensions/format/academic/document.qmd"), "html", false);
54
// testRender(docs("extensions/format/academic/document.qmd"), "acm-html", false);
55
testRender(
56
docs("extensions/format/academic/document.qmd"),
57
"acs-html",
58
false,
59
[],
60
{ setup: updateExtensions },
61
);
62
testRender(
63
docs("extensions/format/academic/document.qmd"),
64
"elsevier-html",
65
false,
66
[],
67
{ setup: updateExtensions },
68
);
69
70
// some PDF tests
71
testRender(docs("extensions/format/academic/document.qmd"), "pdf", true);
72
// testRender(
73
// docs("extensions/format/academic/document.qmd"),
74
// "acm-pdf",
75
// true,
76
// [],
77
// {
78
// teardown: async () => {
79
// await Deno.remove(docs("extensions/format/academic/sensys-abstract.cls"));
80
// await Deno.remove(
81
// docs("extensions/format/academic/acm_proc_article-sp.cls"),
82
// );
83
// },
84
// },
85
// );
86
testRender(
87
docs("extensions/format/academic/document.qmd"),
88
"acs-pdf",
89
true,
90
[],
91
{
92
setup: updateExtensions,
93
// deno-lint-ignore require-await
94
teardown: async () => {
95
// Clean up files generated by the acs extension
96
safeRemoveSync(docs("extensions/format/academic/acs-document.bib"));
97
safeRemoveSync(docs("extensions/format/academic/achemso.bst"));
98
},
99
},
100
);
101
testRender(
102
docs("extensions/format/academic/document.qmd"),
103
"elsevier-pdf",
104
true,
105
[],
106
{
107
setup: updateExtensions,
108
// deno-lint-ignore require-await
109
teardown: async () => {
110
// Clean up files generated by the elsevier extension
111
safeRemoveSync(docs("extensions/format/academic/document.spl"));
112
safeRemoveSync(docs("extensions/format/academic/elsarticle.cls"));
113
safeRemoveSync(docs("extensions/format/academic/elsarticle-num.bst"));
114
},
115
},
116
);
117
118
// Funky format string test
119
testRender(
120
docs("extensions/format/academic/document.qmd"),
121
"elsevier-pdf+foobar",
122
true,
123
[],
124
{
125
setup: updateExtensions,
126
// deno-lint-ignore require-await
127
teardown: async () => {
128
// Clean up files generated by the elsevier extension
129
safeRemoveSync(docs("extensions/format/academic/document+foobar.spl"));
130
safeRemoveSync(docs("extensions/format/academic/elsarticle.cls"));
131
safeRemoveSync(docs("extensions/format/academic/elsarticle-num.bst"));
132
},
133
},
134
);
135
136