@@ -2,38 +2,40 @@ local core = require 'core.code-action'
22local files = require ' files'
33local lang = require ' language'
44local catch = require ' catch'
5+ local furi = require ' file-uri'
56
67rawset (_G , ' TEST' , true )
78
89local EXISTS = {}
910
10- local function eq (a , b )
11- if a == EXISTS and b ~= nil then
11+ local function eq (expected , result )
12+ if expected == EXISTS and result ~= nil then
1213 return true
1314 end
14- if b == EXISTS and a ~= nil then
15+ if result == EXISTS and expected ~= nil then
1516 return true
1617 end
17- local tp1 , tp2 = type (a ), type (b )
18+ local tp1 , tp2 = type (expected ), type (result )
1819 if tp1 ~= tp2 then
19- return false
20+ return false , string.format ( " : expected type %s, got %s for %s " , tp1 , tp2 )
2021 end
2122 if tp1 == ' table' then
2223 local mark = {}
23- for k in pairs (a ) do
24- if not eq (a [k ], b [k ]) then
25- return false
24+ for k in pairs (expected ) do
25+ local ok , err = eq (expected [k ], result [k ])
26+ if not ok then
27+ return false , string.format (" .%s%s" , k , err )
2628 end
2729 mark [k ] = true
2830 end
29- for k in pairs (b ) do
31+ for k in pairs (result ) do
3032 if not mark [k ] then
31- return false
33+ return false , string.format ( " .%s: missing key in result " , k )
3234 end
3335 end
3436 return true
3537 end
36- return a == b
38+ return expected == result , string.format ( " : expected %s, got %s " , expected , result )
3739end
3840
3941function TEST (script )
@@ -47,6 +49,32 @@ function TEST(script)
4749 end
4850end
4951
52+ local function TEST_CROSSFILE (testfiles )
53+ local mainscript = table.remove (testfiles , 1 )
54+ return function (expected )
55+ for _ , data in ipairs (testfiles ) do
56+ local uri = furi .encode (data .path )
57+ files .setText (uri , data .content )
58+ files .compileState (uri )
59+ end
60+
61+ local newScript , catched = catch (mainscript , ' ?' )
62+ files .setText (TESTURI , newScript )
63+ files .compileState (TESTURI )
64+
65+ local _ <close> = function ()
66+ for _ , info in ipairs (testfiles ) do
67+ files .remove (furi .encode (info .path ))
68+ end
69+ files .remove (TESTURI )
70+ end
71+
72+ local results = core (TESTURI , catched [' ?' ][1 ][1 ], catched [' ?' ][1 ][2 ])
73+ assert (results )
74+ assert (eq (expected , results ))
75+ end
76+ end
77+
5078TEST [[
5179print(<?a?>, b, c)
5280]]
@@ -154,3 +182,97 @@ local t = {
154182-- edit = EXISTS,
155183-- },
156184-- }
185+
186+ TEST_CROSSFILE {
187+ [[
188+ <?unrequiredModule?>.myFunction()
189+ ]] ,
190+ {
191+ path = ' unrequiredModule.lua' ,
192+ content = [[
193+ local m = {}
194+ m.myFunction = print
195+ return m
196+ ]]
197+ }
198+ } {
199+ {
200+ title = lang .script (' ACTION_AUTOREQUIRE' , ' unrequiredModule' , ' unrequiredModule' ),
201+ kind = ' refactor.rewrite' ,
202+ command = {
203+ title = ' autoRequire' ,
204+ command = ' lua.autoRequire' ,
205+ arguments = {
206+ {
207+ uri = TESTURI ,
208+ target = furi .encode ' unrequiredModule.lua' ,
209+ name = ' unrequiredModule' ,
210+ requireName = ' unrequiredModule'
211+ },
212+ },
213+ }
214+ }
215+ }
216+
217+ TEST_CROSSFILE {
218+ [[
219+ <?myModule?>.myFunction()
220+ ]] ,
221+ {
222+ path = ' myModule/init.lua' ,
223+ content = [[
224+ local m = {}
225+ m.myFunction = print
226+ return m
227+ ]]
228+ }
229+ } {
230+ {
231+ title = lang .script (' ACTION_AUTOREQUIRE' , ' myModule.init' , ' myModule' ),
232+ kind = ' refactor.rewrite' ,
233+ command = {
234+ title = ' autoRequire' ,
235+ command = ' lua.autoRequire' ,
236+ arguments = {
237+ {
238+ uri = TESTURI ,
239+ target = furi .encode ' myModule/init.lua' ,
240+ name = ' myModule' ,
241+ requireName = ' myModule.init'
242+ },
243+ },
244+ }
245+ },
246+ {
247+ title = lang .script (' ACTION_AUTOREQUIRE' , ' init' , ' myModule' ),
248+ kind = ' refactor.rewrite' ,
249+ command = {
250+ title = ' autoRequire' ,
251+ command = ' lua.autoRequire' ,
252+ arguments = {
253+ {
254+ uri = TESTURI ,
255+ target = furi .encode ' myModule/init.lua' ,
256+ name = ' myModule' ,
257+ requireName = ' init'
258+ },
259+ },
260+ }
261+ },
262+ {
263+ title = lang .script (' ACTION_AUTOREQUIRE' , ' myModule' , ' myModule' ),
264+ kind = ' refactor.rewrite' ,
265+ command = {
266+ title = ' autoRequire' ,
267+ command = ' lua.autoRequire' ,
268+ arguments = {
269+ {
270+ uri = TESTURI ,
271+ target = furi .encode ' myModule/init.lua' ,
272+ name = ' myModule' ,
273+ requireName = ' myModule'
274+ },
275+ },
276+ }
277+ },
278+ }
0 commit comments