repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
neovim/tests/bugabinga/pivi/entry_spec.lua
Raw---@diagnostic disable: duplicate-set-field, need-check-nil, param-type-mismatch, assign-type-mismatch
local entry = require 'bugabinga.pivi.entry'
local transcript = require 'bugabinga.pivi.transcript'
describe( 'pivi entry', function()
local bufnr
before_each( function()
bufnr = transcript.ensure 'entries'
transcript.clear( bufnr )
end )
after_each( function()
transcript.forget_all()
end )
it( 'refuses an unknown kind', function()
assert.has_error( function() entry.open( bufnr, 'nonsense' ) end )
end )
it( 'keeps its bounds while it grows', function()
local id = entry.open( bufnr, 'answer' )
entry.line( bufnr, id, 'first' )
local first = select( 1, entry.range( bufnr, id ) )
entry.line( bufnr, id, 'second' )
entry.line( bufnr, id, 'third' )
local opened, last = entry.range( bufnr, id )
assert.equal( first, opened )
assert.equal( first + 2, last )
end )
it( 'keeps its bounds while later entries are appended', function()
local answer = entry.open( bufnr, 'answer' )
entry.line( bufnr, answer, 'the answer' )
local first, last = entry.range( bufnr, answer )
for index = 1, 5 do
local tool = entry.open( bufnr, 'tool', { tool = 'read', } )
entry.line( bufnr, tool, 'tool ' .. index )
entry.close( bufnr, tool )
end
assert.same( { first, last, }, { entry.range( bufnr, answer ) } )
assert.equal( 'the answer', transcript.lines( bufnr )[first] )
end )
it( 'begins every entry on its own line', function()
local prompt = entry.open( bufnr, 'prompt' )
entry.line( bufnr, prompt, 'question' )
local answer = entry.open( bufnr, 'answer' )
entry.line( bufnr, answer, 'reply' )
local _, prompt_last = entry.range( bufnr, prompt )
local answer_first = select( 1, entry.range( bufnr, answer ) )
assert.is_true( answer_first > prompt_last )
end )
it( 'lists entries in buffer order with their kind and metadata', function()
local prompt = entry.open( bufnr, 'prompt', { text = 'do it', } )
entry.line( bufnr, prompt, 'do it' )
local tool = entry.open( bufnr, 'tool', { tool = 'edit', } )
entry.line( bufnr, tool, 'edit greet.lua' )
local listed = entry.list( bufnr )
assert.equal( 2, #listed )
assert.equal( 'prompt', listed[1].kind )
assert.equal( 'do it', listed[1].meta.text )
assert.equal( 'tool', listed[2].kind )
assert.equal( 'edit', listed[2].meta.tool )
assert.is_true( listed[1].first < listed[2].first )
end )
it( 'finds the entry covering a line', function()
local answer = entry.open( bufnr, 'answer' )
entry.line( bufnr, answer, 'one' )
entry.line( bufnr, answer, 'two' )
local tool = entry.open( bufnr, 'tool', { tool = 'read', } )
entry.line( bufnr, tool, 'read a.lua' )
local first, last = entry.range( bufnr, answer )
assert.equal( answer, entry.at( bufnr, first ).id )
assert.equal( answer, entry.at( bufnr, last ).id )
assert.equal( tool, entry.at( bufnr, select( 1, entry.range( bufnr, tool ) ) ).id )
end )
it( 'reports no entry outside every range', function()
assert.is_nil( entry.at( bufnr, 1 ) )
end )
it( 'annotates an entry without changing its text', function()
local tool = entry.open( bufnr, 'tool', { tool = 'read', } )
entry.line( bufnr, tool, 'read a.lua' )
local before = transcript.lines( bufnr )
entry.annotate( bufnr, tool, { result = 'contents', failed = false, } )
assert.equal( 'contents', entry.meta( bufnr, tool ).result )
assert.equal( 'read', entry.meta( bufnr, tool ).tool )
assert.same( before, transcript.lines( bufnr ) )
end )
it( 'forgets its entries when the transcript is cleared', function()
local answer = entry.open( bufnr, 'answer' )
entry.line( bufnr, answer, 'gone soon' )
assert.equal( 1, #entry.list( bufnr ) )
transcript.clear( bufnr )
assert.same( {}, entry.list( bufnr ) )
end )
end )