diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2018-12-24 11:16:27 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2018-12-24 11:16:27 +0800 |
commit | 40a7b97a74bb8fde75ebf5ab5924bc2c80411182 (patch) | |
tree | 9d45a9eea81c6b3d54f441761874a7f238e315f0 | |
parent | bc40e38ee557b338bad56e4c09489ba031fc8787 (diff) | |
download | lua-language-server-40a7b97a74bb8fde75ebf5ab5924bc2c80411182.zip |
加一些测试
-rw-r--r-- | server/test/crossfile/definition.lua | 134 | ||||
-rw-r--r-- | server/test/crossfile/init.lua | 70 |
2 files changed, 135 insertions, 69 deletions
diff --git a/server/test/crossfile/definition.lua b/server/test/crossfile/definition.lua new file mode 100644 index 00000000..43261771 --- /dev/null +++ b/server/test/crossfile/definition.lua @@ -0,0 +1,134 @@ +local service = require 'service' +local workspace = require 'workspace' +local fs = require 'bee.filesystem' +local matcher = require 'matcher' + +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 + +function TEST(data) + local lsp = service() + local ws = workspace(lsp, 'test') + lsp.workspace = ws + + local targetScript, targetList = catch_target(data[1].content, '!') + local targetUri = ws:uriEncode(fs.path(data[1].path)) + if data[1].target then + targetList = data[1].target + else + targetList = targetList[1] + end + + local sourceScript, sourceList = catch_target(data[2].content, '?') + local sourceUri = ws:uriEncode(fs.path(data[2].path)) + + lsp:saveText(targetUri, 1, targetScript) + lsp:saveText(sourceUri, 1, sourceScript) + ws:addFile(targetUri) + ws:addFile(sourceUri) + lsp:compileVM(targetUri) + lsp:compileVM(sourceUri) + + local sourceVM = lsp:loadVM(sourceUri) + assert(sourceVM) + local sourcePos = (sourceList[1][1] + sourceList[1][2]) // 2 + local positions = matcher.definition(sourceVM, sourcePos) + assert(positions and positions[1]) + local start, finish, valueUri = positions[1][1], positions[1][2], positions[1][3] + assert(valueUri == targetUri) + assert(start == targetList[1]) + assert(finish == targetList[2]) +end + +TEST { + { + path = 'a.lua', + content = '', + target = {0, 0}, + }, + { + path = 'b.lua', + content = 'require <?"a"?>', + }, +} + +TEST { + { + path = 'a.lua', + content = 'local <!t!> = 1; return t', + }, + { + path = 'b.lua', + content = 'local <?t?> = require "a"', + }, +} + +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?>() + ]], + }, +} diff --git a/server/test/crossfile/init.lua b/server/test/crossfile/init.lua index e550f8d8..81243416 100644 --- a/server/test/crossfile/init.lua +++ b/server/test/crossfile/init.lua @@ -1,69 +1 @@ -local service = require 'service' -local workspace = require 'workspace' -local fs = require 'bee.filesystem' -local matcher = require 'matcher' - -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 - -function TEST(data) - local lsp = service() - local ws = workspace(lsp, 'test') - lsp.workspace = ws - - local targetScript, targetList = catch_target(data[1].content, '!') - local targetUri = ws:uriEncode(fs.path(data[1].path)) - if data[1].target then - targetList = data[1].target - else - targetList = targetList[1] - end - - local sourceScript, sourceList = catch_target(data[2].content, '?') - local sourceUri = ws:uriEncode(fs.path(data[2].path)) - - lsp:saveText(targetUri, 1, targetScript) - lsp:saveText(sourceUri, 1, sourceScript) - ws:addFile(targetUri) - ws:addFile(sourceUri) - lsp:compileVM(targetUri) - lsp:compileVM(sourceUri) - - local sourceVM = lsp:loadVM(sourceUri) - assert(sourceVM) - local sourcePos = (sourceList[1][1] + sourceList[1][2]) // 2 - local positions = matcher.definition(sourceVM, sourcePos) - assert(positions) - local start, finish, valueUri = positions[1][1], positions[1][2], positions[1][3] - assert(valueUri == targetUri) - assert(start == targetList[1]) - assert(finish == targetList[2]) -end - -TEST { - { - path = 'a.lua', - content = '', - target = {0, 0}, - }, - { - path = 'b.lua', - content = 'require <?"a"?>', - }, -} +require 'crossfile.definition' |