157 lines
5.7 KiB
Lua
157 lines
5.7 KiB
Lua
require("mineunit")
|
|
|
|
mineunit("core")
|
|
mineunit("player")
|
|
mineunit("protection")
|
|
|
|
describe("CNC formspec interaction", function()
|
|
|
|
fixture("default")
|
|
fixture("basic_materials")
|
|
fixture("pipeworks")
|
|
fixture("digilines")
|
|
|
|
sourcefile("init")
|
|
|
|
-- Our player Sam will be helping, he promised to place some nodes
|
|
local Sam = Player("Sam")
|
|
local SX = Player("SX")
|
|
|
|
-- Construct test world with CNC machines
|
|
world.clear()
|
|
local pos = {x=3,y=2,z=1}
|
|
world.place_node(pos, {name = "technic:cnc_mk2", param2 = 0}, Sam)
|
|
|
|
local protectedpos = {x=2,y=2,z=2}
|
|
mineunit:protect(protectedpos, SX)
|
|
|
|
local nodedef = minetest.registered_nodes["technic:cnc_mk2"]
|
|
|
|
do -- prepare machines for simple upgrade check
|
|
world.place_node({x=98,y=98,z=98}, {name = "technic:cnc", param2 = 0}, Sam)
|
|
local meta = minetest.get_meta({x=98,y=98,z=98})
|
|
meta:set_string("cnc_product", "default:stone_technic_cnc_element_t")
|
|
meta:set_float("cnc_multiplier", 4.2)
|
|
end
|
|
do -- prepare machines for simple upgrade check
|
|
world.place_node({x=99,y=99,z=99}, {name = "technic:cnc_mk2", param2 = 0}, Sam)
|
|
local meta = minetest.get_meta({x=99,y=99,z=99})
|
|
meta:set_string("cnc_product", "default:stone_technic_cnc_element_t_double")
|
|
meta:set_float("cnc_multiplier", 4.2)
|
|
end
|
|
|
|
-- Let Sam do some formspec interaction tests with CNC machines
|
|
|
|
it("allows placing materials", function()
|
|
Sam:do_metadata_inventory_put(pos, "src", 1, ItemStack("default:stone 42"))
|
|
|
|
-- Check metadata values
|
|
local stack = minetest.get_meta(pos):get_inventory():get_stack("src", 1)
|
|
assert.equals("default:stone", stack:get_name())
|
|
assert.equals(42, stack:get_count())
|
|
end)
|
|
|
|
it("allows placing materials protected", function()
|
|
world.place_node(protectedpos, {name = "technic:cnc_mk2", param2 = 0}, SX)
|
|
SX:do_metadata_inventory_put(protectedpos, "src", 1, ItemStack("default:stone 42"))
|
|
|
|
-- Check metadata values
|
|
local stack = minetest.get_meta(protectedpos):get_inventory():get_stack("src", 1)
|
|
assert.equals("default:stone", stack:get_name())
|
|
assert.equals(42, stack:get_count())
|
|
end)
|
|
|
|
it("disallows placing materials protected", function()
|
|
world.place_node(protectedpos, {name = "technic:cnc_mk2", param2 = 0}, SX)
|
|
Sam:do_metadata_inventory_put(protectedpos, "src", 1, ItemStack("default:stone 42"))
|
|
|
|
-- Check metadata values
|
|
local stack = minetest.get_meta(protectedpos):get_inventory():get_stack("src", 1)
|
|
assert.equals("", stack:get_name())
|
|
assert.equals(0, stack:get_count())
|
|
end)
|
|
|
|
it("does not check protection for noop actions", function()
|
|
-- Check for unnecessary protection messages
|
|
spy.on(minetest, "is_protected")
|
|
-- Submit formspec without any meaningful action
|
|
nodedef.on_receive_fields(pos, "", { quit = true }, Sam)
|
|
-- Check that minetest.is_protected was not called
|
|
assert.spy(minetest.is_protected).was_not.called()
|
|
end)
|
|
|
|
it("checks protection for programming", function()
|
|
-- Check for unnecessary protection messages
|
|
spy.on(minetest, "is_protected")
|
|
-- Submit formspec without any meaningful action
|
|
nodedef.on_receive_fields(pos, "", { half = true }, Sam)
|
|
-- Check that minetest.is_protected was not called
|
|
assert.spy(minetest.is_protected).was.called()
|
|
end)
|
|
|
|
it("sets metadata on form submit", function()
|
|
-- Submit formspec selecting CNC sizes and digiline channel
|
|
nodedef.on_receive_fields(pos, "", { half = true }, Sam)
|
|
nodedef.on_receive_fields(pos, "", { full = true }, Sam)
|
|
nodedef.on_receive_fields(pos, "", { setchannel = true, channel = "Sam" }, Sam)
|
|
|
|
-- Check metadata values
|
|
local meta = minetest.get_meta(pos)
|
|
assert.equals(1, meta:get_int("size"))
|
|
assert.equals("Sam", meta:get("channel"))
|
|
end)
|
|
|
|
it("manufactures products", function()
|
|
-- Submit formspec selecting CNC sizes and program, 2 spheres and 16 sticks
|
|
nodedef.on_receive_fields(pos, "", { sphere = true }, Sam)
|
|
nodedef.on_receive_fields(pos, "", { stick = true }, Sam)
|
|
nodedef.on_receive_fields(pos, "", { sphere = true }, Sam)
|
|
nodedef.on_receive_fields(pos, "", { stick = true }, Sam)
|
|
|
|
-- Check metadata values
|
|
local meta = minetest.get_meta(pos)
|
|
assert.equals("stick", meta:get("program"))
|
|
|
|
-- Check output inventory for correct products
|
|
local stack1 = meta:get_inventory():get_stack("dst", 1)
|
|
assert.equals("default:stone_technic_cnc_sphere", stack1:get_name())
|
|
assert.equals(2, stack1:get_count())
|
|
|
|
local stack2 = meta:get_inventory():get_stack("dst", 2)
|
|
assert.equals("default:stone_technic_cnc_stick", stack2:get_name())
|
|
assert.equals(16, stack2:get_count())
|
|
end)
|
|
|
|
it("updates old machines", function()
|
|
do -- Verify starting point and set meta value that is used to look for old machine
|
|
local meta = minetest.get_meta({x=98,y=98,z=98})
|
|
assert.equals("default:stone_technic_cnc_element_t", meta:get("cnc_product"))
|
|
meta:set_float("technic_power_machine", 1)
|
|
end
|
|
do -- Verify starting point and set meta value that is used to look for old machine
|
|
local meta = minetest.get_meta({x=99,y=99,z=99})
|
|
assert.equals("default:stone_technic_cnc_element_t_double", meta:get("cnc_product"))
|
|
meta:set_float("technic_power_machine", 1)
|
|
end
|
|
|
|
nodedef.on_receive_fields({x=98,y=98,z=98}, "", { quit = true, channel = "Sam" }, Sam)
|
|
nodedef.on_receive_fields({x=99,y=99,z=99}, "", { quit = true, channel = "Sam" }, Sam)
|
|
|
|
do -- Check metadata values
|
|
local meta = minetest.get_meta({x=98,y=98,z=98})
|
|
assert.is_nil(meta:get("cnc_product"))
|
|
assert.is_nil(meta:get("cnc_multiplier"))
|
|
assert.equals("element_t", meta:get("program"))
|
|
assert.equals(2, meta:get_int("size"))
|
|
end
|
|
do -- Check metadata values
|
|
local meta = minetest.get_meta({x=99,y=99,z=99})
|
|
assert.is_nil(meta:get("cnc_product"))
|
|
assert.is_nil(meta:get("cnc_multiplier"))
|
|
assert.equals("element_t", meta:get("program"))
|
|
assert.equals(1, meta:get_int("size"))
|
|
end
|
|
end)
|
|
|
|
end)
|