diff options
Diffstat (limited to 'test/basic')
-rw-r--r-- | test/basic/init.lua | 221 | ||||
-rw-r--r-- | test/basic/linker.lua | 134 | ||||
-rw-r--r-- | test/basic/textmerger.lua | 219 |
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 = "", + }, +} |