diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-11-23 00:05:30 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-11-23 00:05:30 +0800 |
commit | 6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 (patch) | |
tree | fdc22d78150fd1c5edc46732c8b151ccfefb519f /test-beta/crossfile/definition.lua | |
parent | d0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (diff) | |
download | lua-language-server-6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444.zip |
正路目录
Diffstat (limited to 'test-beta/crossfile/definition.lua')
-rw-r--r-- | test-beta/crossfile/definition.lua | 448 |
1 files changed, 448 insertions, 0 deletions
diff --git a/test-beta/crossfile/definition.lua b/test-beta/crossfile/definition.lua new file mode 100644 index 00000000..7cf12c74 --- /dev/null +++ b/test-beta/crossfile/definition.lua @@ -0,0 +1,448 @@ +local files = require 'files' +local furi = require 'file-uri' +local core = require 'core.definition' + +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 sourceList + local sourceUri + for i, data in ipairs(datas) do + local uri = furi.encode(data.path) + local new, list = catch_target(data.content, '!') + if new ~= data.content or data.target then + if data.target then + targetList[#targetList+1] = { + data.target[1], + data.target[2], + uri, + } + else + for _, position in ipairs(list) do + targetList[#targetList+1] = { + position[1], + position[2], + uri, + } + end + end + data.content = new + end + new, list = catch_target(data.content, '?') + if new ~= data.content then + sourceList = list + sourceUri = uri + data.content = new + end + files.setText(uri, data.content) + end + + local sourcePos = (sourceList[1][1] + sourceList[1][2]) // 2 + local positions = core(sourceUri, sourcePos) + if positions then + local result = {} + for i, position in ipairs(positions) do + result[i] = { + position.target.start, + position.target.finish, + position.uri, + } + end + assert(founded(targetList, result)) + else + assert(#targetList == 0) + end +end + +TEST { + { + path = 'a.lua', + content = '', + target = {0, 0}, + }, + { + path = 'b.lua', + content = 'require <?"a"?>', + }, +} + +TEST { + { + path = 'aaa/bbb.lua', + content = '', + target = {0, 0}, + }, + { + path = 'b.lua', + content = 'require "aaa.<?bbb?>"', + }, +} + +TEST { + { + path = 'a.lua', + content = 'local <!t!> = 1; return <!t!>', + }, + { + path = 'b.lua', + content = 'local <?t?> = require "a"', + target = {7, 7}, + }, +} + +if require 'bee.platform'.OS == 'Windows' then +TEST { + { + path = 'a.lua', + content = '', + target = {0, 0}, + }, + { + path = 'b.lua', + content = 'require <?"A"?>', + }, +} +end + +TEST { + { + path = 'a.lua', + content = 'local <!t!> = 1; return <!t!>', + }, + { + path = 'b.lua', + content = 'local <?t?> = require "a"', + target = {7, 7}, + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + local t = { + <!x!> = 1, + } + return t + ]], + }, + { + path = 'b.lua', + content = [[ + local t = require "a" + t.<?x?>() + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + return { + <!x!> = 1, + } + ]], + }, + { + path = 'b.lua', + content = [[ + local t = require "a" + t.<?x?>() + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + return <!function () + end!> + ]], + }, + { + path = 'b.lua', + content = [[ + local <!f!> = require "a" + <?f?>() + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + return <!a():b():c()!> + ]], + }, + { + path = 'b.lua', + content = [[ + local <?t?> = require 'a' + ]], + target = {19, 19}, + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + <!global!> = 1 + ]], + }, + { + path = 'b.lua', + content = [[ + print(<?global?>) + ]], + } +} + +TEST { + { + path = 'b.lua', + content = [[ + print(<?global?>) + ]], + }, + { + path = 'a.lua', + content = [[ + <!global!> = 1 + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + x = {} + x.<!global!> = 1 + ]], + }, + { + path = 'b.lua', + content = [[ + print(x.<?global?>) + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + x.<!global!> = 1 + ]], + }, + { + path = 'b.lua', + content = [[ + print(x.<?global?>) + ]], + }, + { + path = 'c.lua', + content = [[ + x = {} + ]] + } +} + +TEST { + { + path = 'a.lua', + content = [[ + return function (<!arg!>) + print(<?arg?>) + end + ]], + }, + { + path = 'b.lua', + content = [[ + local f = require 'a' + local v = 1 + f(v) + ]], + }, +} + +TEST { + { + path = 'a.lua', + content = [[ + return <!{ + a = 1, + }!> + ]], + }, + { + path = 'b.lua', + content = [[ + local <!t!> = require 'a' + <?t?> + ]], + } +} + +TEST { + { + path = 'a.lua', + content = [[ + return <!function () end!> + ]] + }, + { + path = 'b.lua', + content = [[ + local f = require 'a' + ]] + }, + { + path = 'c.lua', + content = [[ + local <!f!> = require 'a' + <?f?> + ]] + } +} + +TEST { + { + path = 'a.lua', + content = [[ + local function <!f!>() + end + return <!f!> + ]] + }, + { + path = 'b.lua', + content = [[ + local f = require 'a' + ]] + }, + { + path = 'c.lua', + content = [[ + local <!f!> = require 'a' + <?f?> + ]] + } +} + +TEST { + { + path = 'a/xxx.lua', + content = [[ + return <!function () end!> + ]] + }, + { + path = 'b/xxx.lua', + content = [[ + local <!f!> = require 'xxx' + <?f?> + return function () end + ]] + } +} + +TEST { + { + path = 'a.lua', + content = [[ + local x + return { + <!x!> = x, + } + ]], + }, + { + path = 'b.lua', + content = [[ + local t = require 'a' + print(t.<?x?>) + ]], + }, +} + +--TEST { +-- { +-- path = 'a.lua', +-- content = [[ +-- ---@class Class +-- local <!obj!> +-- ]] +-- }, +-- { +-- path = 'b.lua', +-- content = [[ +-- ---@type Class +-- local <!obj!> +-- <?obj?> +-- ]] +-- }, +--} + +--TEST { +-- { +-- path = 'a.lua', +-- content = [[ +-- ---@type Class +-- local <!obj!> +-- <?obj?> +-- ]] +-- }, +-- { +-- path = 'b.lua', +-- content = [[ +-- ---@class Class +-- local <!obj!> +-- ]] +-- }, +--} |