summaryrefslogtreecommitdiff
path: root/test/basic
diff options
context:
space:
mode:
Diffstat (limited to 'test/basic')
-rw-r--r--test/basic/init.lua221
-rw-r--r--test/basic/linker.lua134
-rw-r--r--test/basic/textmerger.lua219
3 files changed, 355 insertions, 219 deletions
diff --git a/test/basic/init.lua b/test/basic/init.lua
index a3a11f62..d3a84152 100644
--- a/test/basic/init.lua
+++ b/test/basic/init.lua
@@ -1,219 +1,2 @@
-local files = require 'files'
-local tm = require 'text-merger'
-
-local function TEST(source)
- return function (expect)
- return function (changes)
- files.removeAll()
- files.setText('', source)
- local text = tm('', changes)
- assert(text == expect)
- end
- end
-end
-
-TEST [[
-
-
-function Test(self)
-
-end
-]][[
-
-
-function Test(self)
-
-end
-
-asser]]{
- [1] = {
- range = {
- ["end"] = {
- character = 0,
- line = 5,
- },
- start = {
- character = 0,
- line = 5,
- },
- },
- rangeLength = 0,
- text = "\
-",
- },
- [2] = {
- range = {
- ["end"] = {
- character = 0,
- line = 6,
- },
- start = {
- character = 0,
- line = 6,
- },
- },
- rangeLength = 0,
- text = "a",
- },
- [3] = {
- range = {
- ["end"] = {
- character = 1,
- line = 6,
- },
- start = {
- character = 1,
- line = 6,
- },
- },
- rangeLength = 0,
- text = "s",
- },
- [4] = {
- range = {
- ["end"] = {
- character = 2,
- line = 6,
- },
- start = {
- character = 2,
- line = 6,
- },
- },
- rangeLength = 0,
- text = "s",
- },
- [5] = {
- range = {
- ["end"] = {
- character = 3,
- line = 6,
- },
- start = {
- character = 3,
- line = 6,
- },
- },
- rangeLength = 0,
- text = "e",
- },
- [6] = {
- range = {
- ["end"] = {
- character = 4,
- line = 6,
- },
- start = {
- character = 4,
- line = 6,
- },
- },
- rangeLength = 0,
- text = "r",
- },
-}
-
-TEST [[
-local mt = {}
-
-function mt['xxx']()
-
-
-
-end
-]] [[
-local mt = {}
-
-function mt['xxx']()
-
-end
-]] {
- [1] = {
- range = {
- ["end"] = {
- character = 4,
- line = 5,
- },
- start = {
- character = 4,
- line = 3,
- },
- },
- rangeLength = 8,
- text = "",
- },
-}
-
-TEST [[
-local mt = {}
-
-function mt['xxx']()
-
-end
-]] [[
-local mt = {}
-
-function mt['xxx']()
- p
-end
-]] {
- [1] = {
- range = {
- ["end"] = {
- character = 4,
- line = 3,
- },
- start = {
- character = 4,
- line = 3,
- },
- },
- rangeLength = 0,
- text = "p",
- },
-}
-
-TEST [[
-print(12345)
-]] [[
-print(123
-45)
-]] {
- [1] = {
- range = {
- ["end"] = {
- character = 9,
- line = 0,
- },
- start = {
- character = 9,
- line = 0,
- },
- },
- rangeLength = 0,
- text = "\
-",
- },
-}
-
-TEST [[
-print(123
-45)
-]] [[
-print(12345)
-]] {
- [1] = {
- range = {
- ["end"] = {
- character = 0,
- line = 1,
- },
- start = {
- character = 9,
- line = 0,
- },
- },
- rangeLength = 2,
- text = "",
- },
-}
+require 'basic.textmerger'
+require 'basic.linker'
diff --git a/test/basic/linker.lua b/test/basic/linker.lua
new file mode 100644
index 00000000..bf4e50bb
--- /dev/null
+++ b/test/basic/linker.lua
@@ -0,0 +1,134 @@
+local linker = require 'core.linker'
+local files = require 'files'
+local util = require 'utility'
+local guide = require 'core.guide'
+
+local function getSource(pos)
+ local ast = files.getAst('')
+ return guide.eachSourceContain(ast.ast, pos, function (source)
+ if source.type == 'local'
+ or source.type == 'getlocal'
+ or source.type == 'setlocal'
+ or source.type == 'setglobal'
+ or source.type == 'getglobal'
+ or source.type == 'field'
+ or source.type == 'method' then
+ return source
+ end
+ end)
+end
+
+local CARE = {}
+local function TEST(script)
+ return function (expect)
+ files.removeAll()
+ local start = script:find('<?', 1, true)
+ local finish = script:find('?>', 1, true)
+ local pos = (start + finish) // 2 + 1
+ local newScript = script:gsub('<[!?]', ' '):gsub('[!?]>', ' ')
+ files.setText('', newScript)
+ local source = getSource(pos)
+ assert(source)
+ local result = linker.getLink(source)
+ for key in pairs(CARE) do
+ assert(result[key] == expect[key])
+ end
+ end
+end
+
+CARE['id'] = true
+TEST [[
+local <?x?>
+]] {
+ id = '9',
+}
+
+TEST [[
+local x
+print(<?x?>)
+]] {
+ id = '7',
+}
+
+TEST [[
+local x
+<?x?> = 1
+]] {
+ id = '7',
+}
+
+CARE['global'] = true
+TEST [[
+print(<?X?>)
+]] {
+ id = '"X"',
+ global = true,
+}
+
+TEST [[
+print(<?X?>)
+]] {
+ id = '"X"',
+ global = true,
+}
+
+TEST [[
+local x
+print(x.y.<?z?>)
+]] {
+ id = '7|"y"|"z"',
+}
+
+TEST [[
+local x
+function x:<?f?>() end
+]] {
+ id = '7|"f"',
+}
+
+TEST [[
+print(X.Y.<?Z?>)
+]] {
+ id = '"X"|"Y"|"Z"',
+ global = true,
+}
+
+TEST [[
+function x:<?f?>() end
+]] {
+ id = '"x"|"f"',
+ global = true,
+}
+
+CARE['tfield'] = true
+TEST [[
+{
+ <?x?> = 1,
+}
+]] {
+ id = '1|"x"',
+ tfield = true,
+}
+
+CARE['freturn'] = true
+TEST [[
+return <?X?>
+]] {
+ id = '"X"',
+ global = true,
+ freturn = 0,
+}
+
+TEST [[
+function f()
+ return <?X?>
+end
+]] {
+ id = '"X"',
+ global = true,
+ freturn = 1,
+}
+
+TEST [[
+
+]]
diff --git a/test/basic/textmerger.lua b/test/basic/textmerger.lua
new file mode 100644
index 00000000..a3a11f62
--- /dev/null
+++ b/test/basic/textmerger.lua
@@ -0,0 +1,219 @@
+local files = require 'files'
+local tm = require 'text-merger'
+
+local function TEST(source)
+ return function (expect)
+ return function (changes)
+ files.removeAll()
+ files.setText('', source)
+ local text = tm('', changes)
+ assert(text == expect)
+ end
+ end
+end
+
+TEST [[
+
+
+function Test(self)
+
+end
+]][[
+
+
+function Test(self)
+
+end
+
+asser]]{
+ [1] = {
+ range = {
+ ["end"] = {
+ character = 0,
+ line = 5,
+ },
+ start = {
+ character = 0,
+ line = 5,
+ },
+ },
+ rangeLength = 0,
+ text = "\
+",
+ },
+ [2] = {
+ range = {
+ ["end"] = {
+ character = 0,
+ line = 6,
+ },
+ start = {
+ character = 0,
+ line = 6,
+ },
+ },
+ rangeLength = 0,
+ text = "a",
+ },
+ [3] = {
+ range = {
+ ["end"] = {
+ character = 1,
+ line = 6,
+ },
+ start = {
+ character = 1,
+ line = 6,
+ },
+ },
+ rangeLength = 0,
+ text = "s",
+ },
+ [4] = {
+ range = {
+ ["end"] = {
+ character = 2,
+ line = 6,
+ },
+ start = {
+ character = 2,
+ line = 6,
+ },
+ },
+ rangeLength = 0,
+ text = "s",
+ },
+ [5] = {
+ range = {
+ ["end"] = {
+ character = 3,
+ line = 6,
+ },
+ start = {
+ character = 3,
+ line = 6,
+ },
+ },
+ rangeLength = 0,
+ text = "e",
+ },
+ [6] = {
+ range = {
+ ["end"] = {
+ character = 4,
+ line = 6,
+ },
+ start = {
+ character = 4,
+ line = 6,
+ },
+ },
+ rangeLength = 0,
+ text = "r",
+ },
+}
+
+TEST [[
+local mt = {}
+
+function mt['xxx']()
+
+
+
+end
+]] [[
+local mt = {}
+
+function mt['xxx']()
+
+end
+]] {
+ [1] = {
+ range = {
+ ["end"] = {
+ character = 4,
+ line = 5,
+ },
+ start = {
+ character = 4,
+ line = 3,
+ },
+ },
+ rangeLength = 8,
+ text = "",
+ },
+}
+
+TEST [[
+local mt = {}
+
+function mt['xxx']()
+
+end
+]] [[
+local mt = {}
+
+function mt['xxx']()
+ p
+end
+]] {
+ [1] = {
+ range = {
+ ["end"] = {
+ character = 4,
+ line = 3,
+ },
+ start = {
+ character = 4,
+ line = 3,
+ },
+ },
+ rangeLength = 0,
+ text = "p",
+ },
+}
+
+TEST [[
+print(12345)
+]] [[
+print(123
+45)
+]] {
+ [1] = {
+ range = {
+ ["end"] = {
+ character = 9,
+ line = 0,
+ },
+ start = {
+ character = 9,
+ line = 0,
+ },
+ },
+ rangeLength = 0,
+ text = "\
+",
+ },
+}
+
+TEST [[
+print(123
+45)
+]] [[
+print(12345)
+]] {
+ [1] = {
+ range = {
+ ["end"] = {
+ character = 0,
+ line = 1,
+ },
+ start = {
+ character = 9,
+ line = 0,
+ },
+ },
+ rangeLength = 2,
+ text = "",
+ },
+}