From 431a963df54fbbe2ac79cdad96cab07aa0fcc144 Mon Sep 17 00:00:00 2001 From: windwp Date: Sun, 17 Jan 2021 09:06:38 +0700 Subject: [PATCH] add unit test (#9) * add test * add test with feedkeys not finish * fix #6 skip single quote with previous character is a word * update README.md * Hotfix remove print msg * add test WIP * update README * add more pairs group on breakline * fix wrong pairs on html * remove print msg * fix character in quote * finish test --- Makefile | 2 + tests/minimal.vim | 7 +++ tests/pairs.lua | 65 +++++++++++++++++++++++ tests/pairs_spec.lua | 121 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 195 insertions(+) create mode 100644 Makefile create mode 100644 tests/minimal.vim create mode 100644 tests/pairs.lua create mode 100644 tests/pairs_spec.lua diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..19494a67 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +test: + nvim --headless --noplugin -u tests/minimal.vim -c "PlenaryBustedDirectory tests/ {minimal_init = 'tests/minimal.vim'}" diff --git a/tests/minimal.vim b/tests/minimal.vim new file mode 100644 index 00000000..34abaf28 --- /dev/null +++ b/tests/minimal.vim @@ -0,0 +1,7 @@ +set rtp +=. +set rtp +=~/.vim/autoload/plenary.nvim/ +runtime! plugin/plenary.vim + +lua require("plenary/busted") +lua require("nvim-autopairs") + diff --git a/tests/pairs.lua b/tests/pairs.lua new file mode 100644 index 00000000..1a919620 --- /dev/null +++ b/tests/pairs.lua @@ -0,0 +1,65 @@ + +local data={ + -- { + -- name = "add normal bracket" , + -- key = [[(]], + -- before = [[aaaa|]], + -- after = [[aaaa(|)]] + -- }, + { + name = "add normal quote" , + key = [["]], + before = [[aa| aa]], + after = [[aa"|" aa]] + }, + { + name = "move right end line " , + key = [["]], + before = [[aaaaaa|"]], + after = [[aaaaaa"|]] + }, + -- { + -- name = "move right when inside quote" , + -- key = [["]], + -- before = [[("abcd|")]], + -- after = [[("abcd"|)]] + -- } + +} +local npairs=require('nvim-autopairs') +npairs.setup() +local eq = assert.are.same + +function wait(time) + local duration = os.time() + time + while os.time() < duration do end +end + +vim.wait(5,function() return true end) +-- TODO change to use feedkeys +for _, value in pairs(data) do + local before = string.gsub(value.before , '%|' , "") + local after = string.gsub(value.after , '%|' , "") + local p_before = string.find(value.before , '%|') + local p_after = string.find(value.after , '|') + local line = 1 + local bufnr = vim.fn.bufnr('%') + vim.fn.setline(line , before) + vim.fn.setpos('.' ,{bufnr , line , p_before , 0}) + vim.fn.feedkeys("i") + vim.fn.feedkeys(npairs.esc(value.key)) + vim.cmd[[redraw]] + local done=false + vim.wait(5,function() + pcall(vim.schedule_wrap( function() + local result = vim.fn.getline(line) + local pos = vim.fn.getpos('.') + eq(p_after , pos[3]+ 1 , "\n\n pos error: " .. value.name .."\n") + eq(after, result , "\n\n text error: " .. value.name .."\n") + done=true + end)) + return done + end) + while done==false do end + end + diff --git a/tests/pairs_spec.lua b/tests/pairs_spec.lua new file mode 100644 index 00000000..8fd32189 --- /dev/null +++ b/tests/pairs_spec.lua @@ -0,0 +1,121 @@ +local helpers = {} +local npairs=require('nvim-autopairs') +npairs.setup() +local eq = assert.are.same +_G.npairs = npairs; + +vim.api.nvim_set_keymap('i' , '','v:lua.npairs.check_break_line_char()', {expr = true , noremap = true}) +function helpers.feed(text, feed_opts) + feed_opts = feed_opts or 'n' + local to_feed = vim.api.nvim_replace_termcodes(text, true, false, true) + vim.api.nvim_feedkeys(to_feed, feed_opts, true) +end + +function helpers.insert(text) + helpers.feed('i' .. text, 'x') +end + +local data = { + { + name = "add normal bracket" , + key = [[(]], + before = [[aaaa| ]], + after = [[aaaa(|) ]] + }, + { + name = "add normal quote" , + key = [["]], + before = [[aa| aa]], + after = [[aa"|" aa]] + }, + { + name = "don't add quote after alphabet char" , + key = [["]], + before = [[aa|aa]], + after = [[aa"|aa]] + }, + { + name = "move right end line " , + key = [["]], + before = [[aaaa|"]], + after = [[aaaa"|]] + }, + { + name = "move right when inside quote" , + key = [["]], + before = [[("abcd|")]], + after = [[("abcd"|)]] + }, + { + name = "move right when inside quote with special slash" , + key = [["]], + before = [[("abcd\"|")]], + after = [[("abcd\""|)]] + }, + { + name = "breakline on {" , + filetype="javascript", + key = [[]], + before = [[a{|}]], + after = [[}]] + }, + { + name = "breakline on (" , + filetype="javascript", + key = [[]], + before = [[a(|)]], + after = [[)]] + }, + { + name = "breakline on ]" , + filetype="javascript", + key = [[]], + before = [[a[|] ]], + after = "] " + }, + { + name = "breakline on < html" , + filetype="html", + key = [[]], + before = [[
|
]], + after = [[]] + } +} + + +describe('autopairs ', function() + for _, value in pairs(data) do + it("test "..value.name, function() + local before = string.gsub(value.before , '%|' , "") + local after = string.gsub(value.after , '%|' , "") + local p_before = string.find(value.before , '%|') + local p_after = string.find(value.after , '%|') + local line = 1 + if value.filetype ~= nil then + vim.bo.filetype = value.filetype + else + vim.bo.filetype = "text" + end + vim.fn.setline(line , before) + vim.fn.setpos('.' ,{0 , line , p_before , 0}) + helpers.insert(value.key) + helpers.feed("") + local result = vim.fn.getline(line) + local pos = vim.fn.getpos('.') + if value.key ~= '' then + eq(p_after , pos[3]+ 1 , "\n\n pos error: " .. value.name .. "\n") + eq(after, result , "\n\n text error: " .. value.name .. "\n") + else + local line2 = vim.fn.getline(line + 2) + eq(line + 1, pos[2], '\n\n breakline error:' .. value.name .. "\n") + eq(after, line2 , "\n\n text error: " .. value.name .. "\n") + vim.fn.setline(line, '') + vim.fn.setline(line+ 1, '') + vim.fn.setline(line+ 2, '') + end + end) + end + print("end") +end) + +