diff options
| author | TJ DeVries <devries.timothyj@gmail.com> | 2021-02-22 11:30:57 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-22 11:30:57 -0500 |
| commit | d7c02e3b52b5a13265e071d0de2d6a989110a515 (patch) | |
| tree | 165f83bac6ffbb8594f6afb53905bc7bc64a4359 /lua/tests/automated/action_spec.lua | |
| parent | 1c5e42a6a5a6d29be8fbf8dcefb0d8da535eac9a (diff) | |
feat: Action improvements (#472)
* feat: replace_map
* feat: Add action_set and action_state
* fix: Move all actions.get_ to action_state.get_
* fix: replace all internal references of _goto_file_selection_edit
* feat: add some docs
* fix: lint
* feat: actions.select
* remove mentions and usage of goto_file_selection APIs
* feat: special case attach_mappings to be overridable and defaultable
* Having goto_file_selection mappings will cause a error
as well as replacing deprecated goto_file_selection methodes
For config and replacing use this instead:
- actions.select_default
- actions.select_horizonal
- actions.select_vertical
- actions.select_tab
Only replacing:
- actions.set.edit -- for replacing all select functions
* adds actions.state.select_key_to_edit_key
Co-authored-by: Simon Hauser <Simon-Hauser@outlook.de>
Diffstat (limited to 'lua/tests/automated/action_spec.lua')
| -rw-r--r-- | lua/tests/automated/action_spec.lua | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lua/tests/automated/action_spec.lua b/lua/tests/automated/action_spec.lua index 6beacf9..771ee50 100644 --- a/lua/tests/automated/action_spec.lua +++ b/lua/tests/automated/action_spec.lua @@ -1,3 +1,6 @@ +local actions = require('telescope.actions') +local action_set = require('telescope.actions.set') + local transform_mod = require('telescope.actions.mt').transform_mod local eq = function(a, b) @@ -51,6 +54,69 @@ describe('actions', function() eq("x", a.x()) end) + it('allows overriding an action only in specific cases with if', function() + local a = transform_mod { + x = function(e) return e * 10 end, + y = function() return "y" end, + } + + -- actions.file_goto_selection_edit:replace(...) + a.x:replace_if( + function(e) return e > 0 end, + function(e) return (e / 10) end + ) + eq(-100, a.x(-10)) + eq(10, a.x(100)) + eq(1, a.x(10)) + + a._clear() + eq(100, a.x(10)) + end) + + it('allows overriding an action only in specific cases with mod', function() + local a = transform_mod { + x = function(e) return e * 10 end, + y = function() return "y" end, + } + + -- actions.file_goto_selection_edit:replace(...) + a.x:replace_map { + [function(e) return e > 0 end] = function(e) return (e / 10) end, + [function(e) return e == 0 end] = function(e) return (e + 10) end, + } + + eq(-100, a.x(-10)) + eq(10, a.x(100)) + eq(1, a.x(10)) + eq(10, a.x(0)) + + a._clear() + eq(100, a.x(10)) + end) + + it('continuous replacement', function() + local a = transform_mod { + x = function() return "cleared" end, + y = function() return "y" end, + } + + -- Replace original, which becomes new fallback + a.x:replace(function() return "negative" end) + + -- actions.file_goto_selection_edit:replace(...) + a.x:replace_map { + [function(e) return e > 0 end] = function(e) return "positive" end, + [function(e) return e == 0 end] = function(e) return "zero" end, + } + + eq("positive", a.x(10)) + eq("zero" , a.x(0)) + eq("negative", a.x(-10)) + + a._clear() + eq("cleared", a.x(10)) + end) + it('enhance.pre', function() local a = transform_mod { x = function() return "x" end, @@ -159,4 +225,27 @@ describe('actions', function() a.x:replace(function(bufnr) return string.format("modified: %s", bufnr) end) eq("modified: 5", a.x(5)) end) + + describe('action_set', function() + it('can replace `action_set.edit`', function() + action_set.edit:replace(function(_, arg) return "replaced:" .. arg end) + eq("replaced:edit", actions.file_edit()) + eq("replaced:vnew", actions.file_vsplit()) + end) + + it('handles backwards compat with select and edit files', function() + -- Reproduce steps: + -- In config, we have { ["<CR>"] = actions.select, ... } + -- In caller, we have actions._goto:replace(...) + -- Person calls `select`, does not see update + action_set.edit:replace(function(_, arg) return "default_to_edit:" .. arg end) + eq("default_to_edit:edit", actions.select_default()) + + action_set.select:replace(function(_, arg) return "override_with_select:" .. arg end) + eq("override_with_select:default", actions.select_default()) + + -- Sometimes you might want to change the default selection... + -- but you don't want to prohibit the ability to edit the code... + end) + end) end) |
