Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/src/resources/extensions/quarto/confluence/test-suite.lua
12923 views
1
package.path = package.path .. ';../?.lua'
2
lu = require('luaunit')
3
4
local confluence = require('overrides')
5
6
TestModules = {}
7
function TestModules:testCaptionedImageExists()
8
lu.assertNotIsNil(confluence.CaptionedImageConfluence)
9
end
10
11
TestCaptionedImage = {}
12
function TestCaptionedImage:testBasic()
13
local expected = [[<ac:image
14
ac:align="center"
15
ac:layout="center"
16
ac:alt="fake-title">
17
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
18
</ac:image>]]
19
local source = 'fake-source'
20
local title = 'fake-title'
21
local caption = 'fake-caption'
22
local actual = confluence.CaptionedImageConfluence(source, title, caption)
23
24
lu.assertEquals(actual, expected)
25
end
26
function TestCaptionedImage:testBasicWithAnchor()
27
local expected = [[<p><ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:local-id="a6aa6f25-0bee-4a7f-929b-71fcb7eba592" ac:macro-id="d2cb5be1217ae6e086bc60005e9d27b7"><ac:parameter ac:name="">fake-id</ac:parameter></ac:structured-macro></p><ac:image
28
ac:align="center"
29
ac:layout="center"
30
ac:alt="fake-title">
31
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
32
</ac:image>]]
33
local source = 'fake-source'
34
local title = 'fake-title'
35
local caption = 'fake-caption'
36
local attributes = nil
37
local id = 'fake-id'
38
local actual = confluence.CaptionedImageConfluence(source, title, caption, attributes, id)
39
40
lu.assertEquals(actual, expected)
41
end
42
function TestCaptionedImage:testBasicWithAnchorEmptyId()
43
local expected = [[<ac:image
44
ac:align="center"
45
ac:layout="center"
46
ac:alt="fake-title">
47
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
48
</ac:image>]]
49
local source = 'fake-source'
50
local title = 'fake-title'
51
local caption = 'fake-caption'
52
local attributes = nil
53
local id = ''
54
local actual = confluence.CaptionedImageConfluence(source, title, caption, attributes, id)
55
56
lu.assertEquals(actual, expected)
57
end
58
function TestCaptionedImage:testEscapeCaption()
59
local expected = [[<ac:image
60
ac:align="center"
61
ac:layout="center"
62
ac:alt="fake-title">
63
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption&amp;</ac:caption>
64
</ac:image>]]
65
local source = 'fake-source'
66
local title = 'fake-title'
67
local caption = 'fake-caption&'
68
local actual = confluence.CaptionedImageConfluence(source, title, caption)
69
70
lu.assertEquals(actual, expected)
71
end
72
function TestCaptionedImage:testRemote()
73
local expected = [[<img src='https://d33wubrfki0l68.cloudfront.net/18153fb9953057ee5cff086122bd26f9cee8fe93/3aba9/images/notebook-run-chunk.png' title=''/>]]
74
local source = 'https://d33wubrfki0l68.cloudfront.net/18153fb9953057ee5cff086122bd26f9cee8fe93/3aba9/images/notebook-run-chunk.png'
75
local title = ''
76
local caption = ''
77
local actual = confluence.CaptionedImageConfluence(source, title, caption)
78
79
lu.assertEquals(actual, expected)
80
end
81
function TestCaptionedImage:testFigAltText()
82
local expected = [[<ac:image
83
ac:align="center"
84
ac:layout="center"
85
ac:alt="fake-alt">
86
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
87
</ac:image>]]
88
local source = 'fake-source'
89
local title = 'fake-title'
90
local caption = 'fake-caption'
91
local attr = {id = '', class = '', ['fig-alt'] = 'fake-alt'}
92
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
93
94
lu.assertEquals(actual, expected)
95
end
96
function TestCaptionedImage:testAlignLeft()
97
local expected = [[<ac:image
98
ac:align="left"
99
ac:layout="align-start"
100
ac:alt="fake-title">
101
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
102
</ac:image>]]
103
local source = 'fake-source'
104
local title = 'fake-title'
105
local caption = 'fake-caption'
106
local attr = {id = '', class = '', ['fig-align'] = 'left'}
107
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
108
109
lu.assertEquals(actual, expected)
110
end
111
function TestCaptionedImage:testAlignRight()
112
local expected = [[<ac:image
113
ac:align="right"
114
ac:layout="align-end"
115
ac:alt="fake-title">
116
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
117
</ac:image>]]
118
local source = 'fake-source'
119
local title = 'fake-title'
120
local caption = 'fake-caption'
121
local attr = {id = '', class = '', ['fig-align'] = 'right'}
122
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
123
124
lu.assertEquals(actual, expected)
125
end
126
127
function TestCaptionedImage:testWidth()
128
local expected = [[<ac:image
129
ac:align="center"
130
ac:layout="center"
131
ac:width="120"
132
ac:alt="fake-title">
133
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
134
</ac:image>]]
135
local source = 'fake-source'
136
local title = 'fake-title'
137
local caption = 'fake-caption'
138
local attr = {id = '', class = '', ['width'] = '120'}
139
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
140
141
lu.assertEquals(actual, expected)
142
end
143
function TestCaptionedImage:testWidthEmpty()
144
local expected = [[<ac:image
145
ac:align="center"
146
ac:layout="center"
147
ac:alt="fake-title">
148
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
149
</ac:image>]]
150
local source = 'fake-source'
151
local title = 'fake-title'
152
local caption = 'fake-caption'
153
local attr = {id = '', class = '', ['width'] = ''}
154
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
155
156
lu.assertEquals(actual, expected)
157
end
158
function TestCaptionedImage:testHeight()
159
local expected = [[<ac:image
160
ac:align="center"
161
ac:layout="center"
162
ac:height="90"
163
ac:alt="fake-title">
164
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
165
</ac:image>]]
166
local source = 'fake-source'
167
local title = 'fake-title'
168
local caption = 'fake-caption'
169
local attr = {id = '', class = '', ['height'] = '90'}
170
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
171
172
lu.assertEquals(actual, expected)
173
end
174
function TestCaptionedImage:testHeightEmpty()
175
local expected = [[<ac:image
176
ac:align="center"
177
ac:layout="center"
178
ac:alt="fake-title">
179
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
180
</ac:image>]]
181
local source = 'fake-source'
182
local title = 'fake-title'
183
local caption = 'fake-caption'
184
local attr = {id = '', class = '', ['height'] = ''}
185
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
186
187
lu.assertEquals(actual, expected)
188
end
189
190
function TestCaptionedImage:testBoth()
191
local expected = [[<ac:image
192
ac:align="center"
193
ac:layout="center"
194
ac:width="120"
195
ac:height="90"
196
ac:alt="fake-title">
197
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
198
</ac:image>]]
199
local source = 'fake-source'
200
local title = 'fake-title'
201
local caption = 'fake-caption'
202
local attr = {id = '', class = '', ['height'] = '90', ['width'] = '120'}
203
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
204
205
lu.assertEquals(actual, expected)
206
end
207
function TestCaptionedImage:testBothOneEmpty()
208
local expected = [[<ac:image
209
ac:align="center"
210
ac:layout="center"
211
ac:width="120"
212
ac:alt="fake-title">
213
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
214
</ac:image>]]
215
local source = 'fake-source'
216
local title = 'fake-title'
217
local caption = 'fake-caption'
218
local attr = {id = '', class = '', ['height'] = '', ['width'] = '120'}
219
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
220
221
lu.assertEquals(actual, expected)
222
end
223
function TestCaptionedImage:testBoth_BothEmpty()
224
local expected = [[<ac:image
225
ac:align="center"
226
ac:layout="center"
227
ac:alt="fake-title">
228
<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>
229
</ac:image>]]
230
local source = 'fake-source'
231
local title = 'fake-title'
232
local caption = 'fake-caption'
233
local attr = {id = '', class = '', ['height'] = '', ['width'] = ''}
234
local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)
235
236
lu.assertEquals(actual, expected)
237
end
238
239
240
TestCodeBlockConfluence = {}
241
function TestCodeBlockConfluence:testWithAllAttributes()
242
local expected = [[<ac:structured-macro
243
ac:name="code"
244
ac:schema-version="1"
245
ac:macro-id="1d1a2d13-0179-4d8f-b448-b28dfaceea4a">
246
<ac:parameter ac:name="language">python</ac:parameter>
247
<ac:plain-text-body>
248
<![CDATA[fake-codeValue{doubleBracket}>
249
</ac:plain-text-body>
250
</ac:structured-macro>]]
251
local codeValue = 'fake-codeValue'
252
local languageValue = 'python'
253
expected = confluence.interpolate{expected, doubleBracket = ']]'}
254
local actual = confluence.CodeBlockConfluence(codeValue, languageValue)
255
256
lu.assertEquals(actual, expected)
257
end
258
259
TestLinkConfluence = {}
260
function TestLinkConfluence:testExternal()
261
local expected = "<a href='http://fake-target' title='fake-title'>fake-source</a>"
262
local source = 'fake-source'
263
local target = 'http://fake-target'
264
local title = 'fake-title'
265
local attributes = {
266
class = 'fake-class'
267
}
268
expected = confluence.interpolate{expected, doubleBracket = ']]'}
269
local actual = confluence.LinkConfluence(source, target, title, attributes)
270
271
lu.assertEquals(actual, expected)
272
end
273
function TestLinkConfluence:testQMD()
274
local expected = [[<a href='fake-target.qmd' title='fake-title'>fake-source</a>]]
275
local source = 'fake-source'
276
local target = 'fake-target.qmd'
277
local title = 'fake-title'
278
local attributes = {
279
class = 'fake-class'
280
}
281
expected = confluence.interpolate{expected, doubleBracket = ']]'}
282
local actual = confluence.LinkConfluence(source, target, title, attributes)
283
284
lu.assertEquals(actual, expected)
285
end
286
function TestLinkConfluence:testQMDAnchor()
287
local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake-source</a>"
288
local source = 'fake-source'
289
local target = 'fake-target.qmd#Fake-Anchor'
290
local title = 'fake-title'
291
local attributes = {
292
class = 'fake-class'
293
}
294
expected = confluence.interpolate{expected, doubleBracket = ']]'}
295
local actual = confluence.LinkConfluence(source, target, title, attributes)
296
297
lu.assertEquals(actual, expected)
298
end
299
function TestLinkConfluence:testLineBreakRemove_double()
300
local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake source</a>"
301
local source = 'fake\n\nsource'
302
local target = 'fake-target.qmd#Fake-Anchor'
303
local title = 'fake-title'
304
local attributes = {
305
class = 'fake-class'
306
}
307
expected = confluence.interpolate{expected, doubleBracket = ']]'}
308
local actual = confluence.LinkConfluence(source, target, title, attributes)
309
310
lu.assertEquals(actual, expected)
311
end
312
function TestLinkConfluence:testLineBreakRemove_nbsp()
313
local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake source</a>"
314
local source = 'fake\n \nsource'
315
local target = 'fake-target.qmd#Fake-Anchor'
316
local title = 'fake-title'
317
local attributes = {
318
class = 'fake-class'
319
}
320
expected = confluence.interpolate{expected, doubleBracket = ']]'}
321
local actual = confluence.LinkConfluence(source, target, title, attributes)
322
323
lu.assertEquals(actual, expected)
324
end
325
function TestLinkConfluence:testLineBreakRemove_parens()
326
local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake(1)source</a>"
327
local source = 'fake(\n1\n)source'
328
local target = 'fake-target.qmd#Fake-Anchor'
329
local title = 'fake-title'
330
local attributes = {
331
class = 'fake-class'
332
}
333
expected = confluence.interpolate{expected, doubleBracket = ']]'}
334
local actual = confluence.LinkConfluence(source, target, title, attributes)
335
336
lu.assertEquals(actual, expected)
337
end
338
function TestLinkConfluence:testAttachment()
339
--5815-bug-confluence-links-to-file-attachments-not-supported
340
local expected = [[<ac:link><ri:attachment ri:filename="fake-target"/><ac:plain-text-link-body><![CDATA[fake-source{doubleBracket}></ac:plain-text-link-body></ac:link>]]
341
expected = confluence.interpolate{expected, doubleBracket = ']]'}
342
local source = 'fake-source'
343
local target = 'fake-target'
344
local title = 'fake-title'
345
local attributes = {
346
class = 'fake-class'
347
}
348
expected = confluence.interpolate{expected, doubleBracket = ']]'}
349
local actual = confluence.LinkConfluence(source, target, title, attributes)
350
351
lu.assertEquals(actual, expected)
352
end
353
TestCalloutConfluence = {}
354
function TestCalloutConfluence:testBasicNote()
355
local expected = [[<ac:structured-macro ac:name="info" ac:schema-version="1" ac:macro-id="1c8062cd-87de-4701-a698-fd435e057468"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
356
local type = 'note'
357
local content = "fake-content"
358
local actual = confluence.CalloutConfluence(type, content)
359
lu.assertEquals(actual, expected)
360
end
361
function TestCalloutConfluence:testBasicWarning()
362
local expected = [[<ac:structured-macro ac:name="note" ac:schema-version="1" ac:macro-id="1049a0d8-470f-4f83-a0d7-b6ad35ea8eda"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
363
local type = 'warning'
364
local content = "fake-content"
365
local actual = confluence.CalloutConfluence(type, content)
366
lu.assertEquals(actual, expected)
367
end
368
function TestCalloutConfluence:testBasicImportant()
369
local expected = [[<ac:structured-macro ac:name="warning" ac:schema-version="1" ac:macro-id="0185f821-7aa4-404a-8748-ec59a46357e1"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
370
local type = 'important'
371
local content = "fake-content"
372
local actual = confluence.CalloutConfluence(type, content)
373
lu.assertEquals(actual, expected)
374
end
375
function TestCalloutConfluence:testBasicTip()
376
local expected = [[<ac:structured-macro ac:name="tip" ac:schema-version="1" ac:macro-id="97c39328-9651-4c56-8a8c-ab5537001d86"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
377
local type = 'tip'
378
local content = "fake-content"
379
local actual = confluence.CalloutConfluence(type, content)
380
lu.assertEquals(actual, expected)
381
end
382
function TestCalloutConfluence:testBasicCaution()
383
local expected = [[<ac:structured-macro ac:name="note" ac:schema-version="1" ac:macro-id="1049a0d8-470f-4f83-a0d7-b6ad35ea8eda"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
384
local type = 'caution'
385
local content = "fake-content"
386
local actual = confluence.CalloutConfluence(type, content)
387
lu.assertEquals(actual, expected)
388
end
389
function TestCalloutConfluence:testInvalidType()
390
local expected = [[<ac:structured-macro ac:name="info" ac:schema-version="1" ac:macro-id="1c8062cd-87de-4701-a698-fd435e057468"><ac:rich-text-body>fake-content</ac:rich-text-body></ac:structured-macro>]]
391
local type = 'invalid-type'
392
local content = "fake-content"
393
local actual = confluence.CalloutConfluence(type, content)
394
lu.assertEquals(actual, expected)
395
end
396
397
local function checkRawInlineConfluence (value, expected)
398
local actual = confluence.RawInlineConfluence(value)
399
lu.assertEquals(actual, expected)
400
end
401
TestRawInlineConfluence_BR = {}
402
function TestRawInlineConfluence_BR:testBasicString()
403
checkRawInlineConfluence("Hello World", "Hello World")
404
end
405
function TestRawInlineConfluence_BR:testBRClosed()
406
checkRawInlineConfluence("<br/>", "<br/>")
407
end
408
function TestRawInlineConfluence_BR:testBROpen()
409
checkRawInlineConfluence("<br>", "<br/>")
410
end
411
function TestRawInlineConfluence_BR:testBROpenMixedCase()
412
checkRawInlineConfluence("<bR>", "<br/>")
413
checkRawInlineConfluence("<BR>", "<br/>")
414
checkRawInlineConfluence("<Br>", "<br/>")
415
end
416
function TestRawInlineConfluence_BR:testEmpty()
417
checkRawInlineConfluence("", "")
418
end
419
function TestRawInlineConfluence_BR:testNil()
420
checkRawInlineConfluence(nil, nil)
421
end
422
function TestRawInlineConfluence_BR:testNil()
423
checkRawInlineConfluence(nil, nil)
424
end
425
function TestRawInlineConfluence_BR:testPartial()
426
checkRawInlineConfluence("<br", "<br")
427
end
428
function TestRawInlineConfluence_BR:testDouble()
429
checkRawInlineConfluence("<br//>", "<br//>")
430
end
431
432
TestRawInlineConfluence_IMG = {}
433
function TestRawInlineConfluence_IMG:testClosed()
434
checkRawInlineConfluence([[<img src="fake-source"/>]], [[<img src="fake-source"/>]])
435
end
436
function TestRawInlineConfluence_IMG:testOpen()
437
checkRawInlineConfluence([[<img src="fake-source">]], [[<img src="fake-source"/>]])
438
end
439
function TestRawInlineConfluence_IMG:testNotImageNoClose()
440
checkRawInlineConfluence([[<imgz src="fake-source">]], [[<imgz src="fake-source">]])
441
end
442
function TestRawInlineConfluence_IMG:testNoSourceClose()
443
checkRawInlineConfluence([[<img >]], [[<img />]])
444
end
445
446
TestBuildAnchorConfluence = {}
447
function TestBuildAnchorConfluence:testBasicAnchor()
448
local expected = [[<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:local-id="a6aa6f25-0bee-4a7f-929b-71fcb7eba592" ac:macro-id="d2cb5be1217ae6e086bc60005e9d27b7"><ac:parameter ac:name="">fake-id</ac:parameter></ac:structured-macro>]]
449
local id = 'fake-id'
450
local actual = confluence.HTMLAnchorConfluence(id)
451
lu.assertEquals(actual, expected)
452
end
453
function TestBuildAnchorConfluence:testNoWhitespaceRemoval()
454
local expected = [[<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:local-id="a6aa6f25-0bee-4a7f-929b-71fcb7eba592" ac:macro-id="d2cb5be1217ae6e086bc60005e9d27b7"><ac:parameter ac:name="">fake-id with spaces</ac:parameter></ac:structured-macro>]]
455
local id = 'fake-id with spaces'
456
local actual = confluence.HTMLAnchorConfluence(id)
457
lu.assertEquals(actual, expected)
458
end
459
function TestBuildAnchorConfluence:testCanNotBeEmpty()
460
local expected = ""
461
local id = ''
462
local actual = confluence.HTMLAnchorConfluence(id)
463
lu.assertEquals(actual, expected)
464
end
465
466
os.exit(lu.LuaUnit.run())
467
468