summaryrefslogtreecommitdiff
path: root/lua/tests
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2021-01-11 13:29:37 -0500
committerGitHub <noreply@github.com>2021-01-11 13:29:37 -0500
commit8783bea06e1e0dfa8dfd4834058923088471d832 (patch)
tree050096ba649a94bb01e7c0b3a029e9b4eb060029 /lua/tests
parentde80a9837cd1d207981c1f6dbf504436f8bfee13 (diff)
feat: quickfix (#293)
* feat: quickfix (not implemented) * [WIP]: Wed 09 Dec 2020 11:11:30 PM EST * somewhat working linked list impl * getting closer * might be working * might be working for real * works and implemented basic example * dont forget to close prompt * fix descending and add more tests * test fixes * fix test * more logging * Fix some more tests * Fix logging messing up tests * fix: lint * fix: multi select stuffs
Diffstat (limited to 'lua/tests')
-rw-r--r--lua/tests/automated/entry_manager_spec.lua142
-rw-r--r--lua/tests/automated/linked_list_spec.lua133
-rw-r--r--lua/tests/automated/pickers/find_files_spec.lua109
-rw-r--r--lua/tests/automated/pickers/scrolling_spec.lua9
-rw-r--r--lua/tests/automated/scroller_spec.lua11
-rw-r--r--lua/tests/automated/telescope_spec.lua99
-rw-r--r--lua/tests/pickers/find_files__readme.lua3
-rw-r--r--lua/tests/pickers/find_files__scrolling_descending_cycle.lua14
-rw-r--r--lua/tests/pickers/find_files__with_ctrl_n.lua2
9 files changed, 383 insertions, 139 deletions
diff --git a/lua/tests/automated/entry_manager_spec.lua b/lua/tests/automated/entry_manager_spec.lua
new file mode 100644
index 0000000..cc59ebd
--- /dev/null
+++ b/lua/tests/automated/entry_manager_spec.lua
@@ -0,0 +1,142 @@
+local EntryManager = require('telescope.entry_manager')
+
+local eq = assert.are.same
+
+describe('process_result', function()
+ it('works with one entry', function()
+ local manager = EntryManager:new(5, nil)
+
+ manager:add_entry(nil, 1, "hello")
+
+ eq(1, manager:get_score(1))
+ end)
+
+ it('works with two entries', function()
+ local manager = EntryManager:new(5, nil)
+
+ manager:add_entry(nil, 1, "hello")
+ manager:add_entry(nil, 2, "later")
+
+ eq(2, manager.linked_states.size)
+
+ eq("hello", manager:get_entry(1))
+ eq("later", manager:get_entry(2))
+ end)
+
+ it('calls functions when inserting', function()
+ local called_count = 0
+ local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
+
+ assert(called_count == 0)
+ manager:add_entry(nil, 1, "hello")
+ assert(called_count == 1)
+ end)
+
+ it('calls functions when inserting twice', function()
+ local called_count = 0
+ local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
+
+ assert(called_count == 0)
+ manager:add_entry(nil, 1, "hello")
+ manager:add_entry(nil, 2, "world")
+ assert(called_count == 2)
+ end)
+
+ it('correctly sorts lower scores', function()
+ local called_count = 0
+ local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
+ manager:add_entry(nil, 5, "worse result")
+ manager:add_entry(nil, 2, "better result")
+
+ eq("better result", manager:get_entry(1))
+ eq("worse result", manager:get_entry(2))
+
+ eq(2, called_count)
+ end)
+
+ it('respects max results', function()
+ local called_count = 0
+ local manager = EntryManager:new(1, function() called_count = called_count + 1 end)
+ manager:add_entry(nil, 2, "better result")
+ manager:add_entry(nil, 5, "worse result")
+
+ eq("better result", manager:get_entry(1))
+ eq(1, called_count)
+ end)
+
+ it('should allow simple entries', function()
+ local manager = EntryManager:new(5)
+
+ local counts_executed = 0
+ manager:add_entry(nil, 1, setmetatable({}, {
+ __index = function(t, k)
+ local val = nil
+ if k == "ordinal" then
+ counts_executed = counts_executed + 1
+
+ -- This could be expensive, only call later
+ val = "wow"
+ end
+
+ rawset(t, k, val)
+ return val
+ end,
+ }))
+
+ eq("wow", manager:get_ordinal(1))
+ eq("wow", manager:get_ordinal(1))
+ eq("wow", manager:get_ordinal(1))
+
+ eq(1, counts_executed)
+ end)
+
+ it('should not loop a bunch', function()
+ local info = {}
+ local manager = EntryManager:new(5, nil, info)
+ manager:add_entry(nil, 4, "better result")
+ manager:add_entry(nil, 3, "better result")
+ manager:add_entry(nil, 2, "better result")
+
+ -- Loops once to find 3 < 4
+ -- Loops again to find 2 < 3
+ eq(2, info.looped)
+ end)
+
+ it('should not loop a bunch, part 2', function()
+ local info = {}
+ local manager = EntryManager:new(5, nil, info)
+ manager:add_entry(nil, 4, "better result")
+ manager:add_entry(nil, 2, "better result")
+ manager:add_entry(nil, 3, "better result")
+
+ -- Loops again to find 2 < 4
+ -- Loops once to find 3 > 2
+ -- but less than 4
+ eq(3, info.looped)
+ end)
+
+ it('should update worst score in all append case', function()
+ local manager = EntryManager:new(2, nil)
+ manager:add_entry(nil, 2, "result 2")
+ manager:add_entry(nil, 3, "result 3")
+ manager:add_entry(nil, 4, "result 4")
+
+ eq(3, manager.worst_acceptable_score)
+ end)
+
+ it('should update worst score in all prepend case', function()
+ local called_count = 0
+ local manager = EntryManager:new(2, function() called_count = called_count + 1 end)
+ manager:add_entry(nil, 5, "worse result")
+ manager:add_entry(nil, 4, "less worse result")
+ manager:add_entry(nil, 2, "better result")
+
+ -- Once for insert 5
+ -- Once for prepend 4
+ -- Once for prepend 2
+ eq(3, called_count)
+
+ eq("better result", manager:get_entry(1))
+ eq(4, manager.worst_acceptable_score)
+ end)
+end)
diff --git a/lua/tests/automated/linked_list_spec.lua b/lua/tests/automated/linked_list_spec.lua
new file mode 100644
index 0000000..49c035a
--- /dev/null
+++ b/lua/tests/automated/linked_list_spec.lua
@@ -0,0 +1,133 @@
+local LinkedList = require('telescope.algos.linked_list')
+
+describe('LinkedList', function()
+ it('can create a list', function()
+ local l = LinkedList:new()
+
+ assert.are.same(0, l.size)
+ end)
+
+ it('can add a single entry to the list', function()
+ local l = LinkedList:new()
+ l:append('hello')
+
+ assert.are.same(1, l.size)
+ end)
+
+ it('can iterate over one item', function()
+ local l = LinkedList:new()
+ l:append('hello')
+
+ for val in l:iter() do
+ assert.are.same('hello', val)
+ end
+ end)
+
+ it('iterates in order', function()
+ local l = LinkedList:new()
+ l:append('hello')
+ l:append('world')
+
+ local x = {}
+ for val in l:iter() do
+ table.insert(x, val)
+ end
+
+ assert.are.same({'hello', 'world'}, x)
+ end)
+
+ it('iterates in order, for prepend', function()
+ local l = LinkedList:new()
+ l:prepend('world')
+ l:prepend('hello')
+
+ local x = {}
+ for val in l:iter() do
+ table.insert(x, val)
+ end
+
+ assert.are.same({'hello', 'world'}, x)
+ end)
+
+ it('iterates in order, for combo', function()
+ local l = LinkedList:new()
+ l:prepend('world')
+ l:prepend('hello')
+ l:append('last')
+ l:prepend('first')
+
+ local x = {}
+ for val in l:iter() do
+ table.insert(x, val)
+ end
+
+ assert.are.same({'first', 'hello', 'world', 'last'}, x)
+ assert.are.same(#x, l.size)
+ end)
+
+ it('has ipairs', function()
+ local l = LinkedList:new()
+ l:prepend('world')
+ l:prepend('hello')
+ l:append('last')
+ l:prepend('first')
+
+ local x = {}
+ for v in l:iter() do
+ table.insert(x, v)
+ end
+ assert.are.same({'first', 'hello', 'world', 'last'}, x)
+
+ local expected = {}
+ for i, v in ipairs(x) do
+ table.insert(expected, {i, v})
+ end
+
+ local actual = {}
+ for i, v in l:ipairs() do
+ table.insert(actual, {i, v})
+ end
+
+ assert.are.same(expected, actual)
+ end)
+
+ describe('track_at', function()
+ it('should update tracked when only appending', function()
+ local l = LinkedList:new { track_at = 2 }
+ l:append("first")
+ l:append("second")
+ l:append("third")
+
+ assert.are.same("second", l.tracked)
+ end)
+
+ it('should update tracked when first some prepend and then append', function()
+ local l = LinkedList:new { track_at = 2 }
+ l:prepend("first")
+ l:append("second")
+ l:append("third")
+
+ assert.are.same("second", l.tracked)
+ end)
+
+ it('should update when only prepending', function()
+ local l = LinkedList:new { track_at = 2 }
+ l:prepend("third")
+ l:prepend("second")
+ l:prepend("first")
+
+ assert.are.same("second", l.tracked)
+ end)
+
+ it('should update when lots of prepend and append', function()
+ local l = LinkedList:new { track_at = 2 }
+ l:prepend("third")
+ l:prepend("second")
+ l:prepend("first")
+ l:append("fourth")
+ l:prepend("zeroth")
+
+ assert.are.same("first", l.tracked)
+ end)
+ end)
+end)
diff --git a/lua/tests/automated/pickers/find_files_spec.lua b/lua/tests/automated/pickers/find_files_spec.lua
index c5cf50e..b3af1d6 100644
--- a/lua/tests/automated/pickers/find_files_spec.lua
+++ b/lua/tests/automated/pickers/find_files_spec.lua
@@ -2,6 +2,10 @@ require('plenary.reload').reload_module('telescope')
local tester = require('telescope.pickers._test')
+local disp = function(val)
+ return vim.inspect(val, { newline = " ", indent = "" })
+end
+
describe('builtin.find_files', function()
it('should find the readme', function()
tester.run_file('find_files__readme')
@@ -11,45 +15,76 @@ describe('builtin.find_files', function()
tester.run_file('find_files__with_ctrl_n')
end)
- it('should not display devicons when disabled', function()
- tester.run_string [[
- tester.builtin_picker('find_files', 'README.md', {
- post_typed = {
- { "> README.md", GetPrompt },
- { "> README.md", GetLastResult },
- },
- post_close = {
- { 'README.md', GetFile },
- { 'README.md', GetFile },
- }
- }, {
- disable_devicons = true,
- sorter = require('telescope.sorters').get_fzy_sorter(),
- })
- ]]
- end)
+ for _, configuration in ipairs {
+ { sorting_strategy = 'descending', },
+ { sorting_strategy = 'ascending', },
+ } do
+ it('should not display devicons when disabled: ' .. disp(configuration), function()
+ tester.run_string(string.format([[
+ local max_results = 5
- it('use devicons, if it has it when enabled', function()
- if not pcall(require, 'nvim-web-devicons') then
- return
- end
+ tester.builtin_picker('find_files', 'README.md', {
+ post_typed = {
+ { "> README.md", GetPrompt },
+ { "> README.md", GetBestResult },
+ },
+ post_close = {
+ { 'README.md', GetFile },
+ { 'README.md', GetFile },
+ }
+ }, vim.tbl_extend("force", {
+ disable_devicons = true,
+ sorter = require('telescope.sorters').get_fzy_sorter(),
+ results_height = max_results,
+ layout_strategy = 'center',
+ }, vim.fn.json_decode([==[%s]==])))
+ ]], vim.fn.json_encode(configuration)))
+ end)
- tester.run_string [[
- tester.builtin_picker('find_files', 'README.md', {
- post_typed = {
- { "> README.md", GetPrompt },
- { ">  README.md", GetLastResult }
- },
- post_close = {
- { 'README.md', GetFile },
- { 'README.md', GetFile },
- }
- }, {
- disable_devicons = false,
- sorter = require('telescope.sorters').get_fzy_sorter(),
- })
- ]]
- end)
+ it('should only save one line for ascending, but many for descending', function()
+ local expected
+ if configuration.sorting_strategy == 'descending' then
+ expected = 5
+ else
+ expected = 1
+ end
+
+ tester.run_string(string.format([[
+ tester.builtin_picker('find_files', 'README.md', {
+ post_typed = {
+ { %s, function() return #GetResults() end },
+ },
+ }, vim.tbl_extend("force", {
+ disable_devicons = true,
+ sorter = require('telescope.sorters').get_fzy_sorter(),
+ results_height = 5,
+ layout_strategy = 'center',
+ }, vim.fn.json_decode([==[%s]==])))
+ ]], expected, vim.fn.json_encode(configuration)))
+ end)
+
+ it('use devicons, if it has it when enabled', function()
+ if not pcall(require, 'nvim-web-devicons') then
+ return
+ end
+
+ tester.run_string(string.format([[
+ tester.builtin_picker('find_files', 'README.md', {
+ post_typed = {
+ { "> README.md", GetPrompt },
+ { ">  README.md", GetBestResult }
+ },
+ post_close = {
+ { 'README.md', GetFile },
+ { 'README.md', GetFile },
+ }
+ }, vim.tbl_extend("force", {
+ disable_devicons = false,
+ sorter = require('telescope.sorters').get_fzy_sorter(),
+ }, vim.fn.json_decode([==[%s]==])))
+ ]], vim.fn.json_encode(configuration)))
+ end)
+ end
it('should find the readme, using lowercase', function()
tester.run_string [[
diff --git a/lua/tests/automated/pickers/scrolling_spec.lua b/lua/tests/automated/pickers/scrolling_spec.lua
new file mode 100644
index 0000000..ab82378
--- /dev/null
+++ b/lua/tests/automated/pickers/scrolling_spec.lua
@@ -0,0 +1,9 @@
+require('plenary.reload').reload_module('telescope')
+
+local tester = require('telescope.pickers._test')
+
+describe('scrolling strategies', function()
+ it('should handle cycling for full list', function()
+ tester.run_file [[find_files__scrolling_descending_cycle]]
+ end)
+end)
diff --git a/lua/tests/automated/scroller_spec.lua b/lua/tests/automated/scroller_spec.lua
index f47edda..dcc55a0 100644
--- a/lua/tests/automated/scroller_spec.lua
+++ b/lua/tests/automated/scroller_spec.lua
@@ -99,7 +99,16 @@ describe('scroller', function()
it('should stay at current results when current results is less than max_results', function()
local current = 5
- eq(current - 1, limit_scroller(max_results, current, 4))
+ eq(max_results - current, limit_scroller(max_results, current, 4))
+ end)
+ end)
+
+ describe('https://github.com/nvim-telescope/telescope.nvim/pull/293#issuecomment-751463224', function()
+ it('should handle having many more results than necessary', function()
+ local scroller = p_scroller.create('cycle', 'descending')
+
+ -- 23 112 23
+ eq(0, scroller(23, 112, 23))
end)
end)
end)
diff --git a/lua/tests/automated/telescope_spec.lua b/lua/tests/automated/telescope_spec.lua
index bd9203c..3e9f0cb 100644
--- a/lua/tests/automated/telescope_spec.lua
+++ b/lua/tests/automated/telescope_spec.lua
@@ -4,8 +4,6 @@ local log = require('telescope.log')
log.level = 'info'
-- log.use_console = false
-local EntryManager = require('telescope.entry_manager')
-
--[[
lua RELOAD('plenary'); require("plenary.test_harness"):test_directory("busted", "./tests/automated")
--]]
@@ -16,103 +14,6 @@ describe('Picker', function()
assert(true)
end)
end)
-
- describe('process_result', function()
- it('works with one entry', function()
- local manager = EntryManager:new(5, nil)
-
- manager:add_entry(nil, 1, "hello")
-
- assert.are.same(1, manager:get_score(1))
- end)
-
- it('works with two entries', function()
- local manager = EntryManager:new(5, nil)
-
- manager:add_entry(nil, 1, "hello")
- manager:add_entry(nil, 2, "later")
-
- assert.are.same("hello", manager:get_entry(1))
- assert.are.same("later", manager:get_entry(2))
- end)
-
- it('calls functions when inserting', function()
- local called_count = 0
- local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
-
- assert(called_count == 0)
- manager:add_entry(nil, 1, "hello")
- assert(called_count == 1)
- end)
-
- it('calls functions when inserting twice', function()
- local called_count = 0
- local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
-
- assert(called_count == 0)
- manager:add_entry(nil, 1, "hello")
- manager:add_entry(nil, 2, "world")
- assert(called_count == 2)
- end)
-
- it('correctly sorts lower scores', function()
- local called_count = 0
- local manager = EntryManager:new(5, function() called_count = called_count + 1 end)
- manager:add_entry(nil, 5, "worse result")
- manager:add_entry(nil, 2, "better result")
-
- assert.are.same("better result", manager:get_entry(1))
- assert.are.same("worse result", manager:get_entry(2))
-
- -- once to insert "worse"
- -- once to insert "better"
- -- and then to move "worse"
- assert.are.same(3, called_count)
- end)
-
- it('respects max results', function()
- local called_count = 0
- local manager = EntryManager:new(1, function() called_count = called_count + 1 end)
- manager:add_entry(nil, 2, "better result")
- manager:add_entry(nil, 5, "worse result")
-
- assert.are.same("better result", manager:get_entry(1))
- assert.are.same(1, called_count)
- end)
-
- -- TODO: We should decide if we want to add this or not.
- -- it('should handle no scores', function()
- -- local manager = EntryManager:new(5, nil)
-
- -- manager:add_entry(nil,
- -- end)
-
- it('should allow simple entries', function()
- local manager = EntryManager:new(5)
-
- local counts_executed = 0
- manager:add_entry(nil, 1, setmetatable({}, {
- __index = function(t, k)
- local val = nil
- if k == "ordinal" then
- counts_executed = counts_executed + 1
-
- -- This could be expensive, only call later
- val = "wow"
- end
-
- rawset(t, k, val)
- return val
- end,
- }))
-
- assert.are.same("wow", manager:get_ordinal(1))
- assert.are.same("wow", manager:get_ordinal(1))
- assert.are.same("wow", manager:get_ordinal(1))
-
- assert.are.same(1, counts_executed)
- end)
- end)
end)
describe('Sorters', function()
diff --git a/lua/tests/pickers/find_files__readme.lua b/lua/tests/pickers/find_files__readme.lua
index 620c3be..534ee3e 100644
--- a/lua/tests/pickers/find_files__readme.lua
+++ b/lua/tests/pickers/find_files__readme.lua
@@ -1,7 +1,8 @@
local tester = require('telescope.pickers._test')
+local helper = require('telescope.pickers._test_helpers')
tester.builtin_picker('find_files', 'README.md', {
post_close = {
- {'README.md', function() return vim.fn.fnamemodify(vim.api.nvim_buf_get_name(0), ":.") end },
+ {'README.md', helper.get_file },
}
})
diff --git a/lua/tests/pickers/find_files__scrolling_descending_cycle.lua b/lua/tests/pickers/find_files__scrolling_descending_cycle.lua
new file mode 100644
index 0000000..7740003
--- /dev/null
+++ b/lua/tests/pickers/find_files__scrolling_descending_cycle.lua
@@ -0,0 +1,14 @@
+require('plenary.reload').reload_module('plenary')
+require('plenary.reload').reload_module('telescope')
+
+local tester = require('telescope.pickers._test')
+local helper = require('telescope.pickers._test_helpers')
+
+tester.builtin_picker('find_files', 'telescope<c-n>', {
+ post_close = {
+ tester.not_ { 'plugin/telescope.vim', helper.get_file },
+ },
+}, {
+ sorting_strategy = "descending",
+ scroll_strategy = "cycle",
+})
diff --git a/lua/tests/pickers/find_files__with_ctrl_n.lua b/lua/tests/pickers/find_files__with_ctrl_n.lua
index 78a31fd..5d93f60 100644
--- a/lua/tests/pickers/find_files__with_ctrl_n.lua
+++ b/lua/tests/pickers/find_files__with_ctrl_n.lua
@@ -3,7 +3,7 @@ local helper = require('telescope.pickers._test_helpers')
tester.builtin_picker('find_files', 'fixtures/file<c-p>', {
post_close = {
- { 'lua/tests/fixtures/file_2.txt', helper.get_file }
+ { 'lua/tests/fixtures/file_abc.txt', helper.get_selection_value },
},
})