From 9619f340827b00d4836406ded073a73b6df9386f Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 21 Nov 2024 09:10:40 +0100 Subject: do not call event handlers when behaviorscript is not active + add doxygen --- src/test/ScriptTest.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/ScriptTest.cpp b/src/test/ScriptTest.cpp index 19fef6d..875c422 100644 --- a/src/test/ScriptTest.cpp +++ b/src/test/ScriptTest.cpp @@ -9,26 +9,44 @@ #include #include #include +#include +#include #include using namespace std; using namespace crepe; using namespace testing; +class MyEvent : public Event { }; + class ScriptTest : public Test { public: ComponentManager component_manager{}; ScriptSystem system{component_manager}; + EventManager & evmgr = EventManager::get_instance(); class MyScript : public Script { // NOTE: default (private) visibility of init and update shouldn't cause // issues! - void init() { this->init_count++; } - void update() { this->update_count++; } + void init() { + this->init_count++; + + subscribe([this](const MyEvent &) { + this->event_count++; + return true; + }); + + // init should never be called more than once + EXPECT_LE(this->init_count, 1); + } + void update() { + this->update_count++; + } public: unsigned init_count = 0; unsigned update_count = 0; + unsigned event_count = 0; }; BehaviorScript * behaviorscript_ref = nullptr; @@ -46,21 +64,58 @@ public: this->script_ref = (MyScript *) this->behaviorscript_ref->script.get(); ASSERT_NE(this->script_ref, nullptr); + + // sanity + ASSERT_EQ(script_ref->init_count, 0); + ASSERT_EQ(script_ref->update_count, 0); + ASSERT_EQ(script_ref->event_count, 0); } }; TEST_F(ScriptTest, Default) { EXPECT_EQ(0, this->script_ref->init_count); EXPECT_EQ(0, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); } TEST_F(ScriptTest, UpdateOnce) { + this->system.update(); + EXPECT_EQ(1, this->script_ref->init_count); + EXPECT_EQ(1, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); +} + +TEST_F(ScriptTest, UpdateInactive) { + this->behaviorscript_ref->active = false; + this->system.update(); EXPECT_EQ(0, this->script_ref->init_count); EXPECT_EQ(0, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); + + this->behaviorscript_ref->active = true; + this->system.update(); + EXPECT_EQ(1, this->script_ref->init_count); + EXPECT_EQ(1, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); +} +TEST_F(ScriptTest, EventInactive) { this->system.update(); + this->behaviorscript_ref->active = false; EXPECT_EQ(1, this->script_ref->init_count); EXPECT_EQ(1, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); + + this->evmgr.trigger_event(); + EXPECT_EQ(1, this->script_ref->init_count); + EXPECT_EQ(1, this->script_ref->update_count); + EXPECT_EQ(0, this->script_ref->event_count); + + this->behaviorscript_ref->active = true; + this->evmgr.trigger_event(); + EXPECT_EQ(1, this->script_ref->init_count); + EXPECT_EQ(1, this->script_ref->update_count); + EXPECT_EQ(1, this->script_ref->event_count); } TEST_F(ScriptTest, ListScripts) { @@ -70,3 +125,4 @@ TEST_F(ScriptTest, ListScripts) { } ASSERT_EQ(1, script_count); } + -- cgit v1.2.3