Skip to content

Instantly share code, notes, and snippets.

@ashtrayoz
Created December 1, 2017 07:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ashtrayoz/7f4304019614a7703d35337d4baa72bd to your computer and use it in GitHub Desktop.
Save ashtrayoz/7f4304019614a7703d35337d4baa72bd to your computer and use it in GitHub Desktop.
Unit test for preserve_metadata
if run_unit_tests then
local test_item_name =
minetest:get_current_modname()..":preserve_metadata_test_node"
minetest.register_node(test_item_name, {
description="test",
groups={cracky=3, attached_node=1},
preserve_metadata = function(pos, node, oldmeta, drops)
drops[1]:get_meta():set_string("test", "metadata_target_string")
end,
})
local delay_func = function()
local test_parameters = {
itemname = test_item_name,
min_pos = { x=30900, y=-30903, z=30900 },
max_pos = { x=30902, y=-30900, z=30902 },
testnode_pos = { x=30901, y=-30901, z=30901 },
sand_pos = { x=30901, y=-30902, z=30901 },
}
local test_func = function(bpos, action, calls_remaining, p)
local key, obj, x, y, z
for x = p.min_pos.x, p.max_pos.x do
for y = p.min_pos.y, p.max_pos.y do
for z = p.min_pos.z, p.max_pos.z do
minetest.set_node({x=x, y=y, z=z}, { name="default:stone", })
end
end
end
minetest.set_node(p.sand_pos, { name = "default:sand", })
minetest.set_node(p.testnode_pos, { name=p.itemname })
-- Clean out old objects first.
for key, obj in pairs(minetest.get_objects_inside_radius(
p.sand_pos, 3)) do
local lua_entity = obj:get_luaentity()
if not obj:is_player() and
lua_entity and lua_entity.name == "__builtin:item" then
obj:remove()
end
end
minetest.dig_node(p.sand_pos) -- Detach the node above.
for key, obj in pairs(minetest.get_objects_inside_radius(
p.sand_pos, 3)) do
local lua_entity = obj:get_luaentity()
if not obj:is_player() and
lua_entity and lua_entity.name == "__builtin:item" then
if string.find(lua_entity.itemstring,
"metadata_target_string") then
minetest.log("Unit test for preserve_metadata: PASS.")
else
minetest.log("Unit test for preserve_metadata: FAIL.")
end
obj:remove()
end
end
-- Do a rough clean up job.
minetest.set_node(p.sand_pos, { name="default:stone" })
minetest.set_node(p.testnode_pos, { name="default:stone" })
end
minetest.emerge_area(test_parameters.min_pos, test_parameters.max_pos,
test_func, test_parameters)
end
minetest.after(1, delay_func)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment