require "lunit" bc = require("bc") module("test_bc", package.seeall, lunit.testcase) function test_init() bci = bc:init("master") end function test_set_get_noun() bci = bc:init("master") for i,val in ipairs({"string", true, 10}) do assert_true(bci:set_noun("light", val), "Could not set noun") assert_equal(val, bci:get_noun("light"), "Result does not match") end end function test_set_remote_noun_failure() bci = bc:init("master") assert_false(bci:set_noun("power"), "Something did not go to plan") end function test_request_remote_noun() bci = bc:init("master") assert_equal(12, bci:get_noun("power"), "Wrong value returned") end function test_call_verb() bci = bc:init("master") bci:call_verb("inc_pwr", 11) assert_equal(11, bci:get_noun("power"), "Wrong value returned") end function test_listen_onchange() bci = bc:init("master") i = false bci:listen_noun("power", "onchange", nil, function() i = true end) bci:call_verb("inc_pwr", 13) assert_true(i, "Callback was not invoked") end function test_listen_cancel() bci = bc:init("master") i = false local id = bci:listen_noun("power", "onchange", nil, function() i = true end) bci:listen_cancel("power", id) bci:call_verb("inc_pwr", 13) assert_false(i, "Callback was not canelled") end function test_fromafar_request_noun() bci = bc:init("master") bci:set_noun("light", true) assert_equal(true, bci._backend:debug_request_noun("light"), "Wrong value returned") end function test_fromafar_call_verb() bci = bc:init("master") local i = false bci:on_verb("toggle_light", function() i = true end) bci._backend:debug_call_verb("toggle_light") assert_true(i, "Verb was not called") end function test_fromafar_register_cb_onchange() bci = bc:init("master") local i = false bci._backend:debug_register_cb("light", "onchange", nil, function() i = true end) bci:set_noun("light", true) assert_true(i, "Callback was not invoked") end function test_fromafar_register_cb_onrising() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onrising", nil, function() i = true end) bci:set_noun("light", 9) assert_false(i, "Callback was wrongly invoked") bci:set_noun("light", 10) assert_true(i, "Callback was not invoked") end function test_fromafar_register_cb_onfalling() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onfalling", nil, function() i = true end) bci:set_noun("light", 11) assert_false(i, "Callback was wrongly invoked") bci:set_noun("light", 10) assert_true(i, "Callback was not invoked") end function test_fromafar_register_cb_onvalue() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onvalue", 11, function() i = true end) bci:set_noun("light", 12) assert_false(i, "Callback was wrongly invoked") bci:set_noun("light", 11) assert_true(i, "Callback was not invoked") end function test_fromafar_register_cb_onabove() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onabove", 20, function() i = true end) bci:set_noun("light", 15) assert_false(i, "Callback was wrongly invoked") bci:set_noun("light", 26) assert_true(i, "Callback was not invoked") end function test_fromafar_register_cb_onbelow() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onbelow", 5, function() i = true end) bci:set_noun("light", 11) assert_false(i, "Callback was wrongly invoked") bci:set_noun("light", 3) assert_true(i, "Callback was not invoked") end function test_fromafar_cancel_cb() bci = bc:init("master") local i = false bci:set_noun("light", 10) bci._backend:debug_register_cb("light", "onchange", nil, function() i = true end) bci._backend:debug_cancel_cb() bci:set_noun("light", 3) assert_false(i, "Callback was not cancelled") end