summaryrefslogtreecommitdiff
path: root/server/test
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2018-12-12 11:16:48 +0800
committer最萌小汐 <sumneko@hotmail.com>2018-12-12 11:16:48 +0800
commit4cf1fb9621ec66eca7f88198bbc7ad2704e43106 (patch)
treeb0e0fbb4f9b757bf50308d0d06c7bf3f6a447a4b /server/test
parentb338c55ba516b2dc6e885ba02f0a0f997cbb437d (diff)
downloadlua-language-server-4cf1fb9621ec66eca7f88198bbc7ad2704e43106.zip
修复检查
Diffstat (limited to 'server/test')
-rw-r--r--server/test/diagnostics/init.lua116
-rw-r--r--server/test/main.lua1
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('测试完成')