356 lines
12 KiB
Lua
356 lines
12 KiB
Lua
dofile("spec/test_helpers.lua")
|
|
--[[
|
|
Technic network unit tests.
|
|
Execute busted at technic source directory.
|
|
--]]
|
|
|
|
-- Load fixtures required by tests
|
|
fixture("minetest")
|
|
fixture("minetest/player")
|
|
fixture("minetest/protection")
|
|
|
|
fixture("pipeworks")
|
|
fixture("network")
|
|
|
|
sourcefile("machines/network")
|
|
|
|
sourcefile("machines/register/cables")
|
|
sourcefile("machines/LV/cables")
|
|
sourcefile("machines/MV/cables")
|
|
sourcefile("machines/HV/cables")
|
|
|
|
sourcefile("machines/register/generator")
|
|
sourcefile("machines/HV/generator")
|
|
|
|
function get_network_fixture(sw_pos)
|
|
-- Build network
|
|
local net_id = technic.create_network(sw_pos)
|
|
assert.is_number(net_id)
|
|
local net = technic.networks[net_id]
|
|
assert.is_table(net)
|
|
return net
|
|
end
|
|
|
|
describe("Power network building", function()
|
|
|
|
describe("cable building", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=800,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=801,z=100}, "technic:switching_station"},
|
|
{{x=101,y=800,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=801,z=100}, "technic:hv_generator"},
|
|
--{{x=102,y=800,z=100}, "technic:hv_cable"}, -- This cable is built
|
|
--{{x=102,y=801,z=100}, "technic:hv_cable"}, -- TODO: Add this cable as test case?
|
|
{{x=103,y=800,z=100}, "technic:hv_cable"}, -- This should appear
|
|
{{x=103,y=801,z=100}, "technic:hv_generator"}, -- This should appear
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=801,z=100})
|
|
local build_pos = {x=102,y=800,z=100}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(1, #net.PR_nodes)
|
|
assert.equals(3, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="technic:hv_cable", param2=0})
|
|
technic.network_node_on_placenode(build_pos, {"HV"}, "technic:hv_cable")
|
|
end)
|
|
|
|
it("is added to network", function()
|
|
assert.same(build_pos, net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
end)
|
|
|
|
it("adds all network nodes", function()
|
|
assert.equals(6, count(net.all_nodes))
|
|
end)
|
|
|
|
it("adds connected machines to network without duplicates", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
--assert.equals({x=103,y=801,z=100}, net.PR_nodes[2])
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("cable building to machine", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=810,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=811,z=100}, "technic:switching_station"},
|
|
{{x=101,y=810,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=811,z=100}, "technic:hv_generator"},
|
|
{{x=102,y=810,z=100}, "technic:hv_cable"},
|
|
--{{x=102,y=811,z=100}, "technic:hv_cable"}, -- This cable is built
|
|
--{{x=103,y=810,z=100}, "technic:hv_cable"}, -- This cable is built
|
|
{{x=103,y=811,z=100}, "technic:hv_generator"}, -- This should appear
|
|
{{x=103,y=812,z=100}, "technic:hv_cable"}, -- Unconnected cable
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=811,z=100})
|
|
local build_pos = {x=103,y=810,z=100}
|
|
local build_pos2 = {x=102,y=811,z=100}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(1, #net.PR_nodes)
|
|
assert.equals(4, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="technic:hv_cable", param2=0})
|
|
technic.network_node_on_placenode(build_pos, {"HV"}, "technic:hv_cable")
|
|
end)
|
|
|
|
it("is added to network", function()
|
|
assert.same(build_pos, net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
end)
|
|
|
|
it("adds all network nodes", function()
|
|
assert.equals(6, count(net.all_nodes))
|
|
end)
|
|
|
|
it("adds connected machines to network without duplicates", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
--assert.equals({x=103,y=801,z=100}, net.PR_nodes[2])
|
|
end)
|
|
|
|
it("does not add unconnected cables to network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position({x=103,y=812,z=100})])
|
|
end)
|
|
|
|
it("does not duplicate already added machine", function()
|
|
world.set_node(build_pos2, {name="technic:hv_cable", param2=0})
|
|
technic.network_node_on_placenode(build_pos2, {"HV"}, "technic:hv_cable")
|
|
assert.equals(2, #net.PR_nodes)
|
|
assert.equals(7, count(net.all_nodes))
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("machine building", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=820,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=821,z=100}, "technic:switching_station"},
|
|
{{x=101,y=820,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=821,z=100}, "technic:hv_generator"},
|
|
{{x=102,y=820,z=100}, "technic:hv_cable"},
|
|
-- {{x=102,y=821,z=100}, "technic:hv_generator"}, -- This machine is built
|
|
{{x=102,y=821,z= 99}, "technic:hv_cable"}, -- This should not be added to network
|
|
{{x=102,y=821,z=101}, "technic:hv_cable"}, -- This should not be added to network
|
|
{{x=103,y=820,z=100}, "technic:hv_cable"},
|
|
{{x=103,y=821,z=100}, "technic:hv_generator"},
|
|
-- Second network for overload test
|
|
{{x=100,y=820,z=102}, "technic:hv_cable"},
|
|
{{x=100,y=821,z=102}, "technic:switching_station"},
|
|
-- {{x=100,y=820,z=101}, "technic:hv_generator"}, -- This machine is built, it should overload
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=821,z=100})
|
|
local net2 = get_network_fixture({x=100,y=821,z=102})
|
|
local build_pos = {x=102,y=821,z=100}
|
|
local build_pos2 = {x=100,y=820,z=101}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
assert.equals(6, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="technic:hv_generator",param2=0})
|
|
technic.network_node_on_placenode(build_pos, {"HV"}, "technic:hv_generator")
|
|
end)
|
|
|
|
it("is added to network without duplicates", function()
|
|
assert.same(build_pos, net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
assert.equals(7, count(net.all_nodes))
|
|
assert.equals(3, #net.PR_nodes)
|
|
assert.is_nil(technic.is_overloaded(net.id))
|
|
assert.is_nil(technic.is_overloaded(net2.id))
|
|
end)
|
|
|
|
it("does not remove connected machines from network", function()
|
|
assert.same({x=101,y=821,z=100},net.all_nodes[minetest.hash_node_position({x=101,y=821,z=100})])
|
|
assert.same({x=103,y=821,z=100},net.all_nodes[minetest.hash_node_position({x=103,y=821,z=100})])
|
|
end)
|
|
|
|
it("does not remove network", function()
|
|
assert.is_hashed(technic.networks[net.id])
|
|
end)
|
|
|
|
it("does not add cables to network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position({x=102,y=821,z=99})])
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position({x=102,y=821,z=101})])
|
|
end)
|
|
|
|
it("overloads network", function()
|
|
world.set_node(build_pos2, {name="technic:hv_generator",param2=0})
|
|
technic.network_node_on_placenode(build_pos2, {"HV"}, "technic:hv_generator")
|
|
assert.not_nil(technic.is_overloaded(net.id))
|
|
assert.not_nil(technic.is_overloaded(net2.id))
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("cable building between networks", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=830,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=831,z=100}, "technic:switching_station"},
|
|
--{{x=101,y=830,z=100}, "technic:hv_cable"}, -- This cable is built
|
|
--{{x=101,y=831,z=100}, "technic:hv_cable"}, -- TODO: Add this cable as test case?
|
|
{{x=102,y=830,z=100}, "technic:hv_cable"},
|
|
{{x=102,y=831,z=100}, "technic:switching_station"},
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=831,z=100})
|
|
local net2 = get_network_fixture({x=102,y=831,z=100})
|
|
local build_pos = {x=101,y=830,z=100}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(1, count(net.all_nodes))
|
|
assert.equals(1, count(net2.all_nodes))
|
|
world.set_node(build_pos, {name="technic:hv_cable", param2=0})
|
|
technic.network_node_on_placenode(build_pos, {"HV"}, "technic:hv_cable")
|
|
end)
|
|
|
|
it("removes network", function()
|
|
assert.is_nil(technic.networks[net.id])
|
|
assert.is_nil(technic.networks[net2.id])
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("cable cutting", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=900,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=901,z=100}, "technic:switching_station"},
|
|
{{x=101,y=900,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=901,z=100}, "technic:hv_generator"},
|
|
{{x=102,y=900,z=100}, "technic:hv_cable"}, -- This cable is digged
|
|
{{x=103,y=900,z=100}, "technic:hv_cable"}, -- This should disappear
|
|
{{x=103,y=901,z=100}, "technic:hv_generator"}, -- This should disappear
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=901,z=100})
|
|
local build_pos = {x=102,y=900,z=100}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
assert.equals(6, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="air",param2=0})
|
|
technic.network_node_on_dignode(build_pos, {"HV"}, "technic:hv_cable")
|
|
end)
|
|
|
|
--[[ NOTE: Whole network is currently removed when cutting cables
|
|
|
|
it("is removed from network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
end)
|
|
|
|
it("removes connected cables from network", function()
|
|
--assert.is_nil(net.all_nodes[minetest.hash_node_position({x=103,y=900,z=100})])
|
|
assert.equals(3, count(net.all_nodes))
|
|
end)
|
|
|
|
it("removes connected machines from network", function()
|
|
--assert.is_nil(net.all_nodes[minetest.hash_node_position({x=103,y=901,z=100})])
|
|
assert.equals(1, #net.PR_nodes)
|
|
end)
|
|
--]]
|
|
|
|
it("removes network", function()
|
|
assert.is_nil(technic.networks[net.id])
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("cable digging below machine", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=910,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=911,z=100}, "technic:switching_station"},
|
|
{{x=101,y=910,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=911,z=100}, "technic:hv_generator"},
|
|
{{x=102,y=910,z=100}, "technic:hv_cable"},
|
|
{{x=103,y=910,z=100}, "technic:hv_cable"}, -- This cable is digged
|
|
{{x=103,y=911,z=100}, "technic:hv_generator"}, -- This should disappear
|
|
-- Multiple cable connections to machine at x 101, vertical cable
|
|
{{x=101,y=910,z=101}, "technic:hv_cable"}, -- cables for second connection
|
|
{{x=101,y=911,z=101}, "technic:hv_cable"}, -- cables for second connection, this cable is digged
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=911,z=100})
|
|
local build_pos = {x=103,y=910,z=100}
|
|
local build_pos2 = {x=101,y=911,z=101}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
assert.equals(8, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="air",param2=0})
|
|
technic.network_node_on_dignode(build_pos, {"HV"}, "technic:hv_cable")
|
|
end)
|
|
|
|
it("is removed from network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
assert.equals(6, count(net.all_nodes))
|
|
end)
|
|
|
|
it("removes connected machines from network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position({x=103,y=911,z=100})])
|
|
assert.equals(1, #net.PR_nodes)
|
|
end)
|
|
|
|
it("does not remove network", function()
|
|
assert.is_hashed(technic.networks[net.id])
|
|
end)
|
|
|
|
it("keeps connected machines in network", function()
|
|
world.set_node(build_pos2, {name="air",param2=0})
|
|
technic.network_node_on_dignode(build_pos2, {"HV"}, "technic:hv_cable")
|
|
assert.same({x=101,y=911,z=100}, net.all_nodes[minetest.hash_node_position({x=101,y=911,z=100})])
|
|
assert.equals(1, #net.PR_nodes)
|
|
assert.equals(5, count(net.all_nodes))
|
|
end)
|
|
|
|
end)
|
|
|
|
describe("machine digging", function()
|
|
|
|
world.layout({
|
|
{{x=100,y=920,z=100}, "technic:hv_cable"},
|
|
{{x=100,y=921,z=100}, "technic:switching_station"},
|
|
{{x=101,y=920,z=100}, "technic:hv_cable"},
|
|
{{x=101,y=921,z=100}, "technic:hv_generator"},
|
|
{{x=102,y=920,z=100}, "technic:hv_cable"},
|
|
{{x=102,y=921,z=100}, "technic:hv_generator"}, -- This machine is digged
|
|
{{x=103,y=920,z=100}, "technic:hv_cable"},
|
|
{{x=103,y=921,z=100}, "technic:hv_generator"},
|
|
})
|
|
-- Build network
|
|
local net = get_network_fixture({x=100,y=921,z=100})
|
|
local build_pos = {x=102,y=921,z=100}
|
|
|
|
it("does not crash", function()
|
|
assert.equals(3, #net.PR_nodes)
|
|
assert.equals(7, count(net.all_nodes))
|
|
world.set_node(build_pos, {name="air",param2=0})
|
|
technic.network_node_on_dignode(build_pos, {"HV"}, "technic:hv_generator")
|
|
end)
|
|
|
|
it("is removed from network", function()
|
|
assert.is_nil(net.all_nodes[minetest.hash_node_position(build_pos)])
|
|
end)
|
|
|
|
it("does not remove other nodes from network", function()
|
|
assert.equals(2, #net.PR_nodes)
|
|
assert.equals(6, count(net.all_nodes))
|
|
end)
|
|
|
|
it("does not remove connected machines from network", function()
|
|
assert.same({x=101,y=921,z=100},net.all_nodes[minetest.hash_node_position({x=101,y=921,z=100})])
|
|
assert.same({x=103,y=921,z=100},net.all_nodes[minetest.hash_node_position({x=103,y=921,z=100})])
|
|
assert.equals(2, #net.PR_nodes)
|
|
end)
|
|
|
|
it("does not remove network", function()
|
|
assert.is_hashed(technic.networks[net.id])
|
|
end)
|
|
|
|
end)
|
|
|
|
end)
|