local function test(msg, f) local success, error = pcall(f) if success then print(msg .. "\t\t[OK]") else print(msg .. "\t\t[FAIL]") print(error) end end local ecs = require 'ecs' local Component = ecs.Component test("factories work as expected", function() local factory = Component.newFactory("health", { percent=100 }) local comp1 = factory() assert(comp1.__type == "health", "bad component type for comp1") assert(comp1.percent == 100, "bat percent for comp1") local comp2 = factory{ percent=50 } assert(comp2.__type == "health", "bad component type for comp2") assert(comp2.percent == 50, "bad percent for comp2") local success = pcall(function() comp2.dne = 5 end) assert(not success, "incorrectly succeeded in setting comp2.dne") local success = pcall(function() local comp3 = factory{ percent = 44, something = 2 } end) assert(not success, "incorrectly succeeded in creating comp3") end) test("components serialize as expected", function() local position = Component.newFactory("position", { x=0, y=0, z=0 }) local comp = position{x=10, y=15, z=10} local str = tostring(comp) local tbl = (loadstring("return " .. str))() assert(tbl.__type == "position", "bad type") assert(tbl.x == 10, "bad x") assert(tbl.y == 15, "bad y") assert(tbl.z == 10, "bad z") end) test("components serialize successfully with subcomponents", function() local position = Component.newFactory("position", { x=0, y=0, z=0 }) local player = Component.newFactory("player", { name="", position={} }) local p = player{ name="hannah", position=position{x=10, y=9, z=8} } local tbl = (loadstring("return " .. tostring(p)))() assert(tbl.__type == "player") assert(tbl.name == "hannah") assert(tbl.position.__type == "position") assert(tbl.position.x == 10) assert(tbl.position.y == 9) assert(tbl.position.z == 8) end)