123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- Minetest
- Copyright (C) 2018 nerzhul, Loic BLOT <loic.blot@unix-experience.fr>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
- #include <unordered_map>
- #include "test.h"
- #include "client/event_manager.h"
- class TestEventManager : public TestBase
- {
- public:
- TestEventManager() { TestManager::registerTestModule(this); }
- const char *getName() override { return "TestEventManager"; }
- void runTests(IGameDef *gamedef) override;
- void testRegister();
- void testDeregister();
- void testRealEvent();
- void testRealEventAfterDereg();
- };
- // EventManager test class
- class EventManagerTest : public EventManager
- {
- public:
- static void eventTest(MtEvent *e, void *data)
- {
- UASSERT(e->getType() >= 0);
- UASSERT(e->getType() < MtEvent::TYPE_MAX);
- EventManagerTest *emt = (EventManagerTest *)data;
- emt->m_test_value = e->getType();
- }
- u64 getTestValue() const { return m_test_value; }
- void resetValue() { m_test_value = 0; }
- private:
- u64 m_test_value = 0;
- };
- static TestEventManager g_test_instance;
- void TestEventManager::runTests(IGameDef *gamedef)
- {
- TEST(testRegister);
- TEST(testDeregister);
- TEST(testRealEvent);
- TEST(testRealEventAfterDereg);
- }
- void TestEventManager::testRegister()
- {
- EventManager ev;
- ev.reg(MtEvent::PLAYER_DAMAGE, nullptr, nullptr);
- ev.reg(MtEvent::PLAYER_DAMAGE, nullptr, nullptr);
- }
- void TestEventManager::testDeregister()
- {
- EventManager ev;
- ev.dereg(MtEvent::NODE_DUG, nullptr, nullptr);
- ev.reg(MtEvent::PLAYER_DAMAGE, nullptr, nullptr);
- ev.dereg(MtEvent::PLAYER_DAMAGE, nullptr, nullptr);
- }
- void TestEventManager::testRealEvent()
- {
- EventManager ev;
- auto emt = std::make_unique<EventManagerTest>();
- ev.reg(MtEvent::PLAYER_REGAIN_GROUND, EventManagerTest::eventTest, emt.get());
- // Put event & verify event value
- ev.put(new SimpleTriggerEvent(MtEvent::PLAYER_REGAIN_GROUND));
- UASSERT(emt->getTestValue() == MtEvent::PLAYER_REGAIN_GROUND);
- }
- void TestEventManager::testRealEventAfterDereg()
- {
- EventManager ev;
- auto emt = std::make_unique<EventManagerTest>();
- ev.reg(MtEvent::PLAYER_REGAIN_GROUND, EventManagerTest::eventTest, emt.get());
- // Put event & verify event value
- ev.put(new SimpleTriggerEvent(MtEvent::PLAYER_REGAIN_GROUND));
- UASSERT(emt->getTestValue() == MtEvent::PLAYER_REGAIN_GROUND);
- // Reset internal value
- emt->resetValue();
- // Remove the registered event
- ev.dereg(MtEvent::PLAYER_REGAIN_GROUND, EventManagerTest::eventTest, emt.get());
- // Push the new event & ensure we target the default value
- ev.put(new SimpleTriggerEvent(MtEvent::PLAYER_REGAIN_GROUND));
- UASSERT(emt->getTestValue() == 0);
- }
|