mineunit("player") fixture("mesecons") fixture("mesecons_gamecompat") local registered_on_player_receive_fields = {} local old_register_on_player_receive_fields = minetest.register_on_player_receive_fields function minetest.register_on_player_receive_fields(func) old_register_on_player_receive_fields(func) table.insert(registered_on_player_receive_fields, func) end mineunit:set_current_modname("mesecons_fpga") mineunit:set_modpath("mesecons_fpga", "../mesecons_fpga") sourcefile("../mesecons_fpga/init") local fpga_user = Player("mesecons_fpga_user") function mesecon._test_program_fpga(pos, program) local node = minetest.get_node(pos) assert.equal("mesecons_fpga:fpga", node.name:sub(1, 18)) local fields = {program = true} for i, instr in ipairs(program) do -- Translate the instruction into formspec fields. local op1, act, op2, dst if #instr == 3 then act, op2, dst = unpack(instr) else assert.equal(4, #instr) op1, act, op2, dst = unpack(instr) end fields[i .. "op1"] = op1 fields[i .. "act"] = (" "):rep(4 - #act) .. act fields[i .. "op2"] = op2 fields[i .. "dst"] = dst end minetest.registered_nodes[node.name].on_rightclick(pos, node, fpga_user) for _, func in ipairs(registered_on_player_receive_fields) do if func(fpga_user, "mesecons:fpga", fields) then break end end end function mesecon._test_copy_fpga_program(pos) fpga_user:get_inventory():set_stack("main", 1, "mesecons_fpga:programmer") local pt = {type = "node", under = vector.new(pos), above = vector.offset(pos, 0, 1, 0)} fpga_user:do_place(pt) return fpga_user:get_wielded_item() end function mesecon._test_paste_fpga_program(pos, tool) fpga_user:get_inventory():set_stack("main", 1, tool) local pt = {type = "node", under = vector.new(pos), above = vector.offset(pos, 0, 1, 0)} fpga_user:do_use(pt) end