Problem: setup() mixed array entries (preset names) and hash entries (custom providers keyed by filetype), requiring verbose vim.tbl_deep_extend boilerplate to override presets. Solution: unify under a single key=value model. Keys are preset names or filetypes; true registers the preset as-is, a table deep-merges with the matching preset (or registers a custom provider if no preset matches), and false is a no-op. Array entries are dropped. Also adds -f gfm to presets.github args so pandoc parses input as GFM.
103 lines
3.2 KiB
Lua
103 lines
3.2 KiB
Lua
local helpers = require('spec.helpers')
|
|
|
|
describe('preview', function()
|
|
local preview
|
|
|
|
before_each(function()
|
|
helpers.reset_config()
|
|
preview = require('preview')
|
|
end)
|
|
|
|
describe('config', function()
|
|
it('returns defaults before setup is called', function()
|
|
local config = preview.get_config()
|
|
assert.is_false(config.debug)
|
|
assert.are.same({}, config.providers)
|
|
end)
|
|
|
|
it('merges user config with defaults', function()
|
|
helpers.reset_config({ debug = true })
|
|
local config = require('preview').get_config()
|
|
assert.is_true(config.debug)
|
|
assert.are.same({}, config.providers)
|
|
end)
|
|
|
|
it('merges override table with matching preset', function()
|
|
helpers.reset_config({
|
|
typst = {
|
|
cmd = { 'typst', 'compile' },
|
|
args = { '%s' },
|
|
},
|
|
})
|
|
local config = require('preview').get_config()
|
|
assert.is_not_nil(config.providers.typst)
|
|
end)
|
|
|
|
it('resolves preset = true to provider config', function()
|
|
helpers.reset_config({ typst = true, markdown = true })
|
|
local config = require('preview').get_config()
|
|
local presets = require('preview.presets')
|
|
assert.are.same(presets.typst, config.providers.typst)
|
|
assert.are.same(presets.markdown, config.providers.markdown)
|
|
end)
|
|
|
|
it('resolves latex preset under tex filetype', function()
|
|
helpers.reset_config({ latex = true })
|
|
local config = require('preview').get_config()
|
|
local presets = require('preview.presets')
|
|
assert.are.same(presets.latex, config.providers.tex)
|
|
end)
|
|
|
|
it('resolves github preset under markdown filetype', function()
|
|
helpers.reset_config({ github = true })
|
|
local config = require('preview').get_config()
|
|
local presets = require('preview.presets')
|
|
assert.are.same(presets.github, config.providers.markdown)
|
|
end)
|
|
end)
|
|
|
|
describe('resolve_provider', function()
|
|
before_each(function()
|
|
helpers.reset_config({
|
|
typst = true,
|
|
})
|
|
preview = require('preview')
|
|
end)
|
|
|
|
it('returns filetype when provider exists', function()
|
|
local bufnr = helpers.create_buffer({}, 'typst')
|
|
local name = preview.resolve_provider(bufnr)
|
|
assert.are.equal('typst', name)
|
|
helpers.delete_buffer(bufnr)
|
|
end)
|
|
|
|
it('returns nil for unconfigured filetype', function()
|
|
local bufnr = helpers.create_buffer({}, 'lua')
|
|
local name = preview.resolve_provider(bufnr)
|
|
assert.is_nil(name)
|
|
helpers.delete_buffer(bufnr)
|
|
end)
|
|
end)
|
|
|
|
describe('build_context', function()
|
|
it('builds context from buffer', function()
|
|
local bufnr = helpers.create_buffer({}, 'typst')
|
|
local ctx = preview.build_context(bufnr)
|
|
assert.are.equal(bufnr, ctx.bufnr)
|
|
assert.are.equal('typst', ctx.ft)
|
|
assert.is_string(ctx.file)
|
|
assert.is_string(ctx.root)
|
|
helpers.delete_buffer(bufnr)
|
|
end)
|
|
end)
|
|
|
|
describe('status', function()
|
|
it('returns idle when nothing is compiling', function()
|
|
local bufnr = helpers.create_buffer({})
|
|
local s = preview.status(bufnr)
|
|
assert.is_false(s.compiling)
|
|
assert.is_nil(s.provider)
|
|
helpers.delete_buffer(bufnr)
|
|
end)
|
|
end)
|
|
end)
|