Merge lp:~smspillaz/compiz-libcompizconfig/compiz-libcompizconfig.context-mock into lp:~compiz-team/compiz-libcompizconfig/0.9.8

Proposed by Sam Spilsbury
Status: Superseded
Proposed branch: lp:~smspillaz/compiz-libcompizconfig/compiz-libcompizconfig.context-mock
Merge into: lp:~compiz-team/compiz-libcompizconfig/0.9.8
Prerequisite: lp:~smspillaz/compiz-libcompizconfig/compiz-libcompizconfig.setting-funcs-behind-interface
Diff against target: 508 lines (+469/-0)
4 files modified
tests/CMakeLists.txt (+24/-0)
tests/context-mock.cpp (+74/-0)
tests/mock-context.h (+337/-0)
tests/test-context.cpp (+34/-0)
To merge this branch: bzr merge lp:~smspillaz/compiz-libcompizconfig/compiz-libcompizconfig.context-mock
Reviewer Review Type Date Requested Status
Compiz Maintainers Pending
Review via email: mp+104000@code.launchpad.net

Description of the change

This is all about bug 990690.

!! - It probably isn't a good idea to test this branch in isolation, as it is part of a pipeline to get compiz-libcompizconfig under test. If you want to test the result of this work, you should probably look at testing

lp:~smspillaz/compiz-libcompizconfig/compiz-libcompizconfig.mock-context
lp:~smspillaz/compiz-compizconfig-python/compiz-compizconfig-python.setting-api
lp:~smspillaz/compiz-compizconfig-gconf/compiz-compizconfig-gconf.adapt-to-new-interfaces

.. that's all !!

This branch adds a mock for CCSContext, thunking the interface table in C to call a set of virtual functions on an interface class which then calls through to Google Mock. A small test demonstrating this behaviour is included.

To post a comment you must log in.

Unmerged revisions

456. By Sam Spilsbury

Added a mock for CCSContext and a small test file to demo how it works

455. By Sam Spilsbury

Use CCSObjectFinalize

454. By Sam Spilsbury

Use CCSObject for CCSSetting

453. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

452. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

451. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

450. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

449. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

448. By Sam Spilsbury

Merged refactor-setting into setting-funcs-behind-interface.

447. By Sam Spilsbury

