Skip to content

Commit cf086de

Browse files
committed
1. Extend macro:about / lm:about
2. Add tests
1 parent af8f648 commit cf086de

5 files changed

Lines changed: 153 additions & 8 deletions

File tree

plugins/luamacro/_globalinfo.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function export.GetGlobalInfo()
22
return {
3-
Version = { 3, 0, 0, 942 },
3+
Version = { 3, 0, 0, 943 },
44
MinFarVersion = { 3, 0, 0, 6723 },
55
Guid = win.Uuid("4EBBEFC8-2084-4B7F-94C0-692CE136894D"),
66
Title = "LuaMacro",

plugins/luamacro/changelog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
shmuel 2026-08-22 13:31:33+03:00 - build 943
2+
3+
1. Extend macro:about / lm:about.
4+
5+
2. Add tests.
6+
17
shmuel 2026-08-13 17:28:38+03:00 - build 942
28

39
1. LuaFAR: update luautf8 library to release 0.2.0.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#include <farversion.hpp>
22

3-
#define PLUGIN_BUILD 942
3+
#define PLUGIN_BUILD 943

plugins/luamacro/luamacro.lua

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,13 @@ local function About()
335335
local text = ("%s %d.%d.%d build %d"):format(GInfo.Title, unpack(GInfo.Version))
336336

337337
-- Lua/LuaJIT
338-
text = text.."\n"..(jit and jit.version or _VERSION)
338+
if jit then
339+
local str = jit.version:match(("%d"):rep(10))
340+
str = str and os.date(" (%Y-%m-%d)", str) or ""
341+
text = text.."\n"..jit.version..str
342+
else
343+
text = text.."\n".._VERSION
344+
end
339345

340346
-- MoonScript and LPeg
341347
local ok,lib = pcall(require, "moonscript.version")

plugins/luamacro/macrotest.lua

Lines changed: 138 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ local function pack (...)
7272
return { n=select("#",...), ... }
7373
end
7474

75-
local TmpFileName = win.JoinPath(assert(win.GetEnv"tmp" or win.GetEnv"temp"), "tmp.tmp")
75+
local TmpFileName = win.JoinPath(assert(win.GetEnv"TEMP" or win.GetEnv"TMP"), "tmp.tmp")
7676

7777
local function WriteTmpFile(...)
7878
local fp = assert(io.open(TmpFileName,"w"))
@@ -512,7 +512,7 @@ local function test_mf_msave()
512512
mf.msave("key1", "name1", 100)
513513
mf.msave("key2", "name2", 200, "roaming")
514514
mf.msave("key1", "name1", 300, "local")
515-
for k=1,2 do
515+
for _ = 1,2 do
516516
asrt.eq(mf.mload("key1", "name1"), 100)
517517
asrt.eq(mf.mload("key1", "name1", "roaming"), 100)
518518
asrt.eq(mf.mload("key2", "name2"), 200)
@@ -1167,7 +1167,60 @@ local function test_CheckAndGetHotKey()
11671167
Keys("Esc")
11681168
end
11691169

1170+
--[[------------------------------------------------------------------------------------------------
1171+
0002554: При фильтрации видны элементы меню скрытые с помощью MIF_HIDDEN
1172+
1173+
Description:
1174+
Если активировать фильтр меню (RAlt), и начать фильтровать список, то подходящие под фильтр элементы
1175+
(с флагом MIF_HIDDEN) также будут видны.
1176+
1177+
Даже если ни один из скрытых элементов не подходит, то при отмене фильтра все они появятся.
1178+
--]]------------------------------------------------------------------------------------------------
1179+
local function test_mantis_2554()
1180+
local Items = {
1181+
{text="hidden", hidden=true}, {text="visible"},
1182+
}
1183+
1184+
local AssertInvariant = function()
1185+
asrt.eq(0x20, Menu.ItemStatus(1)) -- Если флаг установлен, то пункт меню не выводится на экран.
1186+
asrt.eq(0x01, Menu.ItemStatus(2)) -- Признак активности. Только один пункт может быть активным.
1187+
end
1188+
local AssertFilterIsOff = function() asrt.eq(0, Menu.Filter(0,-1)) end
1189+
local AssertFilterIsOn = function() asrt.eq(1, Menu.Filter(0,-1)) end
1190+
1191+
-- open the menu
1192+
asrt.istrue(Area.Shell)
1193+
mf.acall(far.Menu,{},Items)
1194+
asrt.istrue(Area.Menu)
1195+
AssertFilterIsOff()
1196+
AssertInvariant()
1197+
1198+
-- turn the menu filter on
1199+
Keys("CtrlAltF")
1200+
AssertFilterIsOn()
1201+
AssertInvariant()
1202+
1203+
-- input something into the filter
1204+
Keys("I")
1205+
AssertInvariant()
1206+
Keys("BS")
1207+
AssertInvariant()
1208+
AssertFilterIsOn()
1209+
1210+
-- turn the menu filter off
1211+
Keys("CtrlAltF")
1212+
AssertFilterIsOff()
1213+
AssertInvariant()
1214+
1215+
-- close the menu
1216+
asrt.istrue(Area.Menu)
1217+
Keys("Esc")
1218+
asrt.istrue(Area.Shell)
1219+
end
1220+
11701221
function MT.test_Menu()
1222+
test_mantis_2554()
1223+
11711224
Keys("F11")
11721225
asrt.str(Menu.Value)
11731226
asrt.eq(Menu.Id, far.Guids.PluginsMenuId)
@@ -1679,7 +1732,7 @@ local function test_RegexControl()
16791732
assert(str=="ITEM;ITEMaITEM;ITEM" and nfound==4 and nrep==4)
16801733

16811734
-- Mantis 3336 (https://bugs.farmanager.com/view.php?id=3336)
1682-
local fr,to,c1,c2,c3
1735+
local c1,c2,c3
16831736
fr,to,c1 = regex.find("{}", "\\{(.)?\\}")
16841737
assert(fr==1 and to==2 and c1==false)
16851738
fr,to,c1,c2,c3 = regex.find("bbb", "(b)?b(b)?(b)?b")
@@ -1874,7 +1927,7 @@ local function test_AdvControl_Synchro()
18741927
end
18751928
far.AdvControl("ACTL_SYNCHRO", 123)
18761929
far.AdvControl("ACTL_SYNCHRO", -456)
1877-
for k=1,2 do
1930+
for _ = 1,2 do
18781931
mf.acall(far.Show); Keys"Esc"
18791932
end
18801933
export.ProcessSynchroEvent = oldProcessSynchroEvent
@@ -1937,7 +1990,7 @@ local function test_far_FarClock()
19371990
-- check granularity
19381991
local OK = false
19391992
temp = far.FarClock() % 10
1940-
for k=1,10 do
1993+
for _ = 1,10 do
19411994
win.Sleep(20)
19421995
if temp ~= far.FarClock() % 10 then OK=true; break; end
19431996
end
@@ -2574,6 +2627,84 @@ local function test_Editor_Misc()
25742627
editor.Quit()
25752628
end
25762629

2630+
local function test_Editor_mantis_2571()
2631+
local flags = "EF_NONMODAL EF_IMMEDIATERETURN EF_DISABLEHISTORY"
2632+
local fname = asrt.str(far.MkTemp())
2633+
2634+
-- open the editor
2635+
editor.Editor(fname,nil,nil,nil,nil,nil,flags)
2636+
asrt.istrue(Area.Editor)
2637+
2638+
local EI = asrt.table(editor.GetInfo())
2639+
asrt.eq(1, EI.TotalLines)
2640+
2641+
-- input some text
2642+
for k = 1,8 do
2643+
editor.InsertString()
2644+
editor.SetString(nil, k, "12345678")
2645+
end
2646+
for _ = 1,4 do editor.InsertString() end
2647+
2648+
EI = asrt.table(editor.GetInfo())
2649+
asrt.eq(13, EI.TotalLines)
2650+
2651+
-- insert a vertical block
2652+
Keys("CtrlHome 3*AltRight 7*AltDown CtrlC CtrlU CtrlV")
2653+
EI = asrt.table(editor.GetInfo())
2654+
asrt.eq(15, EI.TotalLines)
2655+
2656+
-- undo
2657+
Keys("CtrlZ")
2658+
EI = asrt.table(editor.GetInfo())
2659+
asrt.eq(13, EI.TotalLines)
2660+
2661+
-- check
2662+
for k = 1,EI.TotalLines do
2663+
local T = asrt.table(editor.GetString(nil, k))
2664+
asrt.eq(T.StringText, k <= 8 and "12345678" or "")
2665+
end
2666+
2667+
-- clean
2668+
Keys("F2 Esc")
2669+
asrt.istrue(Area.Shell)
2670+
asrt.istrue(win.DeleteFile(fname))
2671+
end
2672+
2673+
local function test_Editor_mantis_3367()
2674+
local flags = "EF_NONMODAL EF_IMMEDIATERETURN EF_DISABLEHISTORY"
2675+
local fname = asrt.str(far.MkTemp())
2676+
2677+
-- open the editor
2678+
editor.Editor(fname,nil,nil,nil,nil,nil,flags)
2679+
asrt.istrue(Area.Editor)
2680+
2681+
-- set ESPT_CURSORBEYONDEOL option to true
2682+
local EI = asrt.table(editor.GetInfo())
2683+
asrt.eq(1, EI.TotalLines)
2684+
asrt.neq(0, band(EI.CurState, F.ECSTATE_SAVED))
2685+
local BeyondEOL = band(EI.Options, F.EOPT_CURSORBEYONDEOL) ~= 0
2686+
asrt.istrue(editor.SetParam(nil, "ESPT_CURSORBEYONDEOL", true))
2687+
2688+
-- move right and input some characters
2689+
Keys("8*Right a b c")
2690+
EI = asrt.table(editor.GetInfo())
2691+
asrt.eq(0, band(EI.CurState, F.ECSTATE_SAVED))
2692+
local T = asrt.table(editor.GetString(nil, 1))
2693+
asrt.eq(T.StringText, " abc")
2694+
2695+
-- undo the input characters
2696+
Keys("CtrlZ")
2697+
EI = asrt.table(editor.GetInfo())
2698+
asrt.neq(0, band(EI.CurState, F.ECSTATE_SAVED))
2699+
T = asrt.table(editor.GetString(nil, 1))
2700+
asrt.eq(T.StringText, "")
2701+
2702+
-- restore BeyondEOL and clean
2703+
asrt.istrue(editor.SetParam(nil, "ESPT_CURSORBEYONDEOL", BeyondEOL))
2704+
Keys("Esc")
2705+
asrt.istrue(Area.Shell)
2706+
end
2707+
25772708
function MT.test_Editor()
25782709
local args = {
25792710
("123456789-"):rep(4), -- plain ASCII
@@ -2587,6 +2718,8 @@ function MT.test_Editor()
25872718
test_Editor_Sel_Dialog(args)
25882719
test_Editor_Sel_Editor(args)
25892720
test_Editor_Misc()
2721+
test_Editor_mantis_2571()
2722+
test_Editor_mantis_3367()
25902723
end
25912724

25922725
function MT.test_all()

0 commit comments

Comments
 (0)