pabloliva87

Ej4C++

Mar 20th, 2012
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. #include "gtest/gtest.h"
  5. #include "gmock/gmock.h"
  6.  
  7. using namespace std;
  8.  
  9. /** The interfaces of the talkers */
  10. class salute_interface          /* Abstract Class */
  11. {
  12.     public:
  13.     virtual void mucho_gusto () = 0;
  14.     virtual void bien_y_vos () = 0;
  15.     virtual void begin_chatter () = 0;
  16. };
  17.  
  18. class respond_interface         /* Abstract Class */
  19. {
  20.     public:
  21.     virtual void hola () = 0;
  22.     virtual void como_estas () = 0;
  23. };
  24.  
  25. /** The concrete talkers */
  26. class first_talker : public salute_interface
  27. {
  28.     private:
  29.     respond_interface * interlocutor;
  30.     bool has_greeted;
  31.     public:
  32.     void mucho_gusto ()
  33.     {
  34.         has_greeted = true;
  35.         cout << "Mucho gusto \n" ;
  36.         interlocutor -> como_estas();
  37.     };
  38.     void bien_y_vos ()
  39.     {
  40.         if (has_greeted)
  41.         {
  42.             cout << "Bien, y vos? \n" ;
  43.         }
  44.     };
  45.     void begin_chatter ()
  46.     {
  47.         interlocutor -> hola();
  48.     };
  49.     void set_talker (respond_interface * talker)
  50.     {
  51.         interlocutor = talker;
  52.     };
  53.     first_talker()
  54.     {
  55.         has_greeted = false;
  56.     };
  57. };
  58.  
  59. class second_talker : public respond_interface
  60. {
  61.     private:
  62.     salute_interface * interlocutor;
  63.     bool has_been_greeted;
  64.     public:
  65.     void hola ()
  66.     {
  67.         has_been_greeted = true;
  68.         cout << "Hola \n" ;
  69.         interlocutor -> mucho_gusto();
  70.     };
  71.     void como_estas ()
  72.     {
  73.         if (has_been_greeted)
  74.         {
  75.             cout << "Como estas? \n" ;
  76.             interlocutor -> bien_y_vos();
  77.         }
  78.     };
  79.     void set_talker (salute_interface * talker)
  80.     {
  81.         interlocutor = talker;
  82.     };
  83.     second_talker()
  84.     {
  85.         has_been_greeted = false;
  86.     };
  87. };
  88.  
  89. int main (int argc, char** argv)
  90. {
  91.     first_talker ft;
  92.     second_talker st;
  93.  
  94.     ft.set_talker(&st);
  95.     st.set_talker(&ft);
  96.  
  97.     ft.begin_chatter();
  98.  
  99.     /* We run the tests defined below */
  100.     ::testing::InitGoogleTest(&argc, argv);
  101.     return RUN_ALL_TESTS();
  102. }
  103.  
  104. /* Tests */
  105.  
  106. /* Classes needed to use google mock for testing */
  107. class MockSpeaker1 : public first_talker
  108. {
  109.     public:
  110.     MOCK_METHOD0(mucho_gusto, void());
  111.     MOCK_METHOD0(bien_y_vos, void());
  112.     MOCK_METHOD0(begin_chatter, void());
  113.     MOCK_METHOD1(set_talker, void(respond_interface* talker) );
  114.    
  115.     void mucho_gustoTEST ()
  116.     {
  117.         first_talker::mucho_gusto();
  118.     }
  119.     void bien_y_vosTEST()
  120.     {
  121.         first_talker::bien_y_vos();
  122.     }
  123.     void begin_chatterTEST()
  124.     {
  125.         first_talker::begin_chatter();
  126.     }
  127.     void set_talkerTEST(respond_interface* talker)
  128.     {
  129.         first_talker::set_talker(talker);
  130.     }
  131. };
  132.  
  133. class MockSpeaker2 : public second_talker
  134. {
  135.     public:
  136.     MOCK_METHOD0(hola, void());
  137.     MOCK_METHOD0(como_estas, void());
  138.     MOCK_METHOD1(set_talker, void (salute_interface* talker) );
  139.    
  140.     void holaTEST()
  141.     {
  142.         second_talker::hola();
  143.     }
  144.     void como_estasTEST()
  145.     {
  146.         second_talker::como_estas();
  147.     }
  148.     void set_talkerTEST(salute_interface* talker)
  149.     {
  150.         second_talker::set_talker(talker);
  151.     }
  152. };
  153.  
  154. /* The actual tests */
  155. TEST(SpeakerTest, first_talker)
  156. {
  157.     MockSpeaker1 ft;
  158.     second_talker st;
  159.  
  160.     ft.set_talkerTEST(&st);
  161.     st.set_talker(&ft);
  162.  
  163.     EXPECT_CALL(ft, mucho_gusto() )
  164.         .Times(1);
  165.    
  166.     ft.begin_chatterTEST();
  167.  
  168.    
  169. };
  170.  
  171. TEST(SpeakerTest, second_talker)
  172. {
  173.     first_talker ft;
  174.     MockSpeaker2 st;
  175.  
  176.     ft.set_talker(&st);
  177.     st.set_talkerTEST(&ft);
  178.  
  179.     EXPECT_CALL(st, hola() )
  180.         .Times(1);
  181.  
  182.  
  183.     ft.begin_chatter();
  184.  
  185. };
  186.  
  187.  
  188. TEST(SpeakerTest, interaction)
  189. {
  190.     MockSpeaker1 ft;
  191.     MockSpeaker2 st;
  192.  
  193.     ft.set_talkerTEST(&st);
  194.     st.set_talkerTEST(&ft);
  195.    
  196.     EXPECT_CALL(st, hola() )
  197.         .Times(1);
  198.  
  199.     ft.begin_chatterTEST();
  200. };
Add Comment
Please, Sign In to add comment