summaryrefslogtreecommitdiff
path: root/lua/tests
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-11-16 10:58:30 -0500
committerGitHub <noreply@github.com>2020-11-16 10:58:30 -0500
commit985856946e30a7d93eb3b8aac6b5b5d7d589a768 (patch)
tree0e334d5dd1808f6508c869322699825d2b576130 /lua/tests
parentad7280e0b99ecd9f78ac6c70b4e5b49ed5e632f8 (diff)
feat: Allow overriding actions from mappings (#248)
Diffstat (limited to 'lua/tests')
-rw-r--r--lua/tests/automated/action_spec.lua164
1 files changed, 164 insertions, 0 deletions
diff --git a/lua/tests/automated/action_spec.lua b/lua/tests/automated/action_spec.lua
new file mode 100644
index 0000000..e85cb3c
--- /dev/null
+++ b/lua/tests/automated/action_spec.lua
@@ -0,0 +1,164 @@
+require('plenary.test_harness'):setup_busted()
+
+local transform_mod = require('telescope.actions.mt').transform_mod
+
+local eq = function(a, b)
+ assert.are.same(a, b)
+end
+
+describe('actions', function()
+ it('should allow creating custom actions', function()
+ local a = transform_mod {
+ x = function() return 5 end,
+ }
+
+
+ eq(5, a.x())
+ end)
+
+ it('allows adding actions', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local x_plus_y = a.x + a.y
+
+ eq({"x", "y"}, {x_plus_y()})
+ end)
+
+ it('ignores nils from added actions', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ nil_maker = function() return nil end,
+ }
+
+ local x_plus_y = a.x + a.nil_maker + a.y
+
+ eq({"x", "y"}, {x_plus_y()})
+ end)
+
+ it('allows overriding an action', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ -- actions.file_goto_selection_edit:replace(...)
+ a.x:replace(function() return "foo" end)
+ eq("foo", a.x())
+
+ a._clear()
+ eq("x", a.x())
+ end)
+
+ it('enhance.pre', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local called_pre = false
+
+ a.y:enhance {
+ pre = function()
+ called_pre = true
+ end,
+ }
+ eq("y", a.y())
+ eq(true, called_pre)
+ end)
+
+ it('enhance.post', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local called_post = false
+
+ a.y:enhance {
+ post = function()
+ called_post = true
+ end,
+ }
+ eq("y", a.y())
+ eq(true, called_post)
+ end)
+
+ it('can call both', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local called_count = 0
+ local count_inc = function()
+ called_count = called_count + 1
+ end
+
+ a.y:enhance {
+ pre = count_inc,
+ post = count_inc,
+ }
+
+ eq("y", a.y())
+ eq(2, called_count)
+ end)
+
+ it('can call both even when combined', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local called_count = 0
+ local count_inc = function()
+ called_count = called_count + 1
+ end
+
+ a.y:enhance {
+ pre = count_inc,
+ post = count_inc,
+ }
+
+ a.x:enhance {
+ post = count_inc
+ }
+
+ local x_plus_y = a.x + a.y
+ x_plus_y()
+
+ eq(3, called_count)
+ end)
+
+ it('clears enhance', function()
+ local a = transform_mod {
+ x = function() return "x" end,
+ y = function() return "y" end,
+ }
+
+ local called_post = false
+
+ a.y:enhance {
+ post = function()
+ called_post = true
+ end,
+ }
+
+ a._clear()
+
+ eq("y", a.y())
+ eq(false, called_post)
+ end)
+
+ it('handles passing arguments', function()
+ local a = transform_mod {
+ x = function(bufnr) return string.format("bufnr: %s") end,
+ }
+
+ a.x:replace(function(bufnr) return string.format("modified: %s", bufnr) end)
+ eq("modified: 5", a.x(5))
+ end)
+end)