|
|
|
|
@ -6,18 +6,20 @@ ser = require("serialization")
|
|
|
|
|
module("test_bc", package.seeall, lunit.testcase)
|
|
|
|
|
|
|
|
|
|
function test_init()
|
|
|
|
|
bci = bc:init("a1", {["light"]=false}, {["toggle_light"]=function() end})
|
|
|
|
|
local bci = bc:init("a1", {["light"]=false}, {["toggle_light"]=function() end})
|
|
|
|
|
assert_true(bci:has_noun("light"), "Nouns were not initialized")
|
|
|
|
|
assert_true(bci:has_verb("toggle_light"), "Verbs were not initialized")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_set_get_noun()
|
|
|
|
|
bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function() end})
|
|
|
|
|
local bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function() end})
|
|
|
|
|
assert_equal(true, bci:get_noun("light"), "First get failed with wrong value")
|
|
|
|
|
bci:set_noun("light", false)
|
|
|
|
|
assert_equal(false, bci:get_noun("light"), "Second get failed with wrong value")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_request_noun()
|
|
|
|
|
bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function() end})
|
|
|
|
|
local bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function() end})
|
|
|
|
|
local i = false
|
|
|
|
|
local expct = true
|
|
|
|
|
remote = require("modem"):init("some_addr", function(laddr, raddr, p, d, msg)
|
|
|
|
|
@ -37,7 +39,7 @@ function test_request_noun()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_call_verb()
|
|
|
|
|
bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function(b)
|
|
|
|
|
local bci = bc:init("a1", {["light"]=true}, {["toggle_light"]=function(b)
|
|
|
|
|
b:set_noun("light", not b:get_noun("light"))
|
|
|
|
|
end})
|
|
|
|
|
remote = require("modem"):init("some_addr", function(laddr, raddr, p, d, msg) end)
|
|
|
|
|
@ -47,29 +49,29 @@ function test_call_verb()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_multinode_call_verb()
|
|
|
|
|
bc1 = bc:init("a1", {["light"]=true}, {["toggle_light"]=function(b)
|
|
|
|
|
local bc1 = bc:init("a1", {["light"]=true}, {["toggle_light"]=function(b)
|
|
|
|
|
b:set_noun("light", not b:get_noun("light"))
|
|
|
|
|
end})
|
|
|
|
|
bc2 = bc:init("a2", {}, {})
|
|
|
|
|
bc1:call_verb("toggle_light")
|
|
|
|
|
local bc2 = bc:init("a2", {}, {})
|
|
|
|
|
assert_true(bc1:call_verb("toggle_light"))
|
|
|
|
|
assert_equal(false, bc1:get_noun("light"), "First verb invokation did not go to plan")
|
|
|
|
|
bc2:call_verb("toggle_light")
|
|
|
|
|
assert_true(bc2:call_verb("toggle_light"))
|
|
|
|
|
assert_equal(true, bc1:get_noun("light"), "Second verb invokation did not go to plan")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_multinode_get_noun()
|
|
|
|
|
key = "foobar"
|
|
|
|
|
bc1 = bc:init("a1", {["light"]=key}, {["toggle_light"]=function(b)
|
|
|
|
|
local key = "foobar"
|
|
|
|
|
local bc1 = bc:init("a1", {["light"]=key}, {["toggle_light"]=function(b)
|
|
|
|
|
b:set_noun("light", not b:get_noun("light"))
|
|
|
|
|
end})
|
|
|
|
|
bc2 = bc:init("a2", {}, {})
|
|
|
|
|
local bc2 = bc:init("a2", {}, {})
|
|
|
|
|
assert_equal(key, bc1:get_noun("light"), "Local get failed")
|
|
|
|
|
assert_equal(key, bc2:get_noun("light"), "Remote get failed")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_multinode_listening()
|
|
|
|
|
bc1 = bc:init("a1", {["foo"]=123}, {})
|
|
|
|
|
bc2 = bc:init("a2", {}, {})
|
|
|
|
|
local bc1 = bc:init("a1", {["foo"]=123}, {})
|
|
|
|
|
local bc2 = bc:init("a2", {}, {})
|
|
|
|
|
local i = false
|
|
|
|
|
-- Local listening
|
|
|
|
|
local id = bc1:listen_noun("foo", "onchange", nil, function(bc, foo)
|
|
|
|
|
@ -93,11 +95,11 @@ function test_multinode_listening()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_listen_modes()
|
|
|
|
|
bci = bc:init("a1", {["noun"]=10}, {})
|
|
|
|
|
local bci = bc:init("a1", {["noun"]=10}, {})
|
|
|
|
|
local i = false
|
|
|
|
|
local id = 0
|
|
|
|
|
-- onchange
|
|
|
|
|
id = bci:listen_noun("noun", "onchange", nil, function(bc, noun)
|
|
|
|
|
local id = bci:listen_noun("noun", "onchange", nil, function(bc, noun)
|
|
|
|
|
i = true
|
|
|
|
|
end)
|
|
|
|
|
bci:set_noun("noun", 11)
|
|
|
|
|
@ -154,3 +156,52 @@ function test_listen_modes()
|
|
|
|
|
assert_true(i, "Listening \"onbelow\" failed(B)")
|
|
|
|
|
bci:listen_cancel("noun", id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_get_unknown_noun()
|
|
|
|
|
local bci = bc:init("a1")
|
|
|
|
|
|
|
|
|
|
assert_false(bci:has_noun("bar"))
|
|
|
|
|
assert_equal(nil, bci:get_noun("bar"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_get_offline_node()
|
|
|
|
|
local bc1 = bc:init("a1")
|
|
|
|
|
local bc2 = bc:init("a2", {["foo"]=true})
|
|
|
|
|
|
|
|
|
|
-- Simulate node going offline
|
|
|
|
|
bc2.modem:remove_self()
|
|
|
|
|
bc2 = nil
|
|
|
|
|
|
|
|
|
|
local val = bc1:get_noun("foo")
|
|
|
|
|
assert_equal(nil, val)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_call_unknown_verb()
|
|
|
|
|
local bci = bc:init("a1")
|
|
|
|
|
|
|
|
|
|
assert_false(bci:has_verb("unknown"))
|
|
|
|
|
assert_equal(false, bci:call_verb("unknown"))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_install_listen_on_unknown_noun()
|
|
|
|
|
local bci = bc:init("a1")
|
|
|
|
|
|
|
|
|
|
assert_false(bci:has_noun("unknown"))
|
|
|
|
|
bci:listen_noun("unknown", "onchange", nil, function() end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function test_late_install()
|
|
|
|
|
local bc1 = bc:init("a1")
|
|
|
|
|
|
|
|
|
|
local i = false
|
|
|
|
|
|
|
|
|
|
assert_false(bc1:has_noun("foo"))
|
|
|
|
|
bc1:listen_noun("foo", "onchange", nil, function()
|
|
|
|
|
i = true
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
local bc2 = bc:init("a2", {["foo"] = 123})
|
|
|
|
|
bc2:set_noun("foo", 321)
|
|
|
|
|
|
|
|
|
|
assert_true(i, "Listener was not called")
|
|
|
|
|
end
|
|
|
|
|
|