feat: run-model v2 — retning, kilder, varepolitik, tærskler, runde (XML v2 + v1-migration)
This commit is contained in:
+61
-1
@@ -157,7 +157,7 @@ end
|
||||
-- X1: records skrives som attributter + vehicle-underelementer
|
||||
local out = makeXmlMock()
|
||||
ADRunsStorage.writeRecords(out, ADRuns.toRecords(s5))
|
||||
check("X1 version", out.values["ADSmartPickupRuns#version"], 1)
|
||||
check("X1 version", out.values["ADSmartPickupRuns#version"], 2)
|
||||
check("X1 run 0 navn", out.values["ADSmartPickupRuns.run(0)#name"], "Cow 1")
|
||||
check("X1 run 0 target", out.values["ADSmartPickupRuns.run(0)#target"], 94)
|
||||
check("X1 run 0 varer", out.values["ADSmartPickupRuns.run(0)#ingredients"], "STRAW FORAGE")
|
||||
@@ -193,5 +193,65 @@ check("X3 uden savegame -> tom store", #ADRunsStorage.load().runs, 0)
|
||||
g_currentMission = {missionInfo = {savegameDirectory = "/tmp/sg-ny"}}
|
||||
check("X3 fil mangler -> tom store", #ADRunsStorage.load().runs, 0)
|
||||
|
||||
-- R-v2: udkørsels-run — kind, kilder, varer med politik, tærskler, runde; XML v2 + v1-migration
|
||||
local o1, out = ADRuns.createRun(ADRuns.newStore(), "Sugar out", "outbound")
|
||||
check("Rv2 kind", out.kind, "outbound")
|
||||
local _, plain = ADRuns.createRun(ADRuns.newStore(), "x")
|
||||
check("Rv2 supply som standard", plain.kind, "supply")
|
||||
check("Rv2 sellAt 90", out.sellAtPercent, 90)
|
||||
check("Rv2 storeAbove 80", out.storeAbovePercent, 80)
|
||||
check("Rv2 runde fra", out.collectRound, false)
|
||||
local o2 = ADRuns.toggleSource(o1, out.id, 12694)
|
||||
o2 = ADRuns.toggleSource(o2, out.id, 12386)
|
||||
check("Rv2 to kilder", table.concat(ADRuns.getRun(o2, out.id).sourceWayPointIds, ","), "12694,12386")
|
||||
check("Rv2 toggle fjerner", #ADRuns.getRun(ADRuns.toggleSource(o2, out.id, 12694), out.id).sourceWayPointIds, 1)
|
||||
local o3 = ADRuns.setProductPolicy(o2, out.id, "SUGAR", "sell")
|
||||
o3 = ADRuns.setProductPolicy(o3, out.id, "FORAGE", "store")
|
||||
check("Rv2 politik SUGAR", ADRuns.getProductPolicy(ADRuns.getRun(o3, out.id), "SUGAR"), "sell")
|
||||
check("Rv2 politik ukendt = off", ADRuns.getProductPolicy(ADRuns.getRun(o3, out.id), "STRAW"), "off")
|
||||
check("Rv2 ugyldig politik ignoreres", ADRuns.getProductPolicy(ADRuns.getRun(ADRuns.setProductPolicy(o3, out.id, "SUGAR", "bogus"), out.id), "SUGAR"), "sell")
|
||||
check("Rv2 off fjerner", ADRuns.getProductPolicy(ADRuns.getRun(ADRuns.setProductPolicy(o3, out.id, "SUGAR", "off"), out.id), "SUGAR"), "off")
|
||||
check("Rv2 gammel store urørt", #ADRuns.getRun(o2, out.id).products, 0)
|
||||
local o4 = ADRuns.updateRun(o3, out.id, {sellAtPercent = 120, storeAbovePercent = 10, collectRound = true})
|
||||
check("Rv2 sellAt klippet 100", ADRuns.getRun(o4, out.id).sellAtPercent, 100)
|
||||
check("Rv2 storeAbove klippet 50", ADRuns.getRun(o4, out.id).storeAbovePercent, 50)
|
||||
check("Rv2 runde til", ADRuns.getRun(o4, out.id).collectRound, true)
|
||||
check("Rv2 serialiser", ADRuns.serializeProducts(ADRuns.getRun(o3, out.id).products), "SUGAR:sell FORAGE:store")
|
||||
local parsed = ADRuns.parseProducts("SUGAR:sell FORAGE:store BAD BAD:bogus")
|
||||
check("Rv2 parse antal", #parsed, 2)
|
||||
check("Rv2 parse politik", parsed[2].policy, "store")
|
||||
local rt = ADRuns.fromRecords(ADRuns.toRecords(o4))
|
||||
local rtRun = ADRuns.getRun(rt, out.id)
|
||||
check("Rv2 roundtrip kind", rtRun.kind, "outbound")
|
||||
check("Rv2 roundtrip kilder", table.concat(rtRun.sourceWayPointIds, ","), "12694,12386")
|
||||
check("Rv2 roundtrip products", ADRuns.serializeProducts(rtRun.products), "SUGAR:sell FORAGE:store")
|
||||
check("Rv2 roundtrip sellAt", rtRun.sellAtPercent, 100)
|
||||
check("Rv2 roundtrip runde", rtRun.collectRound, true)
|
||||
local v1 = ADRuns.fromRecords({{id = 7, name = "Old", target = 94, targets = "94", ingredientMode = "auto", ingredients = "", waitPool = "", loops = 0, returnBelow = 50, vehicleIds = {}}})
|
||||
check("Rv2 v1 -> supply", ADRuns.getRun(v1, 7).kind, "supply")
|
||||
check("Rv2 v1 tomme kilder", #ADRuns.getRun(v1, 7).sourceWayPointIds, 0)
|
||||
check("Rv2 v1 sellAt standard", ADRuns.getRun(v1, 7).sellAtPercent, 90)
|
||||
-- XML-laget skriver/læser v2-felterne
|
||||
do
|
||||
local written = {}
|
||||
local xml = {
|
||||
setInt = function(_, k, v) written[k] = v end, setString = function(_, k, v) written[k] = v end,
|
||||
getInt = function(_, k) return written[k] end, getString = function(_, k) return written[k] end,
|
||||
iterate = function(_, prefix, fn)
|
||||
local i = 0
|
||||
while written[string.format("%s(%d)#id", prefix, i)] ~= nil do fn(i, string.format("%s(%d)", prefix, i)); i = i + 1 end
|
||||
end,
|
||||
}
|
||||
ADRunsStorage.writeRecords(xml, ADRuns.toRecords(o4))
|
||||
check("Rv2 xml version 2", written["ADSmartPickupRuns#version"], 2)
|
||||
check("Rv2 xml kind", written["ADSmartPickupRuns.run(0)#kind"], "outbound")
|
||||
check("Rv2 xml sources", written["ADSmartPickupRuns.run(0)#sources"], "12694 12386")
|
||||
check("Rv2 xml products", written["ADSmartPickupRuns.run(0)#products"], "SUGAR:sell FORAGE:store")
|
||||
check("Rv2 xml collectRound", written["ADSmartPickupRuns.run(0)#collectRound"], 1)
|
||||
local back = ADRuns.fromRecords(ADRunsStorage.readRecords(xml))
|
||||
check("Rv2 xml læs sellAt", ADRuns.getRun(back, out.id).sellAtPercent, 100)
|
||||
check("Rv2 xml læs runde", ADRuns.getRun(back, out.id).collectRound, true)
|
||||
end
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user