summaryrefslogtreecommitdiff
path: root/lua/tests/automated/entry_manager_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/tests/automated/entry_manager_spec.lua')
-rw-r--r--lua/tests/automated/entry_manager_spec.lua142
1 files changed, 142 insertions, 0 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)