Works with protocol buffers

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/CMakeLists.txt'
2--- tests/CMakeLists.txt 2012-04-28 18:59:46 +0000
3+++ tests/CMakeLists.txt 2012-04-28 18:59:46 +0000
4@@ -36,15 +36,29 @@
5 include_directories (${CMAKE_SOURCE_DIR}/include)
6 link_directories (${CMAKE_INSTALL_PREFIX}/lib)
7
8+add_library (context-mock
9+ ${CMAKE_CURRENT_SOURCE_DIR}/context-mock.cpp)
10+
11 add_executable (test-ccs-object
12 ${CMAKE_CURRENT_SOURCE_DIR}/test-ccs-object.cpp)
13
14+add_executable (test-context
15+ ${CMAKE_CURRENT_SOURCE_DIR}/test-context.cpp)
16+
17 if (HAVE_PROTOBUF)
18 set (LIBCOMPIZCONFIG_LIBRARIES
19 ${LIBCOMPIZCONFIG_LIBRARIES}
20 protobuf)
21 endif (HAVE_PROTOBUF)
22
23+target_link_libraries (context-mock
24+ ${GTEST_BOTH_LIBRARIES}
25+ ${GMOCK_LIBRARY}
26+ ${GMOCK_MAIN_LIBRARY}
27+ ${CMAKE_THREAD_LIBS_INIT}
28+ ${LIBCOMPIZCONFIG_LIBRARIES}
29+ compizconfig)
30+
31 target_link_libraries (test-ccs-object
32 ${GTEST_BOTH_LIBRARIES}
33 ${GMOCK_LIBRARY}
34@@ -53,4 +67,14 @@
35 ${LIBCOMPIZCONFIG_LIBRARIES}
36 compizconfig)
37
38+target_link_libraries (test-context
39+ ${GTEST_BOTH_LIBRARIES}
40+ ${GMOCK_LIBRARY}
41+ ${GMOCK_MAIN_LIBRARY}
42+ ${CMAKE_THREAD_LIBS_INIT}
43+ ${LIBCOMPIZCONFIG_LIBRARIES}
44+ compizconfig
45+ context-mock)
46+
47 gtest_add_tests (test-ccs-object "" ${CMAKE_CURRENT_SOURCE_DIR}/test-ccs-object.cpp)
48+gtest_add_tests (test-context "" ${CMAKE_CURRENT_SOURCE_DIR}/test-context.cpp)
49
50=== added file 'tests/context-mock.cpp'
51--- tests/context-mock.cpp 1970-01-01 00:00:00 +0000
52+++ tests/context-mock.cpp 2012-04-28 18:59:46 +0000
53@@ -0,0 +1,74 @@
54+#include <gtest/gtest.h>
55+#include <gmock/gmock.h>
56+
57+#include <ccs.h>
58+
59+#include "mock-context.h"
60+
61+CCSContextInterface CCSContextGMockInterface =
62+{
63+ CCSContextGMock::ccsContextGetPlugins,
64+ CCSContextGMock::ccsContextGetCategories,
65+ CCSContextGMock::ccsContextGetChangedSettings,
66+ CCSContextGMock::ccsContextGetScreenNum,
67+ CCSContextGMock::ccsContextAddChangedSetting,
68+ CCSContextGMock::ccsContextClearChangedSettings,
69+ CCSContextGMock::ccsContextStealChangedSettings,
70+ CCSContextGMock::ccsContextGetPrivatePtr,
71+ CCSContextGMock::ccsContextSetPrivatePtr,
72+ CCSContextGMock::ccsLoadPlugin,
73+ CCSContextGMock::ccsFindPlugin,
74+ CCSContextGMock::ccsPluginIsActive,
75+ CCSContextGMock::ccsGetActivePluginList,
76+ CCSContextGMock::ccsGetSortedPluginStringList,
77+ CCSContextGMock::ccsSetBackend,
78+ CCSContextGMock::ccsGetBackend,
79+ CCSContextGMock::ccsSetIntegrationEnabled,
80+ CCSContextGMock::ccsSetProfile,
81+ CCSContextGMock::ccsSetPluginListAutoSort,
82+ CCSContextGMock::ccsGetProfile,
83+ CCSContextGMock::ccsGetIntegrationEnabled,
84+ CCSContextGMock::ccsGetPluginListAutoSort,
85+ CCSContextGMock::ccsProcessEvents,
86+ CCSContextGMock::ccsReadSettings,
87+ CCSContextGMock::ccsWriteSettings,
88+ CCSContextGMock::ccsWriteChangedSettings,
89+ CCSContextGMock::ccsExportToFile,
90+ CCSContextGMock::ccsImportFromFile,
91+ CCSContextGMock::ccsCanEnablePlugin,
92+ CCSContextGMock::ccsCanDisablePlugin,
93+ CCSContextGMock::ccsGetExistingProfiles,
94+ CCSContextGMock::ccsDeleteProfile,
95+ CCSContextGMock::ccsCheckForSettingsUpgrade,
96+ CCSContextGMock::ccsLoadPlugins
97+};
98+
99+CCSContext *
100+ccsMockContextNew ()
101+{
102+ CCSContext *context = (CCSContext *) calloc (1, sizeof (CCSContext));
103+
104+ if (!context)
105+ return NULL;
106+
107+ CCSContextGMock *mock = new CCSContextGMock ();
108+ ccsObjectSetPrivate ((CCSObject *) context, (CCSPrivate *) mock);
109+ ccsObjectAddInterface ((CCSObject *) context, (CCSInterface *) &CCSContextGMockInterface, CCS_CONTEXT_INTERFACE_TYPE);
110+
111+ return context;
112+}
113+
114+void
115+ccsFreeMockContext (CCSContext *context)
116+{
117+ /* Need to delete the mock correctly */
118+
119+ CCSContextGMock *mock = (CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context);
120+
121+ delete mock;
122+
123+ ccsObjectSetPrivate ((CCSObject *) context, NULL);
124+ ccsObjectFinalize ((CCSObject *) context);
125+
126+ free (context);
127+}
128
129=== added file 'tests/mock-context.h'
130--- tests/mock-context.h 1970-01-01 00:00:00 +0000
131+++ tests/mock-context.h 2012-04-28 18:59:46 +0000
132@@ -0,0 +1,337 @@
133+#include <gtest/gtest.h>
134+#include <gmock/gmock.h>
135+
136+#include <ccs.h>
137+
138+class CCSContextGMockInterface
139+{
140+ public:
141+
142+ virtual ~CCSContextGMockInterface () {};
143+
144+ virtual CCSPluginList getPlugins () = 0;
145+ virtual CCSPluginCategory * getCategories () = 0;
146+ virtual CCSSettingList getChangedSettings () = 0;
147+ virtual unsigned int getScreenNum () = 0;
148+ virtual Bool addChangedSetting (CCSSetting *) = 0;
149+ virtual Bool clearChangedSettings () = 0;
150+ virtual CCSSettingList stealChangedSettings () = 0;
151+ virtual void * getPrivatePtr () = 0;
152+ virtual void setPrivatePtr (void *) = 0;
153+ virtual Bool loadPlugin (char *name) = 0;
154+ virtual CCSPlugin * findPlugin (const char *name) = 0;
155+ virtual Bool pluginIsActive (char *name) = 0;
156+ virtual CCSPluginList getActivePluginList () = 0;
157+ virtual CCSStringList getSortedPluginStringList () = 0;
158+ virtual char * getBackend () = 0;
159+ virtual Bool setBackend (char *name) = 0;
160+ virtual void setIntegrationEnabled (Bool value) = 0;
161+ virtual void setProfile (char *name);
162+ virtual void setPluginListAutoSort (Bool value) = 0;
163+ virtual char * getProfile () = 0;
164+ virtual Bool getIntegrationEnabled () = 0;
165+ virtual Bool getPluginListAutoSort () = 0;
166+ virtual void processEvents (unsigned int flags) = 0;
167+ virtual void readSettings () = 0;
168+ virtual void writeSettings () = 0;
169+ virtual void writeChangedSettings () = 0;
170+ virtual Bool exportToFile (const char *fileName, Bool skipDefaults) = 0;
171+ virtual Bool importFromFile (const char *fileName, Bool overwriteNonDefaults) = 0;
172+ virtual CCSPluginConflictList canEnablePlugin (CCSPlugin *) = 0;
173+ virtual CCSPluginConflictList canDisablePlugin (CCSPlugin *) = 0;
174+ virtual void deleteProfile (char *name) = 0;
175+ virtual CCSStringList getExistingProfiles () = 0;
176+ virtual Bool checkForSettingsUpgrade () = 0;
177+ virtual void loadPlugins () = 0;
178+};
179+
180+class CCSContextGMock
181+{
182+ public:
183+
184+ MOCK_METHOD0 (getPlugins, CCSPluginList ());
185+ MOCK_METHOD0 (getCategories, CCSPluginCategory * ());
186+ MOCK_METHOD0 (getChangedSettings, CCSSettingList ());
187+ MOCK_METHOD0 (getScreenNum, unsigned int ());
188+ MOCK_METHOD1 (addChangedSetting, Bool (CCSSetting *));
189+ MOCK_METHOD0 (clearChangedSettings, Bool ());
190+ MOCK_METHOD0 (stealChangedSettings, CCSSettingList ());
191+ MOCK_METHOD0 (getPrivatePtr, void * ());
192+ MOCK_METHOD1 (setPrivatePtr, void (void *));
193+ MOCK_METHOD1 (loadPlugin, Bool (char *));
194+ MOCK_METHOD1 (findPlugin, CCSPlugin * (char *));
195+ MOCK_METHOD1 (pluginIsActive, Bool (char *));
196+ MOCK_METHOD0 (getActivePluginList, CCSPluginList ());
197+ MOCK_METHOD0 (getSortedPluginStringList, CCSStringList ());
198+ MOCK_METHOD0 (getBackend, char * ());
199+ MOCK_METHOD1 (setBackend, Bool (char *));
200+ MOCK_METHOD1 (setIntegrationEnabled, void (Bool));
201+ MOCK_METHOD1 (setProfile, void (char *));
202+ MOCK_METHOD1 (setPluginListAutoSort, void (Bool));
203+ MOCK_METHOD0 (getProfile, char * ());
204+ MOCK_METHOD0 (getIntegrationEnabled, Bool ());
205+ MOCK_METHOD0 (getPluginListAutoSort, Bool ());
206+ MOCK_METHOD1 (processEvents, void (unsigned int));
207+ MOCK_METHOD0 (readSettings, void ());
208+ MOCK_METHOD0 (writeSettings, void ());
209+ MOCK_METHOD0 (writeChangedSettings, void ());
210+ MOCK_METHOD2 (exportToFile, Bool (const char *, Bool));
211+ MOCK_METHOD2 (importFromFile, Bool (const char *, Bool));
212+ MOCK_METHOD1 (canEnablePlugin, CCSPluginConflictList (CCSPlugin *));
213+ MOCK_METHOD1 (canDisablePlugin, CCSPluginConflictList (CCSPlugin *));
214+ MOCK_METHOD1 (deleteProfile, void (char *));
215+ MOCK_METHOD0 (getExistingProfiles, CCSStringList ());
216+ MOCK_METHOD0 (checkForSettingsUpgrade, Bool ());
217+ MOCK_METHOD0 (loadPlugins, void ());
218+
219+ public:
220+
221+ /* Thunking from C interface callbacks to the virtual functions ... */
222+ static CCSPluginList
223+ ccsContextGetPlugins (CCSContext *context)
224+ {
225+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getPlugins ();
226+ }
227+
228+ static CCSPluginCategory *
229+ ccsContextGetCategories (CCSContext *context)
230+ {
231+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getCategories ();
232+ }
233+
234+ static CCSSettingList
235+ ccsContextGetChangedSettings (CCSContext *context)
236+ {
237+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getChangedSettings ();
238+ }
239+
240+ static unsigned int
241+ ccsContextGetScreenNum (CCSContext *context)
242+ {
243+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getScreenNum ();
244+ }
245+
246+ static Bool
247+ ccsContextAddChangedSetting (CCSContext *context, CCSSetting *setting)
248+ {
249+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->addChangedSetting (setting);
250+ }
251+
252+ static Bool
253+ ccsContextClearChangedSettings (CCSContext *context)
254+ {
255+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->clearChangedSettings ();
256+ }
257+
258+ static CCSSettingList
259+ ccsContextStealChangedSettings (CCSContext *context)
260+ {
261+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->stealChangedSettings ();
262+ }
263+
264+ static void *
265+ ccsContextGetPrivatePtr (CCSContext *context)
266+ {
267+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getPrivatePtr ();
268+ }
269+
270+ static void
271+ ccsContextSetPrivatePtr (CCSContext *context, void *ptr)
272+ {
273+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->setPrivatePtr (ptr);
274+ }
275+
276+ static CCSPlugin *
277+ ccsFindPlugin (CCSContext *context, const char *name)
278+ {
279+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->findPlugin ((char *) name);
280+ }
281+
282+ static Bool
283+ ccsPluginIsActive (CCSContext *context, char *name)
284+ {
285+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->pluginIsActive (name);
286+ }
287+
288+ static Bool
289+ ccsSetBackend (CCSContext *context, char *name)
290+ {
291+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->setBackend (name);
292+ }
293+
294+ static CCSPluginList
295+ ccsGetActivePluginList (CCSContext *context)
296+ {
297+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getActivePluginList ();
298+ }
299+
300+ static CCSStringList
301+ ccsGetSortedPluginStringList (CCSContext *context)
302+ {
303+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getSortedPluginStringList ();
304+ }
305+
306+ static char *
307+ ccsGetBackend (CCSContext *context)
308+ {
309+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getBackend ();
310+ }
311+
312+ static Bool
313+ ccsGetIntegrationEnabled (CCSContext *context)
314+ {
315+ if (!context)
316+ return FALSE;
317+
318+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getIntegrationEnabled ();
319+ }
320+
321+ static char *
322+ ccsGetProfile (CCSContext *context)
323+ {
324+ if (!context)
325+ return NULL;
326+
327+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getProfile ();
328+ }
329+
330+ static Bool
331+ ccsGetPluginListAutoSort (CCSContext *context)
332+ {
333+ if (!context)
334+ return FALSE;
335+
336+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getPluginListAutoSort ();
337+ }
338+
339+ static void
340+ ccsSetIntegrationEnabled (CCSContext *context, Bool value)
341+ {
342+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->setIntegrationEnabled (value);
343+ }
344+
345+ static void
346+ ccsSetPluginListAutoSort (CCSContext *context, Bool value)
347+ {
348+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->setPluginListAutoSort (value);
349+ }
350+
351+ static void
352+ ccsSetProfile (CCSContext *context, char *name)
353+ {
354+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->setProfile (name);
355+ }
356+
357+ static void
358+ ccsProcessEvents (CCSContext *context, unsigned int flags)
359+ {
360+ if (!context)
361+ return;
362+
363+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->processEvents (flags);
364+ }
365+
366+ static void
367+ ccsReadSettings (CCSContext *context)
368+ {
369+ if (!context)
370+ return;
371+
372+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->readSettings ();
373+ }
374+
375+ static void
376+ ccsWriteSettings (CCSContext *context)
377+ {
378+ if (!context)
379+ return;
380+
381+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->writeSettings ();
382+ }
383+
384+ static void
385+ ccsWriteChangedSettings (CCSContext *context)
386+ {
387+ if (!context)
388+ return;
389+
390+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->writeChangedSettings ();
391+ }
392+
393+ static CCSPluginConflictList
394+ ccsCanEnablePlugin (CCSContext *context, CCSPlugin *plugin)
395+ {
396+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->canEnablePlugin (plugin);
397+ }
398+
399+ static CCSPluginConflictList
400+ ccsCanDisablePlugin (CCSContext *context, CCSPlugin *plugin)
401+ {
402+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->canDisablePlugin (plugin);
403+ }
404+
405+ static CCSStringList
406+ ccsGetExistingProfiles (CCSContext *context)
407+ {
408+ if (!context)
409+ return NULL;
410+
411+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->getExistingProfiles ();
412+ }
413+
414+ static void
415+ ccsDeleteProfile (CCSContext *context, char *name)
416+ {
417+ if (!context)
418+ return;
419+
420+ ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->deleteProfile (name);
421+ }
422+
423+ static Bool
424+ ccsCheckForSettingsUpgrade (CCSContext *context)
425+ {
426+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->checkForSettingsUpgrade ();
427+ }
428+
429+ static Bool
430+ ccsImportFromFile (CCSContext *context, const char *fileName, Bool overwriteNonDefault)
431+ {
432+ if (!context)
433+ return FALSE;
434+
435+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->importFromFile (fileName, overwriteNonDefault);
436+ }
437+
438+ static Bool
439+ ccsLoadPlugin (CCSContext *context, char *name)
440+ {
441+ if (!context)
442+ return FALSE;
443+
444+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->loadPlugin (name);
445+ }
446+
447+ static Bool
448+ ccsExportToFile (CCSContext *context, const char *fileName, Bool skipDefaults)
449+ {
450+ if (!context)
451+ return FALSE;
452+
453+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->exportToFile (fileName, skipDefaults);
454+ }
455+
456+ static void
457+ ccsLoadPlugins (CCSContext *context)
458+ {
459+ if (!context)
460+ return;
461+
462+ return ((CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context))->loadPlugins ();
463+ }
464+};
465+
466+extern CCSContextInterface CCSContextGMockInterface;
467+
468+CCSContext * ccsMockContextNew ();
469+void ccsFreeMockContext (CCSContext *);
470
471=== added file 'tests/test-context.cpp'
472--- tests/test-context.cpp 1970-01-01 00:00:00 +0000
473+++ tests/test-context.cpp 2012-04-28 18:59:46 +0000
474@@ -0,0 +1,34 @@
475+#include <gtest/gtest.h>
476+#include <gmock/gmock.h>
477+
478+#include <ccs.h>
479+
480+#include "mock-context.h"
481+
482+using ::testing::_;
483+using ::testing::Return;
484+
485+class CCSContextTest :
486+ public ::testing::Test
487+{
488+};
489+
490+TEST(CCSContextTest, TestMock)
491+{
492+ CCSContext *context = ccsMockContextNew ();
493+ CCSContextGMock *mock = (CCSContextGMock *) ccsObjectGetPrivate ((CCSObject *) context);
494+
495+ EXPECT_CALL (*mock, getPlugins ());
496+ EXPECT_CALL (*mock, getCategories ());
497+ EXPECT_CALL (*mock, getChangedSettings ());
498+ EXPECT_CALL (*mock, getScreenNum ());
499+ EXPECT_CALL (*mock, addChangedSetting (_));
500+
501+ ccsContextGetPlugins (context);
502+ ccsContextGetCategories (context);
503+ ccsContextGetChangedSettings (context);
504+ ccsContextGetScreenNum (context);
505+ ccsContextAddChangedSetting (context, NULL);
506+
507+ ccsFreeMockContext (context);
508+}

Subscribers

People subscribed via source and target branches