/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2020-11-14 * Changed: 2021-04-23 * * */ #include #include #include namespace { class NarratorTest : public ::testing::Test { protected: NarratorTest() = default; ~NarratorTest() override = default; void SetUp() override {} void TearDown() override {} std::shared_ptr mercedes1{}; std::shared_ptr mercedes2{}; std::shared_ptr mercedes3{}; void createCars() { this->mercedes1 = std::make_shared(); this->mercedes1->setColor("pink"); this->mercedes2 = std::make_shared(); this->mercedes2->setColor("blue"); this->mercedes3 = std::make_shared(); this->mercedes3->setColor("red"); } }; TEST_F(NarratorTest, addListener) { this->createCars(); ls_std::Narrator paintingMachine{}; ASSERT_TRUE(paintingMachine.getListeners().empty()); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes1)); ASSERT_EQ(1, paintingMachine.getListeners().size()); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes2)); ASSERT_EQ(2, paintingMachine.getListeners().size()); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes3)); ASSERT_EQ(3, paintingMachine.getListeners().size()); } TEST_F(NarratorTest, clear) { this->createCars(); ls_std::Narrator paintingMachine{}; paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes1)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes2)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes3)); ASSERT_FALSE(paintingMachine.getListeners().empty()); paintingMachine.clear(); ASSERT_TRUE(paintingMachine.getListeners().empty()); } TEST_F(NarratorTest, getListeners) { ls_std::Narrator narrator{}; ASSERT_TRUE(narrator.getListeners().empty()); } TEST_F(NarratorTest, removeListener) { this->createCars(); ls_std::Narrator paintingMachine{}; paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes1)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes2)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes3)); ASSERT_EQ(3, paintingMachine.getListeners().size()); paintingMachine.removeListener(this->mercedes2); ASSERT_EQ(2, paintingMachine.getListeners().size()); paintingMachine.removeListener(this->mercedes1); ASSERT_EQ(1, paintingMachine.getListeners().size()); paintingMachine.removeListener(this->mercedes3); ASSERT_EQ(0, paintingMachine.getListeners().size()); ASSERT_TRUE(paintingMachine.getListeners().empty()); paintingMachine.removeListener(nullptr); ASSERT_EQ(0, paintingMachine.getListeners().size()); ASSERT_TRUE(paintingMachine.getListeners().empty()); } TEST_F(NarratorTest, tell) { this->createCars(); ls_std::Narrator paintingMachine{}; paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes1)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes2)); paintingMachine.addListener(std::dynamic_pointer_cast(this->mercedes3)); ASSERT_STREQ("pink", this->mercedes1->getColor().c_str()); ASSERT_STREQ("blue", this->mercedes2->getColor().c_str()); ASSERT_STREQ("red", this->mercedes3->getColor().c_str()); ls_std::String newColor{"black"}; paintingMachine.tell(static_cast(newColor)); ASSERT_STREQ("black", this->mercedes1->getColor().c_str()); ASSERT_STREQ("black", this->mercedes2->getColor().c_str()); ASSERT_STREQ("black", this->mercedes3->getColor().c_str()); } }