diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2018-12-12 11:16:48 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2018-12-12 11:16:48 +0800 |
commit | 4cf1fb9621ec66eca7f88198bbc7ad2704e43106 (patch) | |
tree | b0e0fbb4f9b757bf50308d0d06c7bf3f6a447a4b /server/test | |
parent | b338c55ba516b2dc6e885ba02f0a0f997cbb437d (diff) | |
download | lua-language-server-4cf1fb9621ec66eca7f88198bbc7ad2704e43106.zip |
修复检查
Diffstat (limited to 'server/test')
-rw-r--r-- | server/test/diagnostics/init.lua | 116 | ||||
-rw-r--r-- | server/test/main.lua | 1 |
2 files changed, 117 insertions, 0 deletions
diff --git a/server/test/diagnostics/init.lua b/server/test/diagnostics/init.lua new file mode 100644 index 00000000..fb188318 --- /dev/null +++ b/server/test/diagnostics/init.lua @@ -0,0 +1,116 @@ +local matcher = require 'matcher' +local parser = require 'parser' + +rawset(_G, 'TEST', true) + +local function catch_target(script) + local list = {} + local cur = 1 + local cut = 0 + while true do + local start, finish = script:find('<!.-!>', 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('<!(.-)!>', '%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] then + goto NEXT + end + end + do return false end + ::NEXT:: + end + return true +end + +function TEST(script) + local new_script, target = catch_target(script) + local ast = parser:ast(new_script) + assert(ast) + local lines = parser:lines(new_script) + local vm = matcher.vm(ast) + assert(vm) + local datas = matcher.diagnostics(vm, lines, 'test') + local results = {} + for i, data in ipairs(datas) do + results[i] = { data.start, data.finish } + end + + if results[1] then + if not founded(target, results) then + error(('%s\n%s'):format(table.dump(target), table.dump(results))) + end + else + assert(#target == 0) + end +end + +TEST [[ +local <!x!> +]] + +TEST [[ +print(<!x!>) +print(log) +print(X) +print(Log) +print(_VERSION) +print(<!y!>) +print(z) +z = 1 +]] + +TEST [[ +::<!LABEL!>:: +]] + +TEST [[ +<! !> +]] + +TEST [[ +x = 1<! !> +]] + +TEST [[ +local <!x!> +print(x) +local <!x!> +print(x) +]] + +TEST [[ +local x +print(x) +local x +print(x) +local x +print(x) +]] + +TEST [[ +local _ +print(_) +local _ +print(_) +local _ENV +print(_ENV) +]] + +TEST [[ +print(_G) +<!('string')!>:sub(1, 1) +]] diff --git a/server/test/main.lua b/server/test/main.lua index 9e619b70..8e340157 100644 --- a/server/test/main.lua +++ b/server/test/main.lua @@ -26,6 +26,7 @@ local function main() test 'vm' --test 'type_inference' test 'definition' + test 'diagnostics' --test 'find_lib' print('测试完成') |