2aac88e3b1
Improve also test tool. Fix #9031, close #9090
195 lines
5.3 KiB
Lua
195 lines
5.3 KiB
Lua
local testFiles = {"verifyUrlDetection_1a",
|
|
"verifyUrlDetection_1b"}
|
|
local URL_INDIC = 8
|
|
local timerInterval = 10
|
|
|
|
local curPos = 0
|
|
local task = -1
|
|
local uFrom = 0
|
|
local uTo = 0
|
|
local mFrom = 0
|
|
local mTo = 0
|
|
local OKorKO = "OK"
|
|
local nFile = 1
|
|
local testResults = {}
|
|
local outFile = nil
|
|
|
|
local function Summary()
|
|
local resLine = ""
|
|
local i = 1
|
|
while testFiles[i] ~= nil do
|
|
if testResults[i] == nil then
|
|
testResults[i] = "KO"
|
|
end
|
|
print(testFiles[i] .. ": " .. testResults[i])
|
|
i = i + 1
|
|
end
|
|
print(resLine)
|
|
if endNppAfterUrlTest ~= nil then
|
|
npp:MenuCommand(IDM_FILE_EXIT)
|
|
end
|
|
end
|
|
|
|
local function nextFile()
|
|
local fileAvail = false
|
|
if outFile ~= nil then
|
|
io.close(outFile)
|
|
end
|
|
while (not fileAvail) and (testFiles[nFile] ~= nil) do
|
|
local fileName = npp:GetNppDirectory() .. "\\..\\Test\\UrlDetection\\" .. testFiles[nFile]
|
|
fileAvail = npp:SwitchToFile(fileName)
|
|
if not fileAvail then
|
|
local f = io.open(fileName,"r")
|
|
if f~=nil then
|
|
io.close(f)
|
|
fileAvail = npp:DoOpen(fileName)
|
|
end
|
|
end
|
|
-- print("Verifying " .. testFiles[nFile] .. " ...")
|
|
print("Verifying " .. npp:GetFileName() .. " ...")
|
|
if fileAvail then
|
|
local outFileName = fileName .. ".result"
|
|
outFile = io.open(outFileName,"w")
|
|
if outFile == nil then
|
|
testResults[nFile] = "KO"
|
|
print("KO", "Cannot open output file \""..fileName.."\"")
|
|
print()
|
|
nFile = nFile + 1;
|
|
end
|
|
else
|
|
testResults[nFile] = "KO"
|
|
print("KO", "Cannot open file \""..fileName.."\"")
|
|
print()
|
|
nFile = nFile + 1;
|
|
end
|
|
end
|
|
return fileAvail
|
|
end
|
|
|
|
local function scrollToNextURL()
|
|
editor.TargetStart = curPos
|
|
editor.TargetEnd = editor.Length
|
|
editor.SearchFlags = SCFIND_REGEXP
|
|
local iRes = editor:SearchInTarget("^u .+ u$")
|
|
if iRes >= 0 then
|
|
uFrom = editor.TargetStart
|
|
uTo = editor.TargetEnd
|
|
editor.TargetStart = uFrom
|
|
editor.TargetEnd = editor.Length
|
|
iRes = editor:SearchInTarget("^m .+ m$")
|
|
if iRes >= 0 then
|
|
mFrom = editor.TargetStart
|
|
mTo = editor.TargetEnd
|
|
local ln1 = editor:LineFromPosition(uFrom)
|
|
local ln2 = editor:LineFromPosition(mFrom)
|
|
if (ln1+1) == ln2 then
|
|
editor:ScrollRange(mTo, uFrom)
|
|
return 1
|
|
else
|
|
editor:GotoPos(mFrom)
|
|
OKorKO = "KO"
|
|
print("KO", "Mask line not following immediately after URL line")
|
|
return -1
|
|
end
|
|
else
|
|
OKorKO = "KO"
|
|
print ("KO", "Mask line not found")
|
|
return -1
|
|
end
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
|
|
local function verifyURL()
|
|
local mMsk = editor:textrange(mFrom, mTo)
|
|
editor:GotoPos(uFrom + 2)
|
|
local uMsk = "m "
|
|
local limit = mTo - mFrom -- if something goes wrong, edit.CurrentPos may never reach (uTo - 2).
|
|
while (editor.CurrentPos < uTo - 2) and (limit >= 0) do
|
|
if editor:IndicatorValueAt(URL_INDIC, editor.CurrentPos) == 0 then
|
|
uMsk = uMsk .. "0"
|
|
else
|
|
uMsk = uMsk .. "1"
|
|
end
|
|
editor:CharRight()
|
|
limit = limit - 1
|
|
end
|
|
local Res = 0
|
|
if limit >= 0 then
|
|
if editor:textrange(editor.CurrentPos, editor.CurrentPos + 2) == " u" then
|
|
uMsk = uMsk .. " m"
|
|
if uMsk == mMsk then
|
|
outFile:write("OK", "\t", editor:textrange(uFrom, uTo), "\n")
|
|
Res = 1
|
|
else
|
|
outFile:write("KO", "\t", editor:textrange(uFrom, uTo), "\n")
|
|
outFile:write("ok", "\t", mMsk, "\n")
|
|
outFile:write("ko", "\t", uMsk, "\n")
|
|
print("KO", "\t", editor:textrange(uFrom, uTo))
|
|
print("ok", "\t", mMsk)
|
|
print("ko", "\t", uMsk)
|
|
OKorKO = "KO"
|
|
Res = 1
|
|
end
|
|
end
|
|
else
|
|
outFile:write("KO", "\t", "internal error", "\n")
|
|
OKorKO = "KO"
|
|
end
|
|
return Res
|
|
end
|
|
|
|
local function goForward(timer)
|
|
if task < 0 then
|
|
task = task + 1
|
|
if task == 0 then
|
|
if not nextFile() then
|
|
npp.StopTimer(timer)
|
|
Summary()
|
|
end
|
|
end
|
|
elseif task == 0 then
|
|
local urlAvail = scrollToNextURL()
|
|
if urlAvail == 1 then
|
|
task = 1
|
|
else
|
|
npp.StopTimer(timer)
|
|
print(OKorKO)
|
|
print()
|
|
testResults[nFile] = OKorKO
|
|
if urlAvail == 0 then
|
|
nFile = nFile + 1
|
|
if nextFile() then
|
|
task = 0
|
|
curPos = 0
|
|
OKorKO = "OK"
|
|
npp.StartTimer(timerInterval, goForward)
|
|
else
|
|
Summary()
|
|
end
|
|
else
|
|
Summary()
|
|
end
|
|
end
|
|
elseif task == 1 then
|
|
if verifyURL() == 0 then
|
|
npp.StopTimer(timer)
|
|
print()
|
|
Summary()
|
|
else
|
|
curPos = mTo
|
|
task = 0
|
|
end
|
|
else
|
|
npp.stopTimer(timer)
|
|
print("KO", "Internal impossibility")
|
|
print()
|
|
Summary()
|
|
end
|
|
end
|
|
|
|
npp.ClearConsole()
|
|
npp.StartTimer(timerInterval, goForward)
|
|
|