103 lines
4.8 KiB
Lua
103 lines
4.8 KiB
Lua
-- Kør: luajit tests/test_adFieldStorage.lua (fra repo-roden)
|
|
-- Lagringen skal dække HVERT felt modellen gemmer (FIELD_TYPES), og en mark skal overleve en tur gennem XML.
|
|
dofile("FS25_ADSmartPickup/adFieldModel.lua")
|
|
dofile("FS25_ADSmartPickup/adFieldStorage.lua")
|
|
local failures = 0
|
|
local function check(name, actual, expected)
|
|
if actual == expected then print("OK " .. name) else
|
|
failures = failures + 1
|
|
print(string.format("FAIL %s: forventede %s, fik %s", name, tostring(expected), tostring(actual)))
|
|
end
|
|
end
|
|
|
|
-- falsk XMLFile: gemmer værdier pr. nøgle
|
|
local function fakeXml()
|
|
local values = {}
|
|
local xml = {}
|
|
for _, kind in ipairs({"Int", "String", "Float"}) do
|
|
xml["set" .. kind] = function(_, key, value) values[key] = value end
|
|
xml["get" .. kind] = function(_, key) return values[key] end
|
|
end
|
|
return xml
|
|
end
|
|
|
|
local field = ADFieldModel.with(ADFieldModel.startCare(ADFieldModel.newField(77), "weeding"), {
|
|
kind = "harvest", lastFruit = "WHEAT", mowWidth = 40.8, mowVehicleId = "v1", rakeVehicleId = "v2", windrowOffset = -2.5,
|
|
plan = {mode = "auto", product = "harvest", rake = true, storeBuildingIds = {"b1"}, rigs = 3, unloaders = 2,
|
|
mulch = true, lime = false, soil = "plow", sow = true, sowFruit = "CANOLA", roll = true, fertilize = false, weed = false},
|
|
})
|
|
local record = ADFieldModel.toRecord(field)
|
|
for key in pairs(record) do
|
|
check("ST1 felt med i lagringen: " .. key, ADFieldStorage.FIELD_TYPES[key] ~= nil, true)
|
|
end
|
|
local xml = fakeXml()
|
|
ADFieldStorage.writeRecord(xml, "k", record)
|
|
local back = ADFieldModel.fromRecord(ADFieldStorage.readRecord(xml, "k"))
|
|
local again = ADFieldModel.toRecord(back)
|
|
for key, value in pairs(record) do
|
|
check("ST2 rundtur: " .. key, tostring(again[key]), tostring(value))
|
|
end
|
|
|
|
-- ST3-ST6: kursus-registret (genbrug af Courseplay-kurser) gemmes i samme fil, <courses><course .../></courses>
|
|
dofile("FS25_ADSmartPickup/adCourseCache.lua")
|
|
local course = ADCourseCache.newRecord({vehicle = "v7", field = 22, width = 30.0, sig = "n=4;a=960000;c=800,300",
|
|
settings = ADCourseCache.settingsKey({multiTools = 2, lane = -1}), waypoints = 812})
|
|
for key in pairs(course) do
|
|
check("ST3 kursus-felt med i lagringen: " .. key, ADFieldStorage.COURSE_TYPES[key] ~= nil, true)
|
|
end
|
|
local cxml = fakeXml()
|
|
ADFieldStorage.writeCourseRecord(cxml, "c", course)
|
|
local cback = ADFieldStorage.readCourseRecord(cxml, "c")
|
|
for key, value in pairs(course) do
|
|
check("ST4 kursus-rundtur: " .. key, tostring(cback[key]), tostring(value))
|
|
end
|
|
check("ST4b matcher stadig efter rundtur", ADCourseCache.matches(cback, {field = 22, width = 30, sig = course.sig, settings = course.settings}), true)
|
|
|
|
-- hel fil: save -> load med falsk XMLFile (iterate over indekserede nøgler)
|
|
local function fileXml(store)
|
|
local xml = fakeXml()
|
|
for _, kind in ipairs({"Int", "String", "Float"}) do
|
|
xml["set" .. kind] = function(_, key, value) store[key] = value end
|
|
xml["get" .. kind] = function(_, key) return store[key] end
|
|
end
|
|
function xml.iterate(_, base, fn)
|
|
local index = 0
|
|
while true do
|
|
local prefix = string.format("%s(%d)", base, index)
|
|
local found = false
|
|
for key in pairs(store) do
|
|
if key:sub(1, #prefix + 1) == prefix .. "#" or key:sub(1, #prefix + 1) == prefix .. "." then found = true break end
|
|
end
|
|
if not found then return end
|
|
fn(index + 1, prefix)
|
|
index = index + 1
|
|
end
|
|
end
|
|
function xml.save() end
|
|
function xml.delete() end
|
|
return xml
|
|
end
|
|
local disk = {}
|
|
ADRunsStorage = {FILE_NAME = "runs.xml", getPath = function() return "/save/runs.xml" end}
|
|
XMLFile = {create = function() return fileXml(disk) end, load = function() return fileXml(disk) end}
|
|
function fileExists() return true end
|
|
check("ST5 gem", ADFieldStorage.save({fields = {[77] = field}, fleet = {}, fleetMode = "all",
|
|
courseRecords = ADCourseCache.withRecord({}, course)}), true)
|
|
local loaded = ADFieldStorage.load()
|
|
check("ST6 kursus indlæst", loaded.courseRecords.v7 ~= nil and loaded.courseRecords.v7.waypoints, 812)
|
|
check("ST6b mark indlæst", loaded.fields[77] ~= nil, true)
|
|
-- ST7: gammel fil uden <courses> -> tomt register (bagudkompatibelt)
|
|
disk = {}
|
|
ADFieldStorage.save({fields = {}, fleet = {}, fleetMode = "all"})
|
|
local old = ADFieldStorage.load()
|
|
check("ST7 gammel fil: tomt register", next(old.courseRecords), nil)
|
|
|
|
-- ST8: manuel transport pr. maskine gemmes og indlæses; gammel fil uden -> tom
|
|
disk = {}
|
|
ADFieldStorage.save({fields = {}, fleet = {}, fleetMode = "all", manual = {vehicleCombine = true}})
|
|
check("ST8 manuel transport indlæst", ADFieldStorage.load().manual.vehicleCombine, true)
|
|
check("ST8 gammel fil: ingen manuelle", next(old.manual or {}), nil)
|
|
|
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
|
os.exit(failures == 0 and 0 or 1)
|