local canola = require('canola') local fs = require('canola.fs') local test_util = require('spec.test_util') describe('Alternate buffer', function() after_each(function() test_util.reset_editor() end) it('sets previous buffer as alternate', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate when editing url file', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) local readme = fs.join(vim.fn.getcwd(), 'README.md') vim.cmd.edit({ args = { 'canola://' .. fs.os_to_posix_path(readme) } }) test_util.wait_for_autocmd('BufEnter') assert.equals(readme, vim.api.nvim_buf_get_name(0)) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate when editing canola://', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'canola://' .. fs.os_to_posix_path(vim.fn.getcwd()) } }) test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate buffer if editing the same file', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate buffer if discarding changes', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) canola.close() assert.equals('bar', vim.fn.expand('%')) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate after multi-dir hops', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('sets previous buffer as alternate when inside canola buffer', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) canola.open() assert.equals('bar', vim.fn.expand('#')) end) it('preserves alternate when traversing canola dirs', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.wait(1000, function() return canola.get_cursor_entry() end, 10) vim.api.nvim_win_set_cursor(0, { 1, 1 }) canola.select() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate when opening preview', function() vim.cmd.edit({ args = { 'foo' } }) canola.open() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) vim.wait(1000, function() return canola.get_cursor_entry() end, 10) vim.api.nvim_win_set_cursor(0, { 1, 1 }) canola.open_preview() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) end) describe('floating window', function() it('sets previous buffer as alternate', function() vim.cmd.edit({ args = { 'foo' } }) canola.open_float() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.api.nvim_win_close(0, true) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate buffer if editing the same file', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) canola.open_float() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) vim.api.nvim_win_close(0, true) vim.cmd.edit({ args = { 'bar' } }) assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate buffer if discarding changes', function() vim.cmd.edit({ args = { 'foo' } }) vim.cmd.edit({ args = { 'bar' } }) canola.open_float() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) canola.close() assert.equals('foo', vim.fn.expand('#')) end) it('preserves alternate when traversing to a new file', function() vim.cmd.edit({ args = { 'foo' } }) canola.open_float() test_util.wait_for_autocmd({ 'User', pattern = 'CanolaEnter' }) assert.equals('foo', vim.fn.expand('#')) test_util.feedkeys({ '/LICENSE' }, 10) canola.select() test_util.wait_for_autocmd('BufEnter') assert.equals('LICENSE', vim.fn.expand('%:.')) assert.equals('foo', vim.fn.expand('#')) end) end) end)