#include #include "rbx/test/DataModelFixture.h" #include "V8DataModel/Mouse.h" #include "V8DataModel/Tool.h" using namespace RBX; struct CallbackCounter { shared_ptr expectedMouse; unsigned int count; CallbackCounter() : count(0) {} void callback(const shared_ptr mouse) { BOOST_CHECK_EQUAL(expectedMouse.get(), mouse.get()); count++; } }; BOOST_AUTO_TEST_SUITE( ToolTest ) // avoid name conflict with "Tool" BOOST_AUTO_TEST_CASE( EquipFiresForConnectionsBeforeAndAfterEquip ) { shared_ptr tool = Creatable::create(); shared_ptr mouse = Creatable::create(); CallbackCounter beforeEquip, afterEquip; beforeEquip.expectedMouse = mouse; afterEquip.expectedMouse = mouse; BOOST_CHECK_EQUAL(0, beforeEquip.count); BOOST_CHECK_EQUAL(0, afterEquip.count); boost::function)> beforeFun = boost::bind(&CallbackCounter::callback, &beforeEquip, _1); tool->equippedSignal.connect(beforeFun); tool->equippedSignal.equipped(mouse); BOOST_CHECK_EQUAL(1, beforeEquip.count); BOOST_CHECK_EQUAL(0, afterEquip.count); boost::function)> afterFun = boost::bind(&CallbackCounter::callback, &afterEquip, _1); tool->equippedSignal.connect(afterFun); BOOST_CHECK_EQUAL(1, beforeEquip.count); BOOST_CHECK_EQUAL(1, afterEquip.count); tool->equippedSignal.unequipped(); BOOST_CHECK_EQUAL(1, beforeEquip.count); BOOST_CHECK_EQUAL(1, afterEquip.count); CallbackCounter afterUnequip; boost::function)> afterUnequipFun = boost::bind(&CallbackCounter::callback, &afterUnequip, _1); tool->equippedSignal.connect(afterUnequipFun); BOOST_CHECK_EQUAL(1, beforeEquip.count); BOOST_CHECK_EQUAL(1, afterEquip.count); BOOST_CHECK_EQUAL(0, afterUnequip.count); shared_ptr mouse2 = Creatable::create(); beforeEquip.expectedMouse = mouse2; afterEquip.expectedMouse = mouse2; afterUnequip.expectedMouse = mouse2; tool->equippedSignal.equipped(mouse2); BOOST_CHECK_EQUAL(2, beforeEquip.count); BOOST_CHECK_EQUAL(2, afterEquip.count); BOOST_CHECK_EQUAL(1, afterUnequip.count); } BOOST_AUTO_TEST_SUITE_END()