From 6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Sat, 23 Nov 2019 00:05:30 +0800 Subject: =?UTF-8?q?=E6=AD=A3=E8=B7=AF=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test-beta/diagnostics/init.lua | 689 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 689 insertions(+) create mode 100644 test-beta/diagnostics/init.lua (limited to 'test-beta/diagnostics/init.lua') diff --git a/test-beta/diagnostics/init.lua b/test-beta/diagnostics/init.lua new file mode 100644 index 00000000..0a38bce9 --- /dev/null +++ b/test-beta/diagnostics/init.lua @@ -0,0 +1,689 @@ +local core = require 'core.diagnostics' +local files = require 'files' +local config = require 'config' +local util = require 'utility' + +rawset(_G, 'TEST', true) + +local function catch_target(script, ...) + local list = {} + local function catch(buf) + local cur = 1 + local cut = 0 + while true do + local start, finish = buf:find('', cur) + if not start then + break + end + list[#list+1] = { start - cut, finish - 4 - cut } + cur = finish + 1 + cut = cut + 4 + end + end + catch(script) + if ... then + for _, buf in ipairs {...} do + catch(buf) + end + 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, ...) + files.removeAll() + local new_script, target = catch_target(script, ...) + files.setText('', new_script) + local datas = core('') or {} + 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(util.dump(target), util.dump(results))) + end + else + assert(#target == 0) + end +end + +TEST [[ +local +]] + +TEST [[ +local function x() +end +x() +]] + +TEST([[ + +]], +[[ +local function () +end +]] +) + +TEST [[ +local = +]] + +TEST [[ +local +x = +]] + + +TEST [[ +print() +print() +print() +print() +print(_VERSION) +print() +print(Z) +Z = 1 +]] + +TEST [[ +:::: +]] + +TEST [[ + +]] + +TEST [[ +X = 1 +]] + +TEST [[ +X = [=[ + ]=] +]] + +TEST [[ +local x +print(x) +local +print(x) +]] + +TEST [[ +local x +print(x) +local +print(x) +local +print(x) +]] + +TEST [[ +local _ +print(_) +local _ +print(_) +local _ENV +(_ENV) -- 由于重定义了_ENV,因此print变为了未定义全局变量 +]] + +TEST [[ +local x +return x, function () + return x +end +]] + +TEST [[ +print(1) +_ENV = nil +]] + +TEST [[ +local _ENV = { print = print } +print(1) +]] + +config.config.diagnostics.disable['undefined-env-child'] = true +TEST [[ +_ENV = nil + = 1 --> _ENV.GLOBAL = 1 +]] + +TEST [[ +_ENV = nil +local _ = --> local _ = _ENV.print +]] + +TEST [[ +_ENV = {} +GLOBAL = 1 --> _ENV.GLOBAL = 1 +]] + +TEST [[ +_ENV = {} +local _ = print --> local _ = _ENV.print +]] + +TEST [[ +GLOBAL = 1 +_ENV = nil +]] + +config.config.diagnostics.disable['undefined-env-child'] = nil +TEST [[ +print() +:sub(1, 1) +]] + +TEST [[ +print() +('string') +]] + +TEST [[ +local x +return x + : f(1) + : f(1) +]] + +TEST [[ +return { + +} +]] + +TEST [[ +return { + +} +]] + +TEST [[ +print() +'string' +]] + +TEST [[ +print +{ + x = 1, +} +]] + +TEST [[ +local function x(a, b) + return a, b +end +x(1, 2, ) +]] + +TEST [[ +local function x(a, b, ...) + return a, b, ... +end +x(1, 2, 3, 4, 5) +]] + +TEST [[ +local m = {} +function m:x(a, b) + return a, b +end +m:x(1, 2, ) +]] + +TEST [[ +local m = {} +function m:x(a, b) + return a, b +end +m.x(1, 2, 3, ) +]] + +TEST [[ +local m = {} +function m.x(a, b) + return a, b +end +m:x(1, , , ) +]] + +TEST [[ +local m = {} +function m.x() +end +m:x() +]] + +TEST [[ +InstanceName = 1 +Instance = _G[InstanceName] +]] + +TEST [[ +(''):sub(1, 2) +]] + +TEST [=[ +return [[ + +]] +]=] + +config.config.diagnostics.disable['unused-local'] = true +TEST [[ +local f = +]] + +TEST [[ +local f;f = +]] + +TEST [[ + +]] + +TEST [[ +F = +]] + +TEST [[ + +]] + +config.config.diagnostics.disable['unused-local'] = false +config.config.diagnostics.disable['unused-function'] = true +TEST [[ +local mt, x +function mt:m() + function x:m() + end +end +return mt, x +]] + +TEST [[ +local mt = {} +function mt:f() +end +return mt +]] + +TEST [[ +local = {} +function mt:f() +end +]] + +TEST [[ +local = {} +x.a = 1 +]] + +TEST [[ +local = {} +x['a'] = 1 +]] + +TEST [[ +local function f() +end +f() +]] + +TEST [[ +local function f() +end +f() +]] + +TEST [[ +local function f(var) + print(var) +end +local var +f(var) +]] + +TEST [[ +local function f(a, b) + return a, b +end +f(1, 2, , ) +]] + +TEST [[ +local mt = {} +function mt:f(a, b) + return a, b +end +mt.f(1, 2, 3, ) +]] + + +TEST [[ +local mt = {} +function mt.f(a, b) + return a, b +end +mt:f(1, , , ) +]] + +TEST [[ +local mt = {} +function mt:f(a, b) + return a, b +end +mt:f(1, 2, , ) +]] + +TEST [[ +local function f(a, b, ...) + return a, b, ... +end +f(1, 2, 3, 4) +]] + +TEST [[ +next({}, 1, ) +print(1, 2, 3, 4, 5) +]] + +TEST [[ +local function f(callback) + callback(1, 2, 3) +end +f(function () end) +]] + +--TEST [[ +--local realTostring = tostring +--tostring = function () end +--tostring() +--tostring = realTostring +--tostring(1) +--]] + +TEST [[ + = 1 +tostring = 1 +ROOT = 1 +_G.bb = 1 +]] + +TEST [[ +local f = load('') +f(1, 2, 3) +]] + +require 'config' .config.runtime.version = 'Lua 5.3' +TEST [[ +(1) +]] + +TEST [[ +X = table[] +]] + +TEST [[ +return { + = 1, + y = 2, + = 3, +} +]] + +TEST [[ +return { + x = 1, + y = 2, +}, { + x = 1, + y = 2, +} +]] + +TEST [[ +local m = {} +function m.open() +end + +m:open() +]] + +TEST [[ + +]] + +TEST [[ + +]] + +TEST [[ +if true then +else + return +end +]] + +TEST [[ +while true do +end +]] + +TEST [[ + +]] + +TEST [[ + +]] + +TEST [[ +local _ = 1, +]] + +TEST [[ +_ = 1, +]] + +TEST [[ +local function x() + do + local k + print(k) + x() + end + local k = 1 + print(k) +end +]] + +TEST [[ +local function x() + local loc + x() + print(loc) +end +]] + +TEST [[ +local = {} +t[1] = 1 +]] + +--TEST [[ +-----@class +-----@class +--]] +-- +--TEST [[ +-----@class A : +--]] +-- +--TEST [[ +-----@class +-----@class +-----@class +-----@class +--]] +-- +--TEST [[ +-----@class A : B +-----@class B : C +-----@class C : D +-----@class D +--]] +-- +--TEST [[ +-----@type +--]] +-- +--TEST [[ +-----@class A +-----@type A|| +--]] +-- +--TEST [[ +-----@class AAA +-----@alias B AAA +-- +-----@type B +--]] +-- +--TEST [[ +-----@alias B +--]] +-- +--TEST [[ +-----@class +-----@class B +-----@alias +--]] +-- +--TEST [[ +-----@param x +--]] +-- +--TEST [[ +-----@class Class +-----@param Class +--local function f(x) +-- return x +--end +--f() +--]] +-- +--TEST [[ +-----@class Class +-----@param Class +--function F(x) +-- return x +--end +--F() +--]] +-- +--TEST [[ +-----@class Class +-----@param Class +-----@param y Class +-----@param Class +--local function f(x, y) +-- return x, y +--end +--f() +--]] +-- +--TEST [[ +-----@field +-----@class Class +--]] +-- +--TEST [[ +-----@class Class +-----@field Class +-----@field Class +--]] +-- +--TEST [[ +-----@class Class : any +--]] +-- +--TEST [[ +-----@type fun(a: integer) +--local f +--f() +--]] + +TEST [[ +local x +x = +]] + +TEST [[ +local x, y +x = +]] + +TEST [[ +local x, y, z +x = x and y or '' .. z +]] + +TEST [[ +local x +x = x or -1 +]] + +TEST [[ +local x +x = x or (0 + 1) +]] + +TEST [[ +local x, y +x = (x + y) or 0 +]] + +TEST [[ +local t = {} +t.a = 1 +t.a = 2 +return t +]] + +TEST [[ +table.insert({}, 1, 2, ) +]] -- cgit v1.2.3