273 lines
8.1 KiB
Lua
273 lines
8.1 KiB
Lua
require('plenary.test_harness'):setup_busted()
|
|
|
|
local log = require('telescope.log')
|
|
log.level = 'info'
|
|
-- log.use_console = false
|
|
|
|
local pickers = require('telescope.pickers')
|
|
local utils = require('telescope.utils')
|
|
|
|
--[[
|
|
require("plenary.test_harness"):test_directory("busted", "./tests/")
|
|
--]]
|
|
|
|
describe('Picker', function()
|
|
describe('window_dimensions', function()
|
|
it('', function()
|
|
assert(true)
|
|
end)
|
|
end)
|
|
|
|
describe('process_result', function()
|
|
it('works with one entry', function()
|
|
local manager = pickers.entry_manager(5, nil)
|
|
|
|
manager:add_entry(1, "hello")
|
|
|
|
assert.are.same(1, manager:_get_state()[1].score)
|
|
end)
|
|
|
|
it('works with two entries', function()
|
|
local manager = pickers.entry_manager(5, nil)
|
|
|
|
manager:add_entry(1, "hello")
|
|
manager:add_entry(2, "later")
|
|
|
|
assert.are.same("hello", manager:get_ordinal(1))
|
|
assert.are.same("later", manager:get_ordinal(2))
|
|
end)
|
|
|
|
it('calls functions when inserting', function()
|
|
local called_count = 0
|
|
local manager = pickers.entry_manager(5, function() called_count = called_count + 1 end)
|
|
|
|
assert(called_count == 0)
|
|
manager:add_entry(1, "hello")
|
|
assert(called_count == 1)
|
|
end)
|
|
|
|
it('calls functions when inserting twice', function()
|
|
local called_count = 0
|
|
local manager = pickers.entry_manager(5, function() called_count = called_count + 1 end)
|
|
|
|
assert(called_count == 0)
|
|
manager:add_entry(1, "hello")
|
|
manager:add_entry(2, "world")
|
|
assert(called_count == 2)
|
|
end)
|
|
|
|
it('correctly sorts lower scores', function()
|
|
local called_count = 0
|
|
local manager = pickers.entry_manager(5, function() called_count = called_count + 1 end)
|
|
manager:add_entry(5, "worse result")
|
|
manager:add_entry(2, "better result")
|
|
|
|
assert.are.same("better result", manager:get_ordinal(1))
|
|
assert.are.same("worse result", manager:get_ordinal(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 = pickers.entry_manager(1, function() called_count = called_count + 1 end)
|
|
manager:add_entry(2, "better result")
|
|
manager:add_entry(5, "worse result")
|
|
|
|
assert.are.same("better result", manager:get_ordinal(1))
|
|
|
|
-- once to insert "worse"
|
|
-- once to insert "better"
|
|
-- and then to move "worse"
|
|
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 = pickers.entry_manager(5, nil)
|
|
|
|
-- manager:add_entry(nil,
|
|
-- end)
|
|
|
|
it('should allow simple entries', function()
|
|
local manager = pickers.entry_manager(5)
|
|
|
|
local counts_executed = 0
|
|
manager:add_entry(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)
|
|
|
|
-- describe('ngrams', function()
|
|
-- it('should capture intself in the ngram', function()
|
|
-- local n = utils.new_ngram()
|
|
|
|
-- n:add("hi")
|
|
-- assert.are.same(n._grams.hi, {hi = 1})
|
|
-- end)
|
|
|
|
-- it('should have repeated strings count more than once', function()
|
|
-- local n = utils.new_ngram()
|
|
|
|
-- n:add("llll")
|
|
-- assert.are.same(n._grams.ll, {llll = 3})
|
|
-- end)
|
|
|
|
-- describe('_items_sharing_ngrams', function()
|
|
-- -- it('should be able to find similar strings', function()
|
|
-- -- end)
|
|
-- local n
|
|
-- before_each(function()
|
|
-- n = utils.new_ngram()
|
|
|
|
-- n:add("SPAM")
|
|
-- n:add("SPAN")
|
|
-- n:add("EG")
|
|
-- end)
|
|
|
|
-- it('should find items at the start', function()
|
|
-- assert.are.same({ SPAM = 1, SPAN = 1 }, n:_items_sharing_ngrams("SP"))
|
|
-- end)
|
|
|
|
-- it('should find items at the end', function()
|
|
-- assert.are.same({ SPAM = 1, }, n:_items_sharing_ngrams("AM"))
|
|
-- end)
|
|
|
|
-- it('should find items at the end', function()
|
|
-- assert.are.same({ SPAM = 2, SPAN = 1}, n:_items_sharing_ngrams("PAM"))
|
|
-- end)
|
|
-- end)
|
|
|
|
-- describe('search', function()
|
|
-- describe('for simple strings', function()
|
|
-- local n
|
|
-- before_each(function()
|
|
-- n = utils.new_ngram()
|
|
|
|
-- n:add("SPAM")
|
|
-- n:add("SPAN")
|
|
-- n:add("EG")
|
|
-- end)
|
|
|
|
-- it('should sort for equal cases', function()
|
|
-- assert.are.same({ "SPAM", "SPAN" }, n:search("SPAM"))
|
|
-- end)
|
|
|
|
-- it('should sort for obvious cases', function()
|
|
-- assert.are.same({ "SPAM", "SPAN" }, n:search("PAM"))
|
|
-- end)
|
|
-- end)
|
|
|
|
-- describe('for file paths', function()
|
|
-- local n
|
|
-- before_each(function()
|
|
-- n = utils.new_ngram()
|
|
|
|
-- n:add("sho/rt")
|
|
-- n:add("telescope/init.lua")
|
|
-- n:add("telescope/utils.lua")
|
|
-- n:add("telescope/pickers.lua")
|
|
-- n:add("a/random/file/pickers.lua")
|
|
-- n:add("microscope/init.lua")
|
|
-- end)
|
|
|
|
-- it("should find exact match", function()
|
|
-- assert.are.same(n:find("telescope/init.lua"), "telescope/init.lua")
|
|
-- assert.are.same(n:score("telescope/init.lua"), 1)
|
|
-- end)
|
|
|
|
-- it("should find unique match", function()
|
|
-- assert.are.same(n:find("micro"), "microscope/init.lua")
|
|
-- end)
|
|
|
|
-- it("should find some match", function()
|
|
-- assert.are.same(n:find("telini"), "telescope/init.lua")
|
|
-- end)
|
|
-- end)
|
|
-- end)
|
|
-- end)
|
|
end)
|
|
|
|
describe('Sorters', function()
|
|
describe('norcalli_sorter', function()
|
|
it('sort matches well', function()
|
|
local sorter = require('telescope.sorters').get_norcalli_sorter()
|
|
|
|
local exact_match = sorter:score('hello', 'hello')
|
|
local no_match = sorter:score('abcdef', 'ghijkl')
|
|
local ok_match = sorter:score('abcdef', 'ab')
|
|
|
|
assert(exact_match < no_match)
|
|
assert(exact_match < ok_match)
|
|
assert(ok_match < no_match)
|
|
end)
|
|
|
|
it('sorts multiple finds better', function()
|
|
local sorter = require('telescope.sorters').get_norcalli_sorter()
|
|
|
|
local multi_match = sorter:score('generics', 'exercises/generics/generics2.rs')
|
|
local one_match = sorter:score('abcdef', 'exercises/generics/README.md')
|
|
|
|
-- assert(multi_match < one_match)
|
|
end)
|
|
end)
|
|
|
|
describe('fuzzy_file', function()
|
|
it('sort matches well', function()
|
|
local sorter = require('telescope.sorters').get_fuzzy_file()
|
|
|
|
local exact_match = sorter:score('abcdef', 'abcdef')
|
|
local no_match = sorter:score('abcdef', 'ghijkl')
|
|
local ok_match = sorter:score('abcdef', 'ab')
|
|
|
|
assert(
|
|
exact_match < no_match,
|
|
string.format("Exact match better than no match: %s %s", exact_match, no_match)
|
|
)
|
|
assert(exact_match < ok_match, "Exact match better than OK match")
|
|
assert(ok_match < no_match, "OK match better than no match")
|
|
end)
|
|
|
|
it('sorts matches after last os sep better', function()
|
|
local sorter = require('telescope.sorters').get_fuzzy_file()
|
|
|
|
local exact_match = sorter:score('aaa/bbb', 'aaa')
|
|
local ok_match = sorter:score('bbb/aaa', 'aaa')
|
|
|
|
assert(exact_match < ok_match, "Exact match better than OK match")
|
|
end)
|
|
|
|
-- it('sorts multiple finds better', function()
|
|
-- local sorter = require('telescope.sorters').get_fuzzy_file()
|
|
|
|
-- local multi_match = sorter:score('generics', 'exercises/generics/generics2.rs')
|
|
-- local one_match = sorter:score('abcdef', 'exercises/generics/README.md')
|
|
|
|
-- assert(multi_match < one_match)
|
|
-- end)
|
|
end)
|
|
end)
|
|
|
|
|