From 7217c7749e5403c9c7856c1d12c7986eb9c3b460 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Tue, 31 Mar 2020 17:52:49 +0300 Subject: Goodbye vim, been using neovim for ages now; home directory cleanup --- .../.local/share/nvim/site/test/autoload_test.rb | 561 +++++++++++++++++++++ 1 file changed, 561 insertions(+) create mode 100644 dotfiles/.local/share/nvim/site/test/autoload_test.rb (limited to 'dotfiles/.local/share/nvim/site/test/autoload_test.rb') diff --git a/dotfiles/.local/share/nvim/site/test/autoload_test.rb b/dotfiles/.local/share/nvim/site/test/autoload_test.rb new file mode 100644 index 0000000..aa9bb49 --- /dev/null +++ b/dotfiles/.local/share/nvim/site/test/autoload_test.rb @@ -0,0 +1,561 @@ +require_relative "./helper" +require "json" + +describe "Autoloaded" do + include WithTemporaryDirectory + + before do + FileUtils.touch File.join(@dir, "package.json") + end + + after do + $vim.command("windo wincmd c") + end + + describe "Autocommand" do + it "must fire user autcommand \"Node\"" do + $vim.command "au User Node let node_autocommand = 1337" + $vim.edit File.join(@dir, "other.js") + $vim.echo(%(g:node_autocommand)).must_equal "1337" + end + end + + describe "Goto file" do + it "must define plug mapping in non-JavaScript files" do + $vim.edit File.join(@dir, "README") + $vim.echo(%(maparg("NodeGotoFile", "n"))).wont_equal "" + end + + it "must not be mapped in non-JavaScript files" do + $vim.edit File.join(@dir, "README") + $vim.echo(%(hasmapto("NodeGotoFile"))).must_equal "0" + end + + it "must edit README.txt" do + touch File.join(@dir, "index.js"), %(// Please read README.txt) + touch File.join(@dir, "README.txt") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$gf" + $vim.echo(%(bufname("%"))).must_equal File.join(@dir, "README.txt") + end + + it "must edit README before README.js" do + touch File.join(@dir, "index.js"), "// Please read README" + touch File.join(@dir, "README") + touch File.join(@dir, "README.js") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$gf" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "README") + end + + it "must edit ./README.txt relative to file" do + touch File.join(@dir, "foo", "index.js"), %(// Please read ./README.txt) + touch File.join(@dir, "foo", "README.txt") + + $vim.edit File.join(@dir, "foo", "index.js") + $vim.feedkeys "$gf" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "foo", "README.txt") + end + + it "must edit /.../README.txt" do + touch File.join(@dir, "index.js"), %(// Read #@dir/lib/README.txt) + touch File.join(@dir, "lib", "README.txt") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$gf" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "lib", "README.txt") + end + + it "must edit ./other.js relative to file" do + touch File.join(@dir, "foo", "index.js"), %(require("./other")) + touch File.join(@dir, "foo", "other.js") + + $vim.edit File.join(@dir, "foo", "index.js") + $vim.feedkeys "f.gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "foo", "other.js") + end + + it "must edit ./index.js given ." do + touch File.join(@dir, "other.js"), %(require(".")) + touch File.join(@dir, "index.js") + + $vim.edit File.join(@dir, "other.js") + $vim.feedkeys "f.gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ./index.js given ./" do + touch File.join(@dir, "other.js"), %(require("./")) + touch File.join(@dir, "index.js") + + $vim.edit File.join(@dir, "other.js") + $vim.feedkeys "f.gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ../index.js given .." do + touch File.join(@dir, "foo", "other.js"), %(require("..")) + touch File.join(@dir, "index.js") + + $vim.edit File.join(@dir, "foo", "other.js") + $vim.feedkeys "f.gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ../index.js given ../" do + touch File.join(@dir, "foo", "other.js"), %(require("../")) + touch File.join(@dir, "index.js") + + $vim.edit File.join(@dir, "foo", "other.js") + $vim.feedkeys "f.gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ./node_modules/foo/index.js given foo" do + touch File.join(@dir, "index.js"), %(require("foo")) + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must edit ./node_modules/@scope/foo/index.js given @scope/foo" do + touch File.join(@dir, "index.js"), %(require("@scope/foo")) + target = File.join(@dir, "node_modules", "@scope", "foo", "index.js") + touch target + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must edit ./foo.js given root/foo with root as symlink" do + touch File.join(@dir, "index.js"), %(require("root/foo")) + target = touch File.join(@dir, "foo.js") + FileUtils.mkpath File.join(@dir, "node_modules") + File.symlink "..", File.join(@dir, "node_modules", "root") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must relativize paths" do + touch File.join(@dir, "index.js"), %(require("root/foo")) + target = touch File.join(@dir, "foo.js") + FileUtils.mkpath File.join(@dir, "node_modules") + File.symlink "..", File.join(@dir, "node_modules", "root") + + $vim.edit File.join(@dir, "index.js") + $vim.command %(:cd %:h) + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal File.basename(target) + end + + it "must not show an error when searching for nothing" do + touch File.join(@dir, "index.js"), %("") + + $vim.edit File.join(@dir, "index.js") + $vim.command(%(let v:errmsg = "")) + $vim.feedkeys "gf" + + error = $vim.command("let v:errmsg").sub(/^\S+\s*/, "") + error.must_equal "" + end + + it "must show error when searching for a non-existent file" do + touch File.join(@dir, "index.js"), %(require("new")) + + $vim.edit File.join(@dir, "index.js") + $vim.command(%(let v:errmsg = "")) + $vim.feedkeys "$hhgf" + + error = $vim.command("let v:errmsg").sub(/^\S+\s*/, "") + error.must_equal %(E447: Can't find file "new" in path) + end + + it "must find when filetype is JavaScript and file exists" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + touch File.join(@dir, "index.js"), %(require("foo")) + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must find when filetype is JavaScript and file new" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + $vim.edit File.join(@dir, "index.js") + $vim.insert %(require("foo")) + $vim.normal + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must find when filetype is JSON" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + # NOTE: Use an extensionless file and set ft manually to not have + # filetype.vim set its filetype to JavaScript automatically. + $vim.command("au BufReadPre package set ft=json") + touch File.join(@dir, "package"), %({"dependencies": {"foo": "1.x"}}) + $vim.edit File.join(@dir, "package") + $vim.echo("&filetype").must_equal "json" + + $vim.feedkeys "/foo\\gf" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal target + end + + it "must find when filetype set to JavaScript after open" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + touch File.join(@dir, "index.react"), %(require("foo")) + $vim.edit File.join(@dir, "index.react") + $vim.echo("&filetype").must_equal "" + $vim.command("setfiletype javascript") + $vim.echo("&filetype").must_equal "javascript" + + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must find when filetype set to JSX after open" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + touch File.join(@dir, "index.react"), %(require("foo")) + $vim.edit File.join(@dir, "index.react") + $vim.echo("&filetype").must_equal "" + $vim.command("setfiletype jsx") + $vim.echo("&filetype").must_equal "jsx" + + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + it "must find when filetype set to JavaScript and Foo after open" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + touch File.join(@dir, "index.react"), %(require("foo")) + $vim.edit File.join(@dir, "index.react") + $vim.echo("&filetype").must_equal "" + $vim.command("setfiletype javascript.foo") + $vim.echo("&filetype").must_equal "javascript.foo" + + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + + # Ensure the autocommand detects both orderings. + it "must find when filetype set to Foo and JavaScript after open" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + + touch File.join(@dir, "index.react"), %(require("foo")) + $vim.edit File.join(@dir, "index.react") + $vim.echo("&filetype").must_equal "" + $vim.command("setfiletype foo.javascript") + $vim.echo("&filetype").must_equal "foo.javascript" + + $vim.feedkeys "$hhgf" + $vim.echo(%(bufname("%"))).must_equal target + end + end + + describe "Goto file with split" do + it "must edit file in a new split" do + touch File.join(@dir, "index.js"), %(require("./other")) + touch File.join(@dir, "other.js") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "f.\\f" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "other.js") + $vim.echo(%(winnr("$"))).must_equal "2" + end + end + + describe "Goto file with tab" do + it "must edit file in a new tab" do + touch File.join(@dir, "index.js"), %(require("./other")) + touch File.join(@dir, "other.js") + + $vim.edit File.join(@dir, "index.js") + $vim.feedkeys "f.\\gf" + + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "other.js") + $vim.echo(%(tabpagenr("$"))).must_equal "2" + end + end + + describe "Include file search pattern" do + it "must find matches given a require" do + touch File.join(@dir, "index.js"), <<-end.gsub(/^\s+/, "") + var awesome = require("foo") + awesome() + end + + definition = %(module.exports = function awesome() { return 1337 }) + touch File.join(@dir, "node_modules", "foo", "index.js"), definition + + $vim.edit File.join(@dir, "index.js") + $vim.command("normal G[i").must_equal definition + end + + it "must find matches given a relative require" do + touch File.join(@dir, "index.js"), <<-end.gsub(/^\s+/, "") + var awesome = require("./other") + awesome() + end + + definition = %(module.exports = function awesome() { return 1337 }) + touch File.join(@dir, "other.js"), definition + + $vim.edit File.join(@dir, "index.js") + $vim.command("normal G[i").must_equal definition + end + + it "must find matches given a relative require in another directory" do + touch File.join(@dir, "foo", "index.js"), <<-end.gsub(/^\s+/, "") + var awesome = require("./other") + awesome() + end + + definition = %(module.exports = function awesome() { return 1337 }) + touch File.join(@dir, "foo", "other.js"), definition + + $vim.edit File.join(@dir, "foo", "index.js") + $vim.command("normal G[i").must_equal definition + end + end + + describe ":Nedit" do + # NOTE: Test from a non-JavaScript file everywhere to make sure there are + # no dependencies on JavaScript specific settings. + FULL_COMMAND_MATCH = "2" + + it "must be available in non-JavaScript files" do + $vim.edit File.join(@dir, "README.txt") + $vim.echo("exists(':Nedit')").must_equal FULL_COMMAND_MATCH + end + + it "must be available in JavaScript files" do + $vim.edit File.join(@dir, "index.js") + $vim.echo("exists(':Nedit')").must_equal FULL_COMMAND_MATCH + end + + it "must edit ./README.txt" do + touch File.join(@dir, "README.txt") + $vim.edit File.join(@dir, "CHANGELOG.txt") + $vim.command "Nedit ./README.txt" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "README.txt") + end + + it "must edit ./README.txt relative to node_root" do + touch File.join(@dir, "README.txt") + Dir.mkdir File.join(@dir, "lib") + $vim.edit File.join(@dir, "lib", "CHANGELOG.txt") + $vim.command "Nedit ./README.txt" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "README.txt") + end + + it "must edit /.../README.txt" do + touch File.join(@dir, "lib", "README.txt") + $vim.edit File.join(@dir, "CHANGELOG.txt") + $vim.command "Nedit #@dir/lib/README.txt" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "lib", "README.txt") + end + + it "must edit ./other.js relative to node_root" do + touch File.join(@dir, "other.js") + Dir.mkdir File.join(@dir, "lib") + $vim.edit File.join(@dir, "lib", "CHANGELOG.txt") + $vim.command "Nedit ./other" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "other.js") + end + + it "must edit ./index.js given ." do + touch File.join(@dir, "index.js") + $vim.edit File.join(@dir, "CHANGELOG.txt") + $vim.command "Nedit ." + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ./index.js given . relative to node_root" do + touch File.join(@dir, "index.js") + Dir.mkdir File.join(@dir, "lib") + $vim.edit File.join(@dir, "lib", "CHANGELOG.txt") + $vim.command "Nedit ." + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit ./index.js given ./" do + touch File.join(@dir, "index.js") + $vim.edit File.join(@dir, "CHANGELOG.txt") + $vim.command "Nedit ./" + bufname = File.realpath($vim.echo(%(bufname("%")))) + bufname.must_equal File.join(@dir, "index.js") + end + + it "must edit /node_modules/foo/index.js given foo" do + target = touch File.join(@dir, "node_modules", "foo", "index.js") + $vim.edit File.join(@dir, "README.txt") + $vim.command("Nedit foo") + $vim.echo(%(bufname("%"))).must_equal target + end + + describe "completion" do + after do + $vim.command("set wildignorecase&") + $vim.command("set fileignorecase&") + end + + def complete(cmd) + cmdline = $vim.command(%(silent! normal! :#{cmd}e)) + cmdline.sub(/^:\w+\s+/, "") + end + + public_core_modules = CORE_MODULES.select {|m| m[0] != "_" } + private_core_modules = CORE_MODULES.select {|m| m[0] == "_" } + + it "must return files, directories, modules" do + Dir.mkdir File.join(@dir, "node_modules") + Dir.mkdir File.join(@dir, "node_modules", "require-guard") + Dir.mkdir File.join(@dir, "node_modules", "export") + Dir.mkdir File.join(@dir, "node_modules", "soul") + touch File.join(@dir, "index.js") + + $vim.edit File.join(@dir, "README.txt") + files = %w[export/ require-guard/ soul/ ./index.js ./package.json] + all = public_core_modules + files + complete("Nedit ").split.sort.must_equal all.sort + end + + it "must return only public core modules" do + $vim.edit File.join(@dir, "README.txt") + modules = public_core_modules + ["./package.json"] + complete("Nedit ").must_equal modules.join(" ") + end + + it "must return private core modules if explicitly asked" do + $vim.edit File.join(@dir, "README.txt") + complete("Nedit _").must_equal private_core_modules.join(" ") + end + + it "must return only matching modules" do + Dir.mkdir File.join(@dir, "node_modules") + Dir.mkdir File.join(@dir, "node_modules", "export") + Dir.mkdir File.join(@dir, "node_modules", "soul") + Dir.mkdir File.join(@dir, "node_modules", "soulstash") + + $vim.edit File.join(@dir, "README.txt") + modules = "smalloc stream string_decoder sys soul/ soulstash/" + complete("Nedit s").must_equal modules + end + + it "must not return modules with matching bit in the middle" do + Dir.mkdir File.join(@dir, "node_modules") + Dir.mkdir File.join(@dir, "node_modules", "soul") + Dir.mkdir File.join(@dir, "node_modules", "soulstash") + Dir.mkdir File.join(@dir, "node_modules", "asoul") + + $vim.edit File.join(@dir, "README.txt") + complete("Nedit sou").must_equal "soul/ soulstash/" + end + + it "must return files and directories in module's directory" do + touch File.join(@dir, "node_modules", "soul", "index.js") + touch File.join(@dir, "node_modules", "soul", "test", "test.js") + $vim.edit File.join(@dir, "README.txt") + complete("Nedit soul/").must_equal "soul/index.js soul/test/" + end + + it "must return files and directories given a double slash" do + touch File.join(@dir, "node_modules", "soul", "index.js") + touch File.join(@dir, "node_modules", "soul", "test", "test.js") + $vim.edit File.join(@dir, "README.txt") + complete("Nedit soul//").must_equal "soul//index.js soul//test/" + end + + it "must return files case-insensitively given &fileignorecase" do + skip if $vim.echo(%(exists("&fileignorecase"))) != "1" + + $vim.command("set fileignorecase") + $vim.command("set nowildignorecase") + + touch File.join(@dir, "node_modules", "soul", "index.js") + touch File.join(@dir, "node_modules", "soul", "CHANGELOG") + $vim.edit File.join(@dir, "README.txt") + complete("Nedit soul/chan").must_equal "soul/CHANGELOG" + end + + it "must return files case-insensitively given only &wildignorecase" do + skip if $vim.echo(%(exists("&wildignorecase"))) != "1" + + $vim.command("set nofileignorecase") + $vim.command("set wildignorecase") + + touch File.join(@dir, "node_modules", "soul", "index.js") + touch File.join(@dir, "node_modules", "soul", "CHANGELOG") + $vim.edit File.join(@dir, "README.txt") + complete("Nedit soul/chan").must_equal "soul/CHANGELOG" + end + end + end + + describe ":Nopen" do + it "must edit and lcd to module's directory" do + touch File.join(@dir, "node_modules", "foo", "package.json") + touch File.join(@dir, "node_modules", "foo", "index.js") + + $vim.edit File.join(@dir, "README.txt") + $vim.command("vsplit") + + $vim.command("Nopen foo") + $vim.echo(%(bufname("%"))).must_equal "index.js" + $vim.command("pwd").must_equal File.join(@dir, "node_modules", "foo") + + $vim.command("wincmd p") + $vim.command("pwd").must_equal Dir.pwd + end + + it "must edit and lcd to module's root directory" do + touch File.join(@dir, "node_modules", "foo", "package.json") + touch File.join(@dir, "node_modules", "foo", "lib", "utils.js") + + $vim.edit File.join(@dir, "README.txt") + $vim.command("vsplit") + + $vim.command("Nopen foo/lib/utils") + $vim.echo(%(bufname("%"))).must_equal "lib/utils.js" + $vim.command("pwd").must_equal File.join(@dir, "node_modules", "foo") + + $vim.command("wincmd p") + $vim.command("pwd").must_equal Dir.pwd + end + end +end -- cgit v1.2.3