jecs/test/addons/observers.luau

107 lines
2 KiB
Text
Raw Normal View History

2025-03-30 20:14:22 +00:00
local jecs = require("@jecs")
2025-04-10 17:52:07 +00:00
local testkit = require("@testkit")
local test = testkit.test()
local CASE, TEST, FINISH, CHECK = test.CASE, test.TEST, test.FINISH, test.CHECK
2025-04-10 19:10:42 +00:00
local observers_add = require("@addons/observers")
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
TEST("addons/observers", function()
local world = observers_add(jecs.world())
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
do CASE "Ensure ordering between signals and observers"
local A = world:component()
local B = world:component()
local count = 0
local function counter()
count += 1
end
world:observer({
callback = counter,
query = world:query(A, B),
})
world:added(A, counter)
world:added(A, counter)
world:removed(A, counter)
local e = world:entity()
world:add(e, A)
CHECK(count == 2)
world:add(e, B)
CHECK(count == 3)
world:remove(e, A)
CHECK(count == 4)
2025-03-30 20:14:22 +00:00
end
2025-04-10 17:52:07 +00:00
do CASE "Rematch entities in observers"
local A = world:component()
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
local count = 0
local function counter()
count += 1
end
world:observer({
query = world:query(A),
callback = counter
})
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
local e = world:entity()
world:set(e, A, true)
CHECK(count == 1)
world:remove(e, A)
CHECK(count == 1)
world:set(e, A, true)
CHECK(count == 2)
world:set(e, A, true)
CHECK(count == 3)
2025-03-30 20:14:22 +00:00
end
2025-04-10 17:52:07 +00:00
do CASE "Don't report changed components in monitor"
local A = world:component()
local count = 0
local function counter()
count += 1
end
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
world:monitor({
query = world:query(A),
callback = counter
})
local e = world:entity()
world:set(e, A, true)
CHECK(count == 1)
world:remove(e, A)
CHECK(count == 2)
world:set(e, A, true)
CHECK(count == 3)
world:set(e, A, true)
CHECK(count == 3)
end
2025-04-22 02:18:43 +00:00
do CASE "Call on pairs"
local A = world:component()
local callcount = 0
world:added(A, function(entity)
callcount += 1
end)
world:added(A, function(entity)
callcount += 1
end)
local e = world:entity()
local e1 = world:entity()
world:add(e1, jecs.pair(A, e))
world:add(e, jecs.pair(A, e1))
CHECK(callcount == 4)
end
2025-04-10 17:52:07 +00:00
end)
2025-03-30 20:14:22 +00:00
2025-04-10 17:52:07 +00:00
return FINISH()