-- 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, 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 -> 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)