Add specs for pandoc markdown renderer

This commit is contained in:
2025-06-16 20:18:05 -07:00
parent 070bac262f
commit 26f77eab9a
3 changed files with 124 additions and 19 deletions

43
spec/factory.moon Normal file
View File

@@ -0,0 +1,43 @@
original_Site = require "sitegen.site"
page = require "sitegen.page"
site_file = require "sitegen.site_file"
local *
next_counter = do
counters = setmetatable {}, __index: => 1
(name) ->
with counters[name]
counters[name] += 1
original_Site.default_plugins = for v in *original_Site.default_plugins
if v\find "pygments" then continue else v
Site = (opts={}) ->
opts.rel_path or= "."
original_Site site_file.SiteFile {
rel_path: opts.rel_path
}
Page = (opts={}) ->
opts.site or= Site!
base = "some_page_#{next_counter "page"}"
opts.meta or= {}
opts.source or= "#{base}.md"
opts.target or= "www/#{base}.html"
opts.render_fn or= ->
opts.read = -> error "read disabled"
opts.write = -> error "write disabled"
setmetatable opts, page.Page.__base
opts.site.pages or= {}
table.insert opts.site.pages, opts
opts
{ :Site, :Page }

71
spec/renderers_spec.moon Normal file
View File

@@ -0,0 +1,71 @@
factory = require "spec.factory"
import trim from require "sitegen.common"
flatten_html = (html) ->
trim (html\gsub "%>%s+%<", "><")
describe "renderers", ->
render_for_site = (site, renderer, str, meta={}, page) ->
page or= factory.Page(:site)
page.render_fn, page.meta = renderer\load str
page.meta.template = false
for k,v in pairs meta
page.meta[k] = v
page\render!
describe "renderers.markdown", ->
local site, renderer
render = (...) -> render_for_site site, renderer, ...
before_each ->
MarkdownRenderer = require "renderers.markdown"
site = factory.Site!
renderer = MarkdownRenderer site
it "syntax highlights some code", ->
out = flatten_html render [[
```lua
print("hello world")
```]]
assert.same [[<div class="highlight"><pre><span></span><code><span class="py-nb">print</span><span class="py-p">(</span><span class="py-s2">&quot;hello world&quot;</span><span class="py-p">)</span></code></pre></div>]], out
it "doesnt highlight code inside of a cosmo template", ->
site.user_vars.hello = (_, args) ->
{ template } = args
template
out = flatten_html render [=[
```lua
print 5
```
$hello{[[
```lua
print thing
```
]]}]=]
assert.same [=[<div class="highlight"><pre><span></span><code><span class="py-nb">print</span><span class="py-mi">5</span></code></pre></div><p>
```lua
print thing
```
</p>]=], out
it "doesn't highlight unrecognized code languages", ->
out = flatten_html render [[
```snickerdoodle
this code block has an unknown label
```]]
assert.same [[<div class="sourceCode"><pre class="sourceCode"><code>this code block has an unknown label</code></pre></div>]], out
it "defaults to pandoc highlighting when pygments fails to recognize code language", ->
out = flatten_html render [[
```heex
<.greet name="Jane" />
```]]
assert.same [[<div class="sourceCode" id="cb1"><pre
class="sourceCode heex"><code class="sourceCode elixir"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="op">&lt;.</span>greet name<span class="op">=</span><span class="st">&quot;Jane&quot;</span><span class="op">/&gt;</span></span></code></pre></div>]], out