summaryrefslogtreecommitdiff
path: root/test/diagnostics/init.lua
blob: c12bfca68324d3d0d8e2d90f7de2fbf035e812f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
local core   = require 'core.diagnostics'
local files  = require 'files'
local config = require 'config'
local util   = require 'utility'
local catch  = require 'catch'

config.get(nil, 'Lua.diagnostics.neededFileStatus')['deprecated']    = 'Any'
config.get(nil, 'Lua.diagnostics.neededFileStatus')['type-check']    = 'Any'
config.get(nil, 'Lua.diagnostics.neededFileStatus')['await-in-sync'] = 'Any'

rawset(_G, 'TEST', true)

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

---@diagnostic disable: await-in-sync
function TEST(script)
    local newScript, catched = catch(script, '!')
    files.setText(TESTURI, newScript)
    files.open(TESTURI)
    local origins = {}
    local results = {}
    core(TESTURI, false, function (result)
        results[#results+1] = { result.start, result.finish }
        origins[#origins+1] = result
    end)

    if results[1] then
        if not founded(catched['!'] or {}, results) then
            error(('%s\n%s'):format(util.dump(catched['!']), util.dump(results)))
        end
    else
        assert(#catched['!'] == 0)
    end

    files.remove(TESTURI)

    return function (callback)
        callback(origins)
    end
end

function TESTWITH(code)
    return function (script)
        local newScript, catched = catch(script, '!')
        files.setText(TESTURI, newScript)
        files.open(TESTURI)
        local origins = {}
        local results = {}
        core(TESTURI, false, function (result)
            if code ~= result.code then
                return
            end
            results[#results+1] = { result.start, result.finish }
            origins[#origins+1] = result
        end)

        if results[1] then
            if not founded(catched['!'] or {}, results) then
                error(('%s\n%s'):format(util.dump(catched['!']), util.dump(results)))
            end
        else
            assert(#catched['!'] == 0)
        end

        files.remove(TESTURI)

        return function (callback)
            callback(origins)
        end
    end
end

require 'diagnostics.common'
require 'diagnostics.type-check'
require 'diagnostics.global-element'