diff --git a/tests/run.lua b/tests/run.lua index 7bc6d8c..2b18472 100755 --- a/tests/run.lua +++ b/tests/run.lua @@ -13,6 +13,7 @@ test_sources = { "tests/local.lua", "tests/network.lua", "tests/timeout.lua", + "tests/misc.lua", } for _, source in ipairs(test_sources) do loadfile("./tests/"..source)() diff --git a/tests/tests/cleanup.lua b/tests/tests/cleanup.lua index 5142d02..cd30316 100644 --- a/tests/tests/cleanup.lua +++ b/tests/tests/cleanup.lua @@ -68,6 +68,32 @@ function test.clean_network2() end, "unknown") end +function test.clean_network_listener() + local bc1 = BaseControl:new() + local addr1 = network.get_scene() + bc1:register("clnlin1", 1234) + bc1:finalize() + + local bc2 = BaseControl:new() + local addr2 = network.get_scene() + + local tmp + bc2:listen("clnlin1", bc1.Query.Change, function(new) + test.equal(tmp, new, "value did not propagate") + end) + + network.set_scene(addr1) + tmp = 13 + bc1:set("clnlin1", 13) + + network.set_scene(addr2) + bc2:close() + + network.set_scene(addr1) + -- if the listener wasn't cleaned properly, this will fail + bc1:set("clnlin1", 16) +end + function test.unclean_deregister() local bc = BaseControl:new() local addr = network.get_scene() diff --git a/tests/tests/dirty.lua b/tests/tests/dirty.lua index e5974c9..96dd4fb 100644 --- a/tests/tests/dirty.lua +++ b/tests/tests/dirty.lua @@ -77,6 +77,7 @@ function test.finalize_robust() serialization.serialize({ ty=BaseControl.Message.Register, nouns={"finaln2"}, + verbs={"finalv2", "finalv3"}, }) ) @@ -96,11 +97,14 @@ function test.finalize_robust() BaseControl.Network.default_port, serialization.serialize({ ty=BaseControl.Message.Register, - nouns={"finaln3"}, + nouns={"finaln3", "finaln4"}, }) ) - bc2:finalize{"finaln1", "finaln2", "finaln3"} + bc2:finalize{ + "finaln1", "finaln2", "finaln3", + "finaln4", "finalv2", "finalv3", + } test.is_true(bc2:has_noun("finaln1"), "noun missing") test.is_true(bc2:has_noun("finaln2"), "noun missing") diff --git a/tests/tests/local.lua b/tests/tests/local.lua index 96263ab..3435994 100644 --- a/tests/tests/local.lua +++ b/tests/tests/local.lua @@ -47,6 +47,11 @@ function test.register() test.error_raised(function() bc:register("register3", 12) end, "already registered") + + bc:register("register4", function() end) + test.error_raised(function() + bc:register("register4", function() end) + end, "already registered") end function test.register_batch() @@ -143,13 +148,18 @@ function test.call_verb() end) bc:finalize() - bc:call("call1", 1, 2) + local ret = bc:call("call1", 1, 2) test.equal(3, flag1, "call failed") test.equal(1, flag2, "call failed") + test.equal(true, ret, "call not attempted") - bc:call("call1", 10, 10) + local ret = bc:call("call1", 10, 10) test.equal(20, flag1, "call failed") test.equal(2, flag2, "call failed") + test.equal(true, ret, "call not attempted") + + local ret = bc:call("call2", 1, 2, 3) + test.equal(false, ret, "call erroneously attempted") end function test.has_iter_verbs() diff --git a/tests/tests/misc.lua b/tests/tests/misc.lua new file mode 100644 index 0000000..9ba5e31 --- /dev/null +++ b/tests/tests/misc.lua @@ -0,0 +1,59 @@ +local test = require("u-test") + +local serialization = require("serialization") +local computer = require("computer") +local uuid = require("uuid") + +local computer_uptime_saved +function test.os_clock.start_up() + computer_uptime_saved = computer.uptime + computer.uptime = nil +end +function test.os_clock.tear_down() + computer.uptime = computer_uptime_saved + -- Force reload of the module + package.loaded.bc = nil + local BaseControl = require("bc") +end + +function test.os_clock.test_monkeypatched() + -- Force reload of the module + package.loaded.bc = nil + local BaseControl = require("bc") + + -- Test a timeout to prove it works + local bc1 = BaseControl:new() + test.error_raised(function() + bc1:finalize({"to_final1"}, 0.1) + end, "timeout") +end + +local uuid_next_saved +function test.uuid.start_up() + uuid_next_saved = uuid.next + uuid.next = nil +end +function test.uuid.tear_down() + uuid.next = uuid_next_saved + -- Force reload of the module + package.loaded.bc = nil + local BaseControl = require("bc") +end + +function test.uuid.test_monkeypatched() + -- Force reload of the module + package.loaded.bc = nil + local BaseControl = require("bc") + + -- Test a listener as this will use a uuid + local bc = BaseControl:new() + bc:register("lisuuid1", 1234) + bc:finalize() + + local id1 = bc:listen( + "lisuuid1", bc.Query.Change, function(new) end) + local id2 = bc:listen( + "lisuuid1", bc.Query.Change, function(new) end) + + test.not_equal(id1, id2, "uuid collision") +end diff --git a/tests/tests/network.lua b/tests/tests/network.lua index 7f20f6f..fa71cc7 100644 --- a/tests/tests/network.lua +++ b/tests/tests/network.lua @@ -64,6 +64,9 @@ function test.call_sync() test.equal(40, ret, "local sync not correct") test.equal("hello", val, "local sync not multiple") test.equal(2, n, "wrong invokation number") + test.error_raised(function() + bc1:call_sync("sync404", 1, 2, 3) + end, "unknown verb") -- Test remote local bc2 = BaseControl:new() @@ -72,4 +75,7 @@ function test.call_sync() test.equal(40, ret, "local sync not correct") test.equal("hello", val, "local sync not multiple") test.equal(4, n, "wrong invokation number") + test.error_raised(function() + bc2:call_sync("sync404", 1, 2, 3) + end, "unknown verb") end