View difference between Paste ID: RLeBDeQD and PuQ9bB1Z
SHOW: | | - or go back to the newest paste.
1
#include <cstdlib>
2
#include <iostream>
3
4
#include "gtest/gtest.h"
5
#include "gmock/gmock.h"
6
7
using namespace std;
8-
class salute_interface {		/* Abstract Class */
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-
class respond_interface {		/* Abstract Class */
15+
16
};
17
18
class respond_interface			/* Abstract Class */
19
{
20
	public:
21
	virtual void hola () = 0;
22-
class first_talker : public salute_interface {
22+
23
};
24
25
/** The concrete talkers */
26
class first_talker : public salute_interface 
27-
	void mucho_gusto () {
27+
{
28
	private:
29
	respond_interface * interlocutor;
30-
		interlocutor -> como_estas ();
30+
31
	public:
32-
	void bien_y_vos () {
32+
	void mucho_gusto () 
33-
		if (has_greeted){
33+
	{
34
		has_greeted = true;
35
		cout << "Mucho gusto \n" ;
36
		interlocutor -> como_estas();
37-
	void begin_chatter () {
37+
38-
		interlocutor -> hola ();
38+
	void bien_y_vos () 
39
	{
40-
	void initialize (respond_interface * talker) {
40+
		if (has_greeted)
41
		{
42
			cout << "Bien, y vos? \n" ;
43
		}
44
	};
45
	void begin_chatter () 
46-
class second_talker : public respond_interface {
46+
	{
47
		interlocutor -> hola();
48
	};
49
	void set_talker (respond_interface * talker) 
50
	{
51-
	void hola () {
51+
52
	};
53
	first_talker()
54-
		interlocutor -> mucho_gusto ();
54+
	{
55
		has_greeted = false;
56-
	void como_estas () {
56+
57-
		if (has_been_greeted) {
57+
58
59-
			interlocutor -> bien_y_vos ();
59+
class second_talker : public respond_interface 
60
{
61
	private:
62-
	void initialize (salute_interface * talker) {
62+
63
	bool has_been_greeted;
64
	public:
65
	void hola () 
66
	{
67
		has_been_greeted = true;
68-
int main (void) {
68+
69
		interlocutor -> mucho_gusto();
70-
	first_talker * ft;
70+
71-
	second_talker * st;
71+
	void como_estas () 
72
	{
73-
	ft = new (first_talker);
73+
		if (has_been_greeted) 
74-
	st = new (second_talker);
74+
		{
75
			cout << "Como estas? \n" ;
76-
	ft -> initialize (st);
76+
			interlocutor -> bien_y_vos();
77-
	st -> initialize (ft);
77+
78
	};
79-
	ft -> begin_chatter ();
79+
	void set_talker (salute_interface * talker) 
80
	{
81-
	delete (ft);
81+
82-
	delete (st);
82+
83
	second_talker()
84-
	return 0;
84+
	{
85
		has_been_greeted = false;
86-
}
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
};