Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include "gtest/gtest.h"
- #include "gmock/gmock.h"
- using namespace std;
- /** The interfaces of the talkers */
- class salute_interface /* Abstract Class */
- {
- public:
- virtual void mucho_gusto () = 0;
- virtual void bien_y_vos () = 0;
- virtual void begin_chatter () = 0;
- };
- class respond_interface /* Abstract Class */
- {
- public:
- virtual void hola () = 0;
- virtual void como_estas () = 0;
- };
- /** The concrete talkers */
- class first_talker : public salute_interface
- {
- private:
- respond_interface * interlocutor;
- bool has_greeted;
- public:
- void mucho_gusto ()
- {
- has_greeted = true;
- cout << "Mucho gusto \n" ;
- interlocutor -> como_estas();
- };
- void bien_y_vos ()
- {
- if (has_greeted)
- {
- cout << "Bien, y vos? \n" ;
- }
- };
- void begin_chatter ()
- {
- interlocutor -> hola();
- };
- void set_talker (respond_interface * talker)
- {
- interlocutor = talker;
- };
- first_talker()
- {
- has_greeted = false;
- };
- };
- class second_talker : public respond_interface
- {
- private:
- salute_interface * interlocutor;
- bool has_been_greeted;
- public:
- void hola ()
- {
- has_been_greeted = true;
- cout << "Hola \n" ;
- interlocutor -> mucho_gusto();
- };
- void como_estas ()
- {
- if (has_been_greeted)
- {
- cout << "Como estas? \n" ;
- interlocutor -> bien_y_vos();
- }
- };
- void set_talker (salute_interface * talker)
- {
- interlocutor = talker;
- };
- second_talker()
- {
- has_been_greeted = false;
- };
- };
- int main (int argc, char** argv)
- {
- first_talker ft;
- second_talker st;
- ft.set_talker(&st);
- st.set_talker(&ft);
- ft.begin_chatter();
- /* We run the tests defined below */
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
- }
- /* Tests */
- /* Classes needed to use google mock for testing */
- class MockSpeaker1 : public first_talker
- {
- public:
- MOCK_METHOD0(mucho_gusto, void());
- MOCK_METHOD0(bien_y_vos, void());
- MOCK_METHOD0(begin_chatter, void());
- MOCK_METHOD1(set_talker, void(respond_interface* talker) );
- void mucho_gustoTEST ()
- {
- first_talker::mucho_gusto();
- }
- void bien_y_vosTEST()
- {
- first_talker::bien_y_vos();
- }
- void begin_chatterTEST()
- {
- first_talker::begin_chatter();
- }
- void set_talkerTEST(respond_interface* talker)
- {
- first_talker::set_talker(talker);
- }
- };
- class MockSpeaker2 : public second_talker
- {
- public:
- MOCK_METHOD0(hola, void());
- MOCK_METHOD0(como_estas, void());
- MOCK_METHOD1(set_talker, void (salute_interface* talker) );
- void holaTEST()
- {
- second_talker::hola();
- }
- void como_estasTEST()
- {
- second_talker::como_estas();
- }
- void set_talkerTEST(salute_interface* talker)
- {
- second_talker::set_talker(talker);
- }
- };
- /* The actual tests */
- TEST(SpeakerTest, first_talker)
- {
- MockSpeaker1 ft;
- second_talker st;
- ft.set_talkerTEST(&st);
- st.set_talker(&ft);
- EXPECT_CALL(ft, mucho_gusto() )
- .Times(1);
- ft.begin_chatterTEST();
- };
- TEST(SpeakerTest, second_talker)
- {
- first_talker ft;
- MockSpeaker2 st;
- ft.set_talker(&st);
- st.set_talkerTEST(&ft);
- EXPECT_CALL(st, hola() )
- .Times(1);
- ft.begin_chatter();
- };
- TEST(SpeakerTest, interaction)
- {
- MockSpeaker1 ft;
- MockSpeaker2 st;
- ft.set_talkerTEST(&st);
- st.set_talkerTEST(&ft);
- EXPECT_CALL(st, hola() )
- .Times(1);
- ft.begin_chatterTEST();
- };
Add Comment
Please, Sign In to add comment