Path: blob/main/src/resources/extensions/quarto/confluence/test-suite.lua
12923 views
package.path = package.path .. ';../?.lua'1lu = require('luaunit')23local confluence = require('overrides')45TestModules = {}6function TestModules:testCaptionedImageExists()7lu.assertNotIsNil(confluence.CaptionedImageConfluence)8end910TestCaptionedImage = {}11function TestCaptionedImage:testBasic()12local expected = [[<ac:image13ac:align="center"14ac:layout="center"15ac:alt="fake-title">16<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>17</ac:image>]]18local source = 'fake-source'19local title = 'fake-title'20local caption = 'fake-caption'21local actual = confluence.CaptionedImageConfluence(source, title, caption)2223lu.assertEquals(actual, expected)24end25function TestCaptionedImage:testBasicWithAnchor()26local 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:image27ac:align="center"28ac:layout="center"29ac:alt="fake-title">30<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>31</ac:image>]]32local source = 'fake-source'33local title = 'fake-title'34local caption = 'fake-caption'35local attributes = nil36local id = 'fake-id'37local actual = confluence.CaptionedImageConfluence(source, title, caption, attributes, id)3839lu.assertEquals(actual, expected)40end41function TestCaptionedImage:testBasicWithAnchorEmptyId()42local expected = [[<ac:image43ac:align="center"44ac:layout="center"45ac:alt="fake-title">46<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>47</ac:image>]]48local source = 'fake-source'49local title = 'fake-title'50local caption = 'fake-caption'51local attributes = nil52local id = ''53local actual = confluence.CaptionedImageConfluence(source, title, caption, attributes, id)5455lu.assertEquals(actual, expected)56end57function TestCaptionedImage:testEscapeCaption()58local expected = [[<ac:image59ac:align="center"60ac:layout="center"61ac:alt="fake-title">62<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption&</ac:caption>63</ac:image>]]64local source = 'fake-source'65local title = 'fake-title'66local caption = 'fake-caption&'67local actual = confluence.CaptionedImageConfluence(source, title, caption)6869lu.assertEquals(actual, expected)70end71function TestCaptionedImage:testRemote()72local expected = [[<img src='https://d33wubrfki0l68.cloudfront.net/18153fb9953057ee5cff086122bd26f9cee8fe93/3aba9/images/notebook-run-chunk.png' title=''/>]]73local source = 'https://d33wubrfki0l68.cloudfront.net/18153fb9953057ee5cff086122bd26f9cee8fe93/3aba9/images/notebook-run-chunk.png'74local title = ''75local caption = ''76local actual = confluence.CaptionedImageConfluence(source, title, caption)7778lu.assertEquals(actual, expected)79end80function TestCaptionedImage:testFigAltText()81local expected = [[<ac:image82ac:align="center"83ac:layout="center"84ac:alt="fake-alt">85<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>86</ac:image>]]87local source = 'fake-source'88local title = 'fake-title'89local caption = 'fake-caption'90local attr = {id = '', class = '', ['fig-alt'] = 'fake-alt'}91local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)9293lu.assertEquals(actual, expected)94end95function TestCaptionedImage:testAlignLeft()96local expected = [[<ac:image97ac:align="left"98ac:layout="align-start"99ac:alt="fake-title">100<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>101</ac:image>]]102local source = 'fake-source'103local title = 'fake-title'104local caption = 'fake-caption'105local attr = {id = '', class = '', ['fig-align'] = 'left'}106local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)107108lu.assertEquals(actual, expected)109end110function TestCaptionedImage:testAlignRight()111local expected = [[<ac:image112ac:align="right"113ac:layout="align-end"114ac:alt="fake-title">115<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>116</ac:image>]]117local source = 'fake-source'118local title = 'fake-title'119local caption = 'fake-caption'120local attr = {id = '', class = '', ['fig-align'] = 'right'}121local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)122123lu.assertEquals(actual, expected)124end125126function TestCaptionedImage:testWidth()127local expected = [[<ac:image128ac:align="center"129ac:layout="center"130ac:width="120"131ac:alt="fake-title">132<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>133</ac:image>]]134local source = 'fake-source'135local title = 'fake-title'136local caption = 'fake-caption'137local attr = {id = '', class = '', ['width'] = '120'}138local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)139140lu.assertEquals(actual, expected)141end142function TestCaptionedImage:testWidthEmpty()143local expected = [[<ac:image144ac:align="center"145ac:layout="center"146ac:alt="fake-title">147<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>148</ac:image>]]149local source = 'fake-source'150local title = 'fake-title'151local caption = 'fake-caption'152local attr = {id = '', class = '', ['width'] = ''}153local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)154155lu.assertEquals(actual, expected)156end157function TestCaptionedImage:testHeight()158local expected = [[<ac:image159ac:align="center"160ac:layout="center"161ac:height="90"162ac:alt="fake-title">163<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>164</ac:image>]]165local source = 'fake-source'166local title = 'fake-title'167local caption = 'fake-caption'168local attr = {id = '', class = '', ['height'] = '90'}169local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)170171lu.assertEquals(actual, expected)172end173function TestCaptionedImage:testHeightEmpty()174local expected = [[<ac:image175ac:align="center"176ac:layout="center"177ac:alt="fake-title">178<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>179</ac:image>]]180local source = 'fake-source'181local title = 'fake-title'182local caption = 'fake-caption'183local attr = {id = '', class = '', ['height'] = ''}184local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)185186lu.assertEquals(actual, expected)187end188189function TestCaptionedImage:testBoth()190local expected = [[<ac:image191ac:align="center"192ac:layout="center"193ac:width="120"194ac:height="90"195ac:alt="fake-title">196<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>197</ac:image>]]198local source = 'fake-source'199local title = 'fake-title'200local caption = 'fake-caption'201local attr = {id = '', class = '', ['height'] = '90', ['width'] = '120'}202local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)203204lu.assertEquals(actual, expected)205end206function TestCaptionedImage:testBothOneEmpty()207local expected = [[<ac:image208ac:align="center"209ac:layout="center"210ac:width="120"211ac:alt="fake-title">212<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>213</ac:image>]]214local source = 'fake-source'215local title = 'fake-title'216local caption = 'fake-caption'217local attr = {id = '', class = '', ['height'] = '', ['width'] = '120'}218local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)219220lu.assertEquals(actual, expected)221end222function TestCaptionedImage:testBoth_BothEmpty()223local expected = [[<ac:image224ac:align="center"225ac:layout="center"226ac:alt="fake-title">227<ri:attachment ri:filename="fake-source" /><ac:caption>fake-caption</ac:caption>228</ac:image>]]229local source = 'fake-source'230local title = 'fake-title'231local caption = 'fake-caption'232local attr = {id = '', class = '', ['height'] = '', ['width'] = ''}233local actual = confluence.CaptionedImageConfluence(source, title, caption, attr)234235lu.assertEquals(actual, expected)236end237238239TestCodeBlockConfluence = {}240function TestCodeBlockConfluence:testWithAllAttributes()241local expected = [[<ac:structured-macro242ac:name="code"243ac:schema-version="1"244ac:macro-id="1d1a2d13-0179-4d8f-b448-b28dfaceea4a">245<ac:parameter ac:name="language">python</ac:parameter>246<ac:plain-text-body>247<![CDATA[fake-codeValue{doubleBracket}>248</ac:plain-text-body>249</ac:structured-macro>]]250local codeValue = 'fake-codeValue'251local languageValue = 'python'252expected = confluence.interpolate{expected, doubleBracket = ']]'}253local actual = confluence.CodeBlockConfluence(codeValue, languageValue)254255lu.assertEquals(actual, expected)256end257258TestLinkConfluence = {}259function TestLinkConfluence:testExternal()260local expected = "<a href='http://fake-target' title='fake-title'>fake-source</a>"261local source = 'fake-source'262local target = 'http://fake-target'263local title = 'fake-title'264local attributes = {265class = 'fake-class'266}267expected = confluence.interpolate{expected, doubleBracket = ']]'}268local actual = confluence.LinkConfluence(source, target, title, attributes)269270lu.assertEquals(actual, expected)271end272function TestLinkConfluence:testQMD()273local expected = [[<a href='fake-target.qmd' title='fake-title'>fake-source</a>]]274local source = 'fake-source'275local target = 'fake-target.qmd'276local title = 'fake-title'277local attributes = {278class = 'fake-class'279}280expected = confluence.interpolate{expected, doubleBracket = ']]'}281local actual = confluence.LinkConfluence(source, target, title, attributes)282283lu.assertEquals(actual, expected)284end285function TestLinkConfluence:testQMDAnchor()286local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake-source</a>"287local source = 'fake-source'288local target = 'fake-target.qmd#Fake-Anchor'289local title = 'fake-title'290local attributes = {291class = 'fake-class'292}293expected = confluence.interpolate{expected, doubleBracket = ']]'}294local actual = confluence.LinkConfluence(source, target, title, attributes)295296lu.assertEquals(actual, expected)297end298function TestLinkConfluence:testLineBreakRemove_double()299local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake source</a>"300local source = 'fake\n\nsource'301local target = 'fake-target.qmd#Fake-Anchor'302local title = 'fake-title'303local attributes = {304class = 'fake-class'305}306expected = confluence.interpolate{expected, doubleBracket = ']]'}307local actual = confluence.LinkConfluence(source, target, title, attributes)308309lu.assertEquals(actual, expected)310end311function TestLinkConfluence:testLineBreakRemove_nbsp()312local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake source</a>"313local source = 'fake\n \nsource'314local target = 'fake-target.qmd#Fake-Anchor'315local title = 'fake-title'316local attributes = {317class = 'fake-class'318}319expected = confluence.interpolate{expected, doubleBracket = ']]'}320local actual = confluence.LinkConfluence(source, target, title, attributes)321322lu.assertEquals(actual, expected)323end324function TestLinkConfluence:testLineBreakRemove_parens()325local expected = "<a href='fake-target.qmd#Fake-Anchor' title='fake-title'>fake(1)source</a>"326local source = 'fake(\n1\n)source'327local target = 'fake-target.qmd#Fake-Anchor'328local title = 'fake-title'329local attributes = {330class = 'fake-class'331}332expected = confluence.interpolate{expected, doubleBracket = ']]'}333local actual = confluence.LinkConfluence(source, target, title, attributes)334335lu.assertEquals(actual, expected)336end337function TestLinkConfluence:testAttachment()338--5815-bug-confluence-links-to-file-attachments-not-supported339local 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>]]340expected = confluence.interpolate{expected, doubleBracket = ']]'}341local source = 'fake-source'342local target = 'fake-target'343local title = 'fake-title'344local attributes = {345class = 'fake-class'346}347expected = confluence.interpolate{expected, doubleBracket = ']]'}348local actual = confluence.LinkConfluence(source, target, title, attributes)349350lu.assertEquals(actual, expected)351end352TestCalloutConfluence = {}353function TestCalloutConfluence:testBasicNote()354local 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>]]355local type = 'note'356local content = "fake-content"357local actual = confluence.CalloutConfluence(type, content)358lu.assertEquals(actual, expected)359end360function TestCalloutConfluence:testBasicWarning()361local 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>]]362local type = 'warning'363local content = "fake-content"364local actual = confluence.CalloutConfluence(type, content)365lu.assertEquals(actual, expected)366end367function TestCalloutConfluence:testBasicImportant()368local 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>]]369local type = 'important'370local content = "fake-content"371local actual = confluence.CalloutConfluence(type, content)372lu.assertEquals(actual, expected)373end374function TestCalloutConfluence:testBasicTip()375local 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>]]376local type = 'tip'377local content = "fake-content"378local actual = confluence.CalloutConfluence(type, content)379lu.assertEquals(actual, expected)380end381function TestCalloutConfluence:testBasicCaution()382local 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>]]383local type = 'caution'384local content = "fake-content"385local actual = confluence.CalloutConfluence(type, content)386lu.assertEquals(actual, expected)387end388function TestCalloutConfluence:testInvalidType()389local 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>]]390local type = 'invalid-type'391local content = "fake-content"392local actual = confluence.CalloutConfluence(type, content)393lu.assertEquals(actual, expected)394end395396local function checkRawInlineConfluence (value, expected)397local actual = confluence.RawInlineConfluence(value)398lu.assertEquals(actual, expected)399end400TestRawInlineConfluence_BR = {}401function TestRawInlineConfluence_BR:testBasicString()402checkRawInlineConfluence("Hello World", "Hello World")403end404function TestRawInlineConfluence_BR:testBRClosed()405checkRawInlineConfluence("<br/>", "<br/>")406end407function TestRawInlineConfluence_BR:testBROpen()408checkRawInlineConfluence("<br>", "<br/>")409end410function TestRawInlineConfluence_BR:testBROpenMixedCase()411checkRawInlineConfluence("<bR>", "<br/>")412checkRawInlineConfluence("<BR>", "<br/>")413checkRawInlineConfluence("<Br>", "<br/>")414end415function TestRawInlineConfluence_BR:testEmpty()416checkRawInlineConfluence("", "")417end418function TestRawInlineConfluence_BR:testNil()419checkRawInlineConfluence(nil, nil)420end421function TestRawInlineConfluence_BR:testNil()422checkRawInlineConfluence(nil, nil)423end424function TestRawInlineConfluence_BR:testPartial()425checkRawInlineConfluence("<br", "<br")426end427function TestRawInlineConfluence_BR:testDouble()428checkRawInlineConfluence("<br//>", "<br//>")429end430431TestRawInlineConfluence_IMG = {}432function TestRawInlineConfluence_IMG:testClosed()433checkRawInlineConfluence([[<img src="fake-source"/>]], [[<img src="fake-source"/>]])434end435function TestRawInlineConfluence_IMG:testOpen()436checkRawInlineConfluence([[<img src="fake-source">]], [[<img src="fake-source"/>]])437end438function TestRawInlineConfluence_IMG:testNotImageNoClose()439checkRawInlineConfluence([[<imgz src="fake-source">]], [[<imgz src="fake-source">]])440end441function TestRawInlineConfluence_IMG:testNoSourceClose()442checkRawInlineConfluence([[<img >]], [[<img />]])443end444445TestBuildAnchorConfluence = {}446function TestBuildAnchorConfluence:testBasicAnchor()447local 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>]]448local id = 'fake-id'449local actual = confluence.HTMLAnchorConfluence(id)450lu.assertEquals(actual, expected)451end452function TestBuildAnchorConfluence:testNoWhitespaceRemoval()453local 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>]]454local id = 'fake-id with spaces'455local actual = confluence.HTMLAnchorConfluence(id)456lu.assertEquals(actual, expected)457end458function TestBuildAnchorConfluence:testCanNotBeEmpty()459local expected = ""460local id = ''461local actual = confluence.HTMLAnchorConfluence(id)462lu.assertEquals(actual, expected)463end464465os.exit(lu.LuaUnit.run())466467468