summaryrefslogtreecommitdiff
path: root/test/crossfile
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2021-08-23 14:58:17 +0800
committer最萌小汐 <sumneko@hotmail.com>2021-08-23 14:58:17 +0800
commit22d7f6c23be209c7b5de149f18efa850f84915f1 (patch)
treeeb5d6feeba3f37bb9c704c2c8f418cff40c8da3f /test/crossfile
parentfdab3eaed0f5e3e85252d5126e1f1927b633c80d (diff)
downloadlua-language-server-22d7f6c23be209c7b5de149f18efa850f84915f1.zip
resolve #624 `different-requires`
Diffstat (limited to 'test/crossfile')
-rw-r--r--test/crossfile/diagnostic.lua137
-rw-r--r--test/crossfile/init.lua1
2 files changed, 138 insertions, 0 deletions
diff --git a/test/crossfile/diagnostic.lua b/test/crossfile/diagnostic.lua
new file mode 100644
index 00000000..3d4eb552
--- /dev/null
+++ b/test/crossfile/diagnostic.lua
@@ -0,0 +1,137 @@
+local files = require 'files'
+local furi = require 'file-uri'
+local core = require 'core.diagnostics'
+local config = require 'config'
+local platform = require 'bee.platform'
+
+config.get 'Lua.diagnostics.neededFileStatus'['deprecated'] = 'Any'
+
+rawset(_G, 'TEST', true)
+
+local function catch_target(script, sep)
+ local list = {}
+ local cur = 1
+ local cut = 0
+ while true do
+ local start, finish = script:find(('<%%%s.-%%%s>'):format(sep, sep), cur)
+ if not start then
+ break
+ end
+ list[#list+1] = { start - cut, finish - 4 - cut }
+ cur = finish + 1
+ cut = cut + 4
+ end
+ local new_script = script:gsub(('<%%%s(.-)%%%s>'):format(sep, sep), '%1')
+ return new_script, list
+end
+
+local function founded(targets, results)
+ if #targets ~= #results then
+ return false
+ end
+ for _, target in ipairs(targets) do
+ for _, result in ipairs(results) do
+ if target[1] == result[1]
+ and target[2] == result[2]
+ and target[3] == result[3]
+ then
+ goto NEXT
+ end
+ end
+ do return false end
+ ::NEXT::
+ end
+ return true
+end
+
+function TEST(datas)
+ files.removeAll()
+
+ local targetList = {}
+ local sourceUri
+ for _, data in ipairs(datas) do
+ local uri = furi.encode(data.path)
+ local new, list = catch_target(data.content, '!')
+ for _, position in ipairs(list) do
+ targetList[#targetList+1] = {
+ position[1],
+ position[2],
+ uri,
+ }
+ end
+ data.content = new
+ files.setText(uri, new)
+ end
+
+ local result = {}
+ for _, data in ipairs(datas) do
+ local uri = furi.encode(data.path)
+ local results = {}
+ core(uri, function (result)
+ for _, res in ipairs(result) do
+ results[#results+1] = res
+ end
+ end)
+ for i, position in ipairs(results) do
+ result[i] = {
+ position.start,
+ position.finish,
+ uri,
+ }
+ end
+ end
+ assert(founded(targetList, result))
+end
+
+TEST {
+ {
+ path = 'f/a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = 'require "a"',
+ },
+ {
+ path = 'c.lua',
+ content = 'require <!"f.a"!>',
+ },
+}
+
+TEST {
+ {
+ path = 'f/a.lua',
+ content = '',
+ },
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = 'require "a"',
+ },
+ {
+ path = 'c.lua',
+ content = 'require "f.a"',
+ },
+}
+
+TEST {
+ {
+ path = 'a.lua',
+ content = '',
+ },
+ {
+ path = 'f/a.lua',
+ content = '',
+ },
+ {
+ path = 'b.lua',
+ content = 'require "a"',
+ },
+ {
+ path = 'c.lua',
+ content = 'require "f.a"',
+ },
+}
diff --git a/test/crossfile/init.lua b/test/crossfile/init.lua
index a7402815..1ed2a943 100644
--- a/test/crossfile/init.lua
+++ b/test/crossfile/init.lua
@@ -3,3 +3,4 @@ require 'crossfile.references'
require 'crossfile.allreferences'
require 'crossfile.hover'
require 'crossfile.completion'
+require 'crossfile.diagnostic'