diff options
Diffstat (limited to 'pkgs/applications/editors/neovim/tests.nix')
-rw-r--r-- | pkgs/applications/editors/neovim/tests.nix | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/pkgs/applications/editors/neovim/tests.nix b/pkgs/applications/editors/neovim/tests.nix new file mode 100644 index 00000000000..f9d0d659b73 --- /dev/null +++ b/pkgs/applications/editors/neovim/tests.nix @@ -0,0 +1,135 @@ +{ vimUtils, vim_configurable, writeText, neovim, vimPlugins +, lib, fetchFromGitHub, neovimUtils, wrapNeovimUnstable +, neovim-unwrapped +, fetchFromGitLab +, pkgs +}: +let + inherit (vimUtils) buildVimPluginFrom2Nix; + inherit (neovimUtils) makeNeovimConfig; + + packages.myVimPackage.start = with vimPlugins; [ vim-nix ]; + + plugins = with vimPlugins; [ + { + plugin = vim-obsession; + config = '' + map <Leader>$ <Cmd>Obsession<CR> + ''; + } + ]; + + nvimConfNix = makeNeovimConfig { + inherit plugins; + customRC = '' + " just a comment + ''; + }; + + nvimAutoDisableWrap = makeNeovimConfig { }; + + nvimConfDontWrap = makeNeovimConfig { + inherit plugins; + customRC = '' + " just a comment + ''; + }; + + wrapNeovim2 = suffix: config: + wrapNeovimUnstable neovim-unwrapped (config // { + extraName = suffix; + }); + + nmt = fetchFromGitLab { + owner = "rycee"; + repo = "nmt"; + rev = "d2cc8c1042b1c2511f68f40e2790a8c0e29eeb42"; + sha256 = "1ykcvyx82nhdq167kbnpgwkgjib8ii7c92y3427v986n2s5lsskc"; + }; + + runTest = neovim-drv: buildCommand: + pkgs.runCommandLocal "test-${neovim-drv.name}" ({ + nativeBuildInputs = [ ]; + meta.platforms = neovim-drv.meta.platforms; + }) ('' + source ${nmt}/bash-lib/assertions.sh + vimrc="${writeText "init.vim" neovim-drv.initRc}" + vimrcGeneric="$out/patched.vim" + mkdir $out + ${pkgs.perl}/bin/perl -pe "s|\Q$NIX_STORE\E/[a-z0-9]{32}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g" < "$vimrc" > "$vimrcGeneric" + '' + buildCommand); + +in + pkgs.recurseIntoAttrs ( +rec { + vim_empty_config = vimUtils.vimrcFile { beforePlugins = ""; customRC = ""; }; + + ### neovim tests + ################## + nvim_with_plugins = wrapNeovim2 "-with-plugins" nvimConfNix; + + nvim_via_override = neovim.override { + extraName = "-via-override"; + configure = { + packages.foo.start = [ vimPlugins.ale ]; + customRC = '' + :help ale + ''; + }; + }; + + nvim_with_aliases = neovim.override { + extraName = "-with-aliases"; + vimAlias = true; + viAlias = true; + }; + + # nixpkgs should detect that no wrapping is necessary + nvimShouldntWrap = wrapNeovim2 "-should-not-wrap" nvimAutoDisableWrap; + + # this will generate a neovimRc content but we disable wrapping + nvimDontWrap = wrapNeovim2 "-forced-nowrap" (makeNeovimConfig { + wrapRc = false; + customRC = '' + " this shouldn't trigger the creation of an init.vim + ''; + }); + + force-nowrap = runTest nvimDontWrap '' + ! grep "-u" ${nvimDontWrap}/bin/nvim + ''; + + nvim_via_override-test = runTest nvim_via_override '' + assertFileContent \ + "$vimrcGeneric" \ + "${./neovim-override.vim}" + ''; + + + checkAliases = runTest nvim_with_aliases '' + folder=${nvim_with_aliases}/bin + assertFileExists "$folder/vi" + assertFileExists "$folder/vim" + ''; + + # having no RC generated should autodisable init.vim wrapping + nvim_autowrap = runTest nvim_via_override '' + ! grep "-u" ${nvimShouldntWrap}/bin/nvim + ''; + + + # system remote plugin manifest should be generated, deoplete should be usable + # without the user having to do `UpdateRemotePlugins`. To test, launch neovim + # and do `:call deoplete#enable()`. It will print an error if the remote + # plugin is not registered. + test_nvim_with_remote_plugin = neovim.override { + extraName = "-pathogen-remote"; + configure.pathogen.pluginNames = with vimPlugins; [ deoplete-nvim ]; + }; + + # only neovim makes use of `requiredPlugins`, test this here + test_nvim_with_vim_nix_using_pathogen = neovim.override { + extraName = "-pathogen"; + configure.pathogen.pluginNames = [ "vim-nix" ]; + }; +}) |