Remove rest of SP_nodes from code, it does not contain anything Reset switch infotext, export machine_tiers Add tests for cable building between active networks Remove all networks when cable is placed between networks Fix SC connectivity issues
355 lines
12 KiB
Lua
355 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.add_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.add_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.add_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.add_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.add_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.add_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.add_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(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)
|