From d0ff66c9abe9d6abbca12fd811e0c3cb69c1033a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Fri, 22 Nov 2019 23:26:32 +0800
Subject: =?UTF-8?q?=E6=95=B4=E7=90=86=E4=B8=80=E4=B8=8B=E7=9B=AE=E5=BD=95?=
 =?UTF-8?q?=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 script-beta/test/signature/init.lua | 137 ++++++++++++++++++++++++++++++++++++
 1 file changed, 137 insertions(+)
 create mode 100644 script-beta/test/signature/init.lua

(limited to 'script-beta/test/signature/init.lua')

diff --git a/script-beta/test/signature/init.lua b/script-beta/test/signature/init.lua
new file mode 100644
index 00000000..a2a647e7
--- /dev/null
+++ b/script-beta/test/signature/init.lua
@@ -0,0 +1,137 @@
+local parser = require 'parser'
+local core = require 'core'
+local buildVM = require 'vm'
+
+rawset(_G, 'TEST', true)
+
+function TEST(script)
+    return function (expect)
+        local pos = script:find('$', 1, true)
+        local new_script = script:gsub('%$', '')
+        local ast = parser:parse(new_script, 'lua', 'Lua 5.3')
+        local vm = buildVM(ast)
+        assert(vm)
+        local hovers = core.signature(vm, pos)
+        if hovers then
+            assert(expect)
+            local hover = hovers[#hovers]
+
+            local label = hover.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+            expect.label = expect.label:gsub('^[\r\n]*(.-)[\r\n]*$', '%1'):gsub('\r\n', '\n')
+            local arg = hover.argLabel
+
+            assert(expect.label == label)
+            assert(expect.arg[1] == arg[1])
+            assert(expect.arg[2] == arg[2])
+        else
+            assert(expect == nil)
+        end
+    end
+end
+
+TEST [[
+local function x(a, b)
+end
+
+x($
+]]
+{
+    label = "function x(a: any, b: any)",
+    arg = {12, 17},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x($)
+]]
+{
+    label = "function x(a: any, b: any)",
+    arg = {12, 17},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx$)
+]]
+{
+    label = "function x(a: any, b: any)",
+    arg = {12, 17},
+}
+
+TEST [[
+local function x(a, b)
+end
+
+x(xxx, $)
+]]
+{
+    label = "function x(a: any, b: any)",
+    arg = {20, 25},
+}
+
+TEST [[
+function mt:f(a)
+end
+
+mt:f($
+]]
+{
+    label = 'function mt:f(a: any)',
+    arg = {15, 20},
+}
+
+TEST [[
+(''):sub($
+]]
+{
+    label = [[
+function *string:sub(i: integer [, j: integer(-1)])
+  -> string
+]],
+    arg = {22, 31},
+}
+
+TEST [[
+(''):sub(1)$
+]]
+(nil)
+
+TEST [[
+local function f(a, b, c)
+end
+
+f(1, 'string$')
+]]
+(nil)
+
+TEST [[
+pcall(function () $ end)
+]]
+(nil)
+
+TEST [[
+table.unpack {$}
+]]
+(nil)
+
+TEST [[
+---@type fun(x: number, y: number):boolean
+local zzzz
+zzzz($)
+]]
+{
+    label = [[
+function zzzz(x: number, y: number)
+  -> boolean
+]],
+    arg = {15, 23},
+}
+
+TEST [[
+('abc'):format(f($))
+]]
+(nil)
-- 
cgit v1.2.3