Merge lp:~compiz-team/compiz/compiz.gsettings_conformance_test into lp:compiz/0.9.8

Proposed by Sam Spilsbury
Status: Superseded
Proposed branch: lp:~compiz-team/compiz/compiz.gsettings_conformance_test
Merge into: lp:compiz/0.9.8
Prerequisite: lp:~compiz-team/compiz/compiz.split_gsettings_rw_funcs
Diff against target: 885 lines (+607/-69)
10 files modified
compizconfig/compizconfig-python/tests/compiz_config_test.py (+4/-1)
compizconfig/gsettings/gsettings_backend_shared/gsettings_util.c (+24/-9)
compizconfig/gsettings/gsettings_backend_shared/gsettings_util.h (+2/-3)
compizconfig/gsettings/src/gsettings.c (+3/-0)
compizconfig/gsettings/tests/CMakeLists.txt (+19/-3)
compizconfig/gsettings/tests/backend-conformance-config.h.in (+1/-0)
compizconfig/gsettings/tests/org.compiz.mock.gschema.xml (+0/-53)
compizconfig/gsettings/tests/test_gsettings_conformance.cpp (+548/-0)
compizconfig/libcompizconfig/config/CMakeLists.txt (+3/-0)
compizconfig/libcompizconfig/config/config_test (+3/-0)
To merge this branch: bzr merge lp:~compiz-team/compiz/compiz.gsettings_conformance_test
Reviewer Review Type Date Requested Status
Compiz Maintainers Pending
Review via email: mp+118460@code.launchpad.net

This proposal supersedes a proposal from 2012-07-21.

This proposal has been superseded by a proposal from 2012-08-07.

Description of the change

Instantiate the GSettings backend in a test harness and run the conformance tests on it.

This is not actually needing review, I've just got it marked as Needs Review so that the CI bot will run tests on it.

To post a comment you must log in.
Revision history for this message
Sam Spilsbury (smspillaz) wrote : Posted in a previous version of this proposal

CI doesn't seem to care ... WIP ...

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'compizconfig/compizconfig-python/tests/compiz_config_test.py'
2--- compizconfig/compizconfig-python/tests/compiz_config_test.py 2012-07-07 05:53:00 +0000
3+++ compizconfig/compizconfig-python/tests/compiz_config_test.py 2012-08-07 01:05:25 +0000
4@@ -5,10 +5,13 @@
5 arch = subprocess.Popen (["uname", "-p"], stdout=subprocess.PIPE).communicate ()[0][:-1]
6
7 os.environ["COMPIZ_METADATA_PATH"] = "generated/"
8+os.environ["COMPIZ_CONFIG_PROFILE"] = ""
9+os.environ["XDG_CONFIG_HOME"] = "compizconfig/libcompizconfig/config"
10 os.environ["LIBCOMPIZCONFIG_BACKEND_PATH"] = "compizconfig/libcompizconfig/backend/"
11 os.environ["XDG_DATA_DIRS"] = "generated/"
12
13-sys.path.append ("compizconfig/compizconfig-python/build/lib.linux-" + arch + "-" + str (sys.version_info[0]) + "." + str (sys.version_info[1]) + "/")
14+# TODO: does this really work ?
15+sys.path[0] = "compizconfig/compizconfig-python/build/lib.linux-" + arch + "-" + str (sys.version_info[0]) + "." + str (sys.version_info[1]) + "/"
16
17 import unittest
18 import compizconfig
19
20=== modified file 'compizconfig/gsettings/gsettings_backend_shared/gsettings_util.c'
21--- compizconfig/gsettings/gsettings_backend_shared/gsettings_util.c 2012-08-07 01:05:24 +0000
22+++ compizconfig/gsettings/gsettings_backend_shared/gsettings_util.c 2012-08-07 01:05:25 +0000
23@@ -944,13 +944,21 @@
24 const char *item;
25 } FindItemInVariantData;
26
27+typedef struct _InsertIfNotEqualData
28+{
29+ gboolean skipped;
30+ const char *item;
31+} InsertIfNotEqualData;
32+
33 static void
34 insertIfNotEqual (GVariantBuilder *builder, const char *item, void *userData)
35 {
36- const char *cmp = (const char *) userData;
37+ InsertIfNotEqualData *data = (InsertIfNotEqualData *) userData;
38
39- if (g_strcmp0 (item, cmp))
40+ if (g_strcmp0 (item, data->item))
41 g_variant_builder_add (builder, "s", item);
42+ else
43+ data->skipped = TRUE;
44 }
45
46 static void
47@@ -1003,18 +1011,25 @@
48 return !findItemData.found;
49 }
50
51-void
52-removeItemFromVariant (GVariant **variant,
53- const char *string)
54+gboolean removeItemFromVariant (GVariant **variant,
55+ const char *string)
56 {
57 GVariantBuilder newVariantBuilder;
58
59+ InsertIfNotEqualData data =
60+ {
61+ FALSE,
62+ string
63+ };
64+
65 g_variant_builder_init (&newVariantBuilder, G_VARIANT_TYPE ("as"));
66
67- rebuildVariant (&newVariantBuilder, *variant, insertIfNotEqual, (void *) string);
68+ rebuildVariant (&newVariantBuilder, *variant, insertIfNotEqual, (void *) &data);
69
70 g_variant_unref (*variant);
71 *variant = g_variant_builder_end (&newVariantBuilder);
72+
73+ return data.skipped;
74 }
75
76 void
77@@ -1109,6 +1124,7 @@
78 GVariant *plugins;
79 GVariant *profiles;
80 const char *currentProfile = ccsGSettingsBackendGetCurrentProfile (backend);
81+ gboolean ret = FALSE;
82
83 plugins = ccsGSettingsBackendGetPluginsWithSetKeys (backend);
84 profiles = ccsGSettingsBackendGetExistingProfiles (backend);
85@@ -1116,18 +1132,17 @@
86 ccsGSettingsBackendUnsetAllChangedPluginKeysInProfile (backend, context, plugins, currentProfile);
87 ccsGSettingsBackendClearPluginsWithSetKeys (backend);
88
89- removeItemFromVariant (&profiles, profile);
90+ ret = removeItemFromVariant (&profiles, profile);
91
92 /* Remove the profile from existing-profiles */
93 ccsGSettingsBackendSetExistingProfiles (backend, profiles);
94-
95 ccsGSettingsBackendUpdateProfile (backend, context);
96
97 /* Since we do not call g_settings_set_value on
98 * plugins, we must also unref the variant */
99 g_variant_unref (plugins);
100
101- return TRUE;
102+ return ret;
103 }
104
105 void
106
107=== modified file 'compizconfig/gsettings/gsettings_backend_shared/gsettings_util.h'
108--- compizconfig/gsettings/gsettings_backend_shared/gsettings_util.h 2012-08-07 01:05:24 +0000
109+++ compizconfig/gsettings/gsettings_backend_shared/gsettings_util.h 2012-08-07 01:05:25 +0000
110@@ -203,9 +203,8 @@
111 appendStringToVariantIfUnique (GVariant **variant,
112 const char *string);
113
114-void
115-removeItemFromVariant (GVariant **variant,
116- const char *string);
117+gboolean removeItemFromVariant (GVariant **variant,
118+ const char *string);
119
120 CCSSettingValueList
121 readBoolListValue (GVariantIter *iter, guint nItems, CCSSetting *setting, CCSObjectAllocationInterface *allocator);
122
123=== modified file 'compizconfig/gsettings/src/gsettings.c'
124--- compizconfig/gsettings/src/gsettings.c 2012-08-07 01:05:24 +0000
125+++ compizconfig/gsettings/src/gsettings.c 2012-08-07 01:05:25 +0000
126@@ -776,6 +776,9 @@
127
128 CCSGSettingsBackendPrivate *priv = (CCSGSettingsBackendPrivate *) ccsObjectGetPrivate (backend);
129
130+ /* Update the current profile in case it was changed compizconfig side */
131+ ccsGSettingsBackendUpdateProfile (backend, context);
132+
133 value = ccsGSettingsWrapperGetValue (priv->compizconfigSettings, "existing-profiles");
134 g_variant_iter_init (&iter, value);
135 while (g_variant_iter_loop (&iter, "s", &profile))
136
137=== modified file 'compizconfig/gsettings/tests/CMakeLists.txt'
138--- compizconfig/gsettings/tests/CMakeLists.txt 2012-08-07 01:05:24 +0000
139+++ compizconfig/gsettings/tests/CMakeLists.txt 2012-08-07 01:05:25 +0000
140@@ -10,6 +10,8 @@
141
142 pkg_check_modules (COMPIZCONFIG_TEST_GSETTINGS libcompizconfig)
143
144+link_directories (${CMAKE_CURRENT_BINARY_DIR}/../../libcompizconfig/tests)
145+
146 add_library (compizconfig_ccs_gsettings_wrapper_mock STATIC
147 ${CMAKE_CURRENT_SOURCE_DIR}/ccs_gsettings_wrapper_mock.cpp
148 ${CMAKE_CURRENT_SOURCE_DIR}/ccs_gsettings_wrapper_mock.h)
149@@ -24,7 +26,8 @@
150 ${CMAKE_CURRENT_SOURCE_DIR}/test_gsettings.cpp
151 ${CMAKE_CURRENT_SOURCE_DIR}/test_gsettings_tests.h)
152
153-link_directories (${CMAKE_CURRENT_BINARY_DIR}/../../libcompizconfig/tests)
154+add_executable (compizconfig_test_gsettings_conformance
155+ ${CMAKE_CURRENT_SOURCE_DIR}/test_gsettings_conformance.cpp)
156
157 target_link_libraries (compizconfig_test_gsettings
158 gsettings_backend_shared
159@@ -37,6 +40,9 @@
160 ${GTEST_BOTH_LIBRARIES}
161 ${GMOCK_MAIN_LIBRARY})
162
163+configure_file (${CMAKE_CURRENT_SOURCE_DIR}/gsettings-mock-schemas-config.h.in
164+ ${CMAKE_CURRENT_BINARY_DIR}/gsettings-mock-schemas-config.h)
165+
166 add_custom_command (OUTPUT ${CMAKE_BINARY_DIR}/generated/glib-2.0/schemas/org.compiz.mock.gschema.xml
167 COMMAND cp -r ${CMAKE_CURRENT_SOURCE_DIR}/org.compiz.mock.gschema.xml ${CMAKE_BINARY_DIR}/generated/glib-2.0/schemas/org.compiz.mock.gschema.xml
168 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/org.compiz.mock.gschema.xml
169@@ -47,7 +53,17 @@
170
171 add_gsettings_schema_to_recompilation_list (compiz_gsettings_mock_schema)
172
173-configure_file (${CMAKE_CURRENT_SOURCE_DIR}/gsettings-mock-schemas-config.h.in
174- ${CMAKE_CURRENT_BINARY_DIR}/gsettings-mock-schemas-config.h)
175+configure_file (${CMAKE_CURRENT_SOURCE_DIR}/backend-conformance-config.h.in
176+ ${CMAKE_CURRENT_BINARY_DIR}/backend-conformance-config.h)
177+
178+target_link_libraries (compizconfig_test_gsettings_conformance
179+ gsettings_backend_shared
180+ compizconfig_ccs_setting_mock
181+ compizconfig_ccs_plugin_mock
182+ compizconfig_ccs_context_mock
183+ ${COMPIZCONFIG_TEST_GSETTINGS_LIBRARIES}
184+ ${GTEST_BOTH_LIBRARIES}
185+ ${GMOCK_MAIN_LIBRARY})
186
187 compiz_discover_tests (compizconfig_test_gsettings COVERAGE gsettings_backend_shared)
188+compiz_discover_tests (compizconfig_test_gsettings_conformance COVERAGE gsettings_backend_shared gsettings)
189
190=== added file 'compizconfig/gsettings/tests/backend-conformance-config.h.in'
191--- compizconfig/gsettings/tests/backend-conformance-config.h.in 1970-01-01 00:00:00 +0000
192+++ compizconfig/gsettings/tests/backend-conformance-config.h.in 2012-08-07 01:05:25 +0000
193@@ -0,0 +1,1 @@
194+#define BACKEND_BINARY_PATH "@CMAKE_BINARY_DIR@/compizconfig/gsettings"
195
196=== added file 'compizconfig/gsettings/tests/org.compiz.mock.gschema.xml'
197--- compizconfig/gsettings/tests/org.compiz.mock.gschema.xml 1970-01-01 00:00:00 +0000
198+++ compizconfig/gsettings/tests/org.compiz.mock.gschema.xml 2012-08-07 01:05:25 +0000
199@@ -0,0 +1,53 @@
200+<?xml version="1.0"?>
201+<schemalist>
202+ <schema id="org.compiz.mock" gettext-domain="compiz">
203+ <key type="i" name="integer-setting">
204+ <default>0</default>
205+ </key>
206+ <key type="b" name="boolean-setting">
207+ <default>false</default>
208+ </key>
209+ <key type="d" name="float-setting">
210+ <default>0.0</default>
211+ </key>
212+ <key type="s" name="string-setting">
213+ <default>""</default>
214+ </key>
215+ <key type="s" name="match-setting">
216+ <default>""</default>
217+ </key>
218+ <key type="b" name="bell-setting">
219+ <default>false</default>
220+ </key>
221+ <key type="s" name="color-setting">
222+ <default>""</default>
223+ </key>
224+ <key type="s" name="key-setting">
225+ <default>""</default>
226+ </key>
227+ <key type="s" name="button-setting">
228+ <default>""</default>
229+ </key>
230+ <key type="s" name="edge-setting">
231+ <default>""</default>
232+ </key>
233+ <key type="ai" name="int-list-setting">
234+ <default>[0]</default>
235+ </key>
236+ <key type="ad" name="float-list-setting">
237+ <default>[0.0]</default>
238+ </key>
239+ <key type="ab" name="bool-list-setting">
240+ <default>[true]</default>
241+ </key>
242+ <key type="as" name="string-list-setting">
243+ <default>[""]</default>
244+ </key>
245+ <key type="as" name="match-list-setting">
246+ <default>[""]</default>
247+ </key>
248+ <key type="as" name="color-list-setting">
249+ <default>[""]</default>
250+ </key>
251+ </schema>
252+</schemalist>
253
254=== removed file 'compizconfig/gsettings/tests/org.compiz.mock.gschema.xml'
255--- compizconfig/gsettings/tests/org.compiz.mock.gschema.xml 2012-08-07 01:05:24 +0000
256+++ compizconfig/gsettings/tests/org.compiz.mock.gschema.xml 1970-01-01 00:00:00 +0000
257@@ -1,53 +0,0 @@
258-<?xml version="1.0"?>
259-<schemalist>
260- <schema id="org.compiz.mock" gettext-domain="compiz">
261- <key type="i" name="integer-setting">
262- <default>0</default>
263- </key>
264- <key type="b" name="boolean-setting">
265- <default>false</default>
266- </key>
267- <key type="d" name="float-setting">
268- <default>0.0</default>
269- </key>
270- <key type="s" name="string-setting">
271- <default>""</default>
272- </key>
273- <key type="s" name="match-setting">
274- <default>""</default>
275- </key>
276- <key type="b" name="bell-setting">
277- <default>false</default>
278- </key>
279- <key type="s" name="color-setting">
280- <default>""</default>
281- </key>
282- <key type="s" name="key-setting">
283- <default>""</default>
284- </key>
285- <key type="s" name="button-setting">
286- <default>""</default>
287- </key>
288- <key type="s" name="edge-setting">
289- <default>""</default>
290- </key>
291- <key type="ai" name="int-list-setting">
292- <default>[0]</default>
293- </key>
294- <key type="ad" name="float-list-setting">
295- <default>[0.0]</default>
296- </key>
297- <key type="ab" name="bool-list-setting">
298- <default>[true]</default>
299- </key>
300- <key type="as" name="string-list-setting">
301- <default>[""]</default>
302- </key>
303- <key type="as" name="match-list-setting">
304- <default>[""]</default>
305- </key>
306- <key type="as" name="color-list-setting">
307- <default>[""]</default>
308- </key>
309- </schema>
310-</schemalist>
311
312=== added file 'compizconfig/gsettings/tests/test_gsettings_conformance.cpp'
313--- compizconfig/gsettings/tests/test_gsettings_conformance.cpp 1970-01-01 00:00:00 +0000
314+++ compizconfig/gsettings/tests/test_gsettings_conformance.cpp 2012-08-07 01:05:25 +0000
315@@ -0,0 +1,548 @@
316+#include <gtest/gtest.h>
317+#include <gmock/gmock.h>
318+
319+#include <gsettings_util.h>
320+
321+#include <gio/gio.h>
322+
323+#include "backend-conformance-config.h"
324+#include "gsettings-mock-schemas-config.h"
325+
326+#include <ccs.h>
327+#include <compizconfig_backend_concept_test.h>
328+
329+#include <iostream>
330+
331+using ::testing::AtLeast;
332+using ::testing::Pointee;
333+using ::testing::ReturnNull;
334+
335+namespace
336+{
337+ template <typename T>
338+ class AutoDestroyHelper
339+ {
340+ public:
341+
342+ typedef void (*SimpleDestructor) (T *);
343+ typedef boost::shared_ptr <T> TPtr;
344+
345+ AutoDestroyHelper (T *t,
346+ SimpleDestructor d) :
347+ mShared (t, boost::bind (d, _1))
348+ {
349+ }
350+
351+ operator const TPtr & ()
352+ {
353+ return mShared;
354+ }
355+
356+ private:
357+
358+ TPtr mShared;
359+ };
360+}
361+
362+class CCSGSettingsBackendEnv :
363+ public CCSBackendConceptTestEnvironmentInterface
364+{
365+ public:
366+
367+ typedef boost::shared_ptr <GVariant> GVariantShared;
368+
369+ CCSGSettingsBackendEnv () :
370+ pluginToMatch ("mock")
371+ {
372+ g_type_init ();
373+ }
374+
375+ /* A wrapper to prevent signals from being added */
376+ static void connectToSignalWrapper (CCSBackend *backend, CCSGSettingsWrapper *wrapper)
377+ {
378+ };
379+
380+ static void registerGConfClientWrapper (CCSBackend *backend)
381+ {
382+ }
383+
384+ static void unregisterGConfClientWrapper (CCSBackend *backend)
385+ {
386+ }
387+
388+ const CCSBackendInfo * GetInfo ()
389+ {
390+ return &gsettingsBackendInfo;
391+ }
392+
393+ CCSBackend * SetUp (CCSContext *context, CCSContextGMock *gmockContext)
394+ {
395+ CCSGSettingsBackendInterface *overloadedInterface = NULL;
396+
397+ g_setenv ("GSETTINGS_SCHEMA_DIR", MOCK_PATH.c_str (), true);
398+ g_setenv ("GSETTINGS_BACKEND", "memory", true);
399+ g_setenv ("LIBCOMPIZCONFIG_BACKEND_PATH", BACKEND_BINARY_PATH, true);
400+
401+ mContext = context;
402+
403+ std::string path ("gsettings");
404+
405+ mBackend = reinterpret_cast <CCSDynamicBackend *> (ccsOpenBackend (&ccsDefaultInterfaceTable, mContext, path.c_str ()));
406+
407+ EXPECT_TRUE (mBackend);
408+
409+ mGSettingsBackend = ccsDynamicBackendGetRawBackend (mBackend);
410+
411+ CCSBackendInitFunc backendInit = (GET_INTERFACE (CCSBackendInterface, mBackend))->backendInit;
412+
413+ if (backendInit)
414+ (*backendInit) ((CCSBackend *) mBackend, mContext);
415+
416+ overloadedInterface = GET_INTERFACE (CCSGSettingsBackendInterface, mGSettingsBackend);
417+ overloadedInterface->gsettingsBackendConnectToChangedSignal = CCSGSettingsBackendEnv::connectToSignalWrapper;
418+ overloadedInterface->gsettingsBackendRegisterGConfClient = CCSGSettingsBackendEnv::registerGConfClientWrapper;
419+ overloadedInterface->gsettingsBackendUnregisterGConfClient = CCSGSettingsBackendEnv::unregisterGConfClientWrapper;
420+
421+ mSettings = ccsGSettingsGetSettingsObjectForPluginWithPath (mGSettingsBackend, "mock",
422+ CharacterWrapper (makeCompizPluginPath (profileName.c_str (), "mock")),
423+ mContext);
424+
425+ ON_CALL (*gmockContext, getProfile ()).WillByDefault (Return (profileName.c_str ()));
426+
427+ return (CCSBackend *) mBackend;
428+ }
429+
430+ void TearDown (CCSBackend *)
431+ {
432+ g_unsetenv ("GSETTINGS_SCHEMA_DIR");
433+ g_unsetenv ("GSETTINGS_BACKEND");
434+ g_unsetenv ("LIBCOMPIZCONFIG_BACKEND_PATH");
435+
436+ GVariantBuilder noProfilesBuilder;
437+ g_variant_builder_init (&noProfilesBuilder, G_VARIANT_TYPE ("as"));
438+ g_variant_builder_add (&noProfilesBuilder, "s", "Default");
439+ GVariant *noProfiles = g_variant_builder_end (&noProfilesBuilder);
440+
441+ GVariantBuilder pluginKeysBuilder;
442+ g_variant_builder_init (&pluginKeysBuilder, G_VARIANT_TYPE ("as"));
443+ g_variant_builder_add (&pluginKeysBuilder, "s", "mock");
444+ GVariant *pluginKeys = g_variant_builder_end (&pluginKeysBuilder);
445+
446+ ccsGSettingsBackendUnsetAllChangedPluginKeysInProfile (mGSettingsBackend,
447+ mContext,
448+ pluginKeys,
449+ ccsGSettingsBackendGetCurrentProfile (
450+ mGSettingsBackend));
451+ ccsGSettingsBackendClearPluginsWithSetKeys (mGSettingsBackend);
452+ ccsGSettingsBackendSetExistingProfiles (mGSettingsBackend, noProfiles);
453+ ccsGSettingsBackendSetCurrentProfile (mGSettingsBackend, "Default");
454+
455+ ccsFreeDynamicBackend (mBackend);
456+
457+ g_variant_unref (pluginKeys);
458+ }
459+
460+ void AddProfile (const std::string &profile)
461+ {
462+ ccsGSettingsBackendAddProfile (mGSettingsBackend, profile.c_str ());
463+ }
464+
465+ void SetGetExistingProfilesExpectation (CCSContext *context,
466+ CCSContextGMock *gmockContext)
467+ {
468+ EXPECT_CALL (*gmockContext, getProfile ()).Times (AtLeast (1));
469+ }
470+
471+ void SetDeleteProfileExpectation (const std::string &profileToDelete,
472+ CCSContext *context,
473+ CCSContextGMock *gmockContext)
474+ {
475+ EXPECT_CALL (*gmockContext, getProfile ()).Times (AtLeast (1));
476+ }
477+
478+ void SetReadInitExpectation (CCSContext *context,
479+ CCSContextGMock *gmockContext)
480+ {
481+ EXPECT_CALL (*gmockContext, getProfile ()).WillOnce (Return (profileName.c_str ()));
482+ }
483+
484+ void SetReadDoneExpectation (CCSContext *context,
485+ CCSContextGMock *gmockContext)
486+ {
487+ }
488+
489+ void SetWriteInitExpectation (CCSContext *context,
490+ CCSContextGMock *gmockContext)
491+ {
492+ EXPECT_CALL (*gmockContext, getProfile ()).WillOnce (Return (profileName.c_str ()));
493+ }
494+
495+ void SetWriteDoneExpectation (CCSContext *context,
496+ CCSContextGMock *gmockContext)
497+ {
498+ }
499+
500+ void PreWrite (CCSContextGMock *gmockContext,
501+ CCSPluginGMock *gmockPlugin,
502+ CCSSettingGMock *gmockSetting,
503+ CCSSettingType type)
504+ {
505+ EXPECT_CALL (*gmockContext, getIntegrationEnabled ()).WillRepeatedly (Return (FALSE));
506+ EXPECT_CALL (*gmockPlugin, getContext ()).Times (AtLeast (1));
507+ EXPECT_CALL (*gmockPlugin, getName ()).Times (AtLeast (1));
508+ EXPECT_CALL (*gmockSetting, getType ()).Times (AtLeast (1));
509+ EXPECT_CALL (*gmockSetting, getName ()).Times (AtLeast (1));
510+ EXPECT_CALL (*gmockSetting, getParent ()).Times (AtLeast (1));
511+ EXPECT_CALL (*gmockSetting, getIsDefault ()).WillRepeatedly (Return (FALSE));
512+
513+ if (type == TypeList)
514+ EXPECT_CALL (*gmockSetting, getDefaultValue ()).WillRepeatedly (ReturnNull ());
515+ }
516+
517+ void PostWrite (CCSContextGMock *gmockContext,
518+ CCSPluginGMock *gmockPlugin,
519+ CCSSettingGMock *gmockSetting,
520+ CCSSettingType type) {}
521+
522+ void WriteBoolAtKey (const std::string &plugin,
523+ const std::string &key,
524+ const VariantTypes &value)
525+ {
526+ GVariant *variant = NULL;
527+ if (writeBoolToVariant (boolToBool (boost::get <bool> (value)), &variant))
528+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
529+ else
530+ throw std::exception ();
531+ }
532+
533+ void WriteIntegerAtKey (const std::string &plugin,
534+ const std::string &key,
535+ const VariantTypes &value)
536+ {
537+ GVariant *variant = NULL;
538+ if (writeIntToVariant (boost::get <int> (value), &variant))
539+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
540+ else
541+ throw std::exception ();
542+ }
543+
544+ void WriteFloatAtKey (const std::string &plugin,
545+ const std::string &key,
546+ const VariantTypes &value)
547+ {
548+ GVariant *variant = NULL;
549+ if (writeFloatToVariant (boost::get <float> (value), &variant))
550+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
551+ else
552+ throw std::exception ();
553+ }
554+
555+ void WriteStringAtKey (const std::string &plugin,
556+ const std::string &key,
557+ const VariantTypes &value)
558+ {
559+ GVariant *variant = NULL;
560+ if (writeStringToVariant (boost::get <const char *> (value), &variant))
561+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
562+ else
563+ throw std::exception ();
564+ }
565+
566+ void WriteColorAtKey (const std::string &plugin,
567+ const std::string &key,
568+ const VariantTypes &value)
569+ {
570+ GVariant *variant = NULL;
571+ if (writeColorToVariant (boost::get <CCSSettingColorValue> (value), &variant))
572+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
573+ else
574+ throw std::exception ();
575+ }
576+
577+ void WriteKeyAtKey (const std::string &plugin,
578+ const std::string &key,
579+ const VariantTypes &value)
580+ {
581+ GVariant *variant = NULL;
582+ if (writeKeyToVariant (boost::get <CCSSettingKeyValue> (value), &variant))
583+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
584+ else
585+ throw std::exception ();
586+ }
587+
588+ void WriteButtonAtKey (const std::string &plugin,
589+ const std::string &key,
590+ const VariantTypes &value)
591+ {
592+ GVariant *variant = NULL;
593+ if (writeButtonToVariant (boost::get <CCSSettingButtonValue> (value), &variant))
594+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
595+ else
596+ throw std::exception ();
597+ }
598+
599+ void WriteEdgeAtKey (const std::string &plugin,
600+ const std::string &key,
601+ const VariantTypes &value)
602+ {
603+ GVariant *variant = NULL;
604+ if (writeEdgeToVariant (boost::get <unsigned int> (value), &variant))
605+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
606+ else
607+ throw std::exception ();
608+ }
609+
610+ void WriteMatchAtKey (const std::string &plugin,
611+ const std::string &key,
612+ const VariantTypes &value)
613+ {
614+ GVariant *variant = NULL;
615+ if (writeStringToVariant (boost::get <const char *> (value), &variant))
616+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
617+ else
618+ throw std::exception ();
619+ }
620+
621+ void WriteBellAtKey (const std::string &plugin,
622+ const std::string &key,
623+ const VariantTypes &value)
624+ {
625+ GVariant *variant = NULL;
626+ if (writeBoolToVariant (boolToBool (boost::get <bool> (value)), &variant))
627+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
628+ else
629+ throw std::exception ();
630+ }
631+
632+ void WriteListAtKey (const std::string &plugin,
633+ const std::string &key,
634+ const VariantTypes &value)
635+ {
636+ GVariant *variant = NULL;
637+
638+ const CCSListWrapper::Ptr &lw (boost::get <CCSListWrapper::Ptr> (value));
639+
640+ if (writeListValue (*lw, lw->type (), &variant))
641+ writeVariantToKey (mSettings, CharacterWrapper (translateKeyForGSettings (key.c_str ())), variant);
642+ else
643+ throw std::exception ();
644+ }
645+
646+ void PreRead (CCSContextGMock *gmockContext,
647+ CCSPluginGMock *gmockPlugin,
648+ CCSSettingGMock *gmockSetting,
649+ CCSSettingType type)
650+ {
651+ EXPECT_CALL (*gmockContext, getIntegrationEnabled ()).WillOnce (Return (FALSE));
652+ EXPECT_CALL (*gmockPlugin, getContext ()).Times (AtLeast (1));
653+ EXPECT_CALL (*gmockPlugin, getName ()).Times (AtLeast (1));
654+ EXPECT_CALL (*gmockSetting, getType ()).Times (AtLeast (1));
655+ EXPECT_CALL (*gmockSetting, getName ()).Times (AtLeast (1));
656+ EXPECT_CALL (*gmockSetting, getParent ()).Times (AtLeast (1));
657+ EXPECT_CALL (*gmockSetting, isReadOnly ()).WillRepeatedly (Return (FALSE));
658+
659+ if (type == TypeList)
660+ {
661+ EXPECT_CALL (*gmockSetting, getInfo ()).Times (AtLeast (1));
662+ EXPECT_CALL (*gmockSetting, getDefaultValue ()).WillRepeatedly (ReturnNull ());
663+ }
664+ }
665+
666+ void PostRead (CCSContextGMock *gmockContext,
667+ CCSPluginGMock *gmockPlugin,
668+ CCSSettingGMock *gmockSetting,
669+ CCSSettingType type) {}
670+
671+ Bool ReadBoolAtKey (const std::string &plugin,
672+ const std::string &key)
673+ {
674+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
675+ key,
676+ TypeBool));
677+ return readBoolFromVariant (variant.get ());
678+ }
679+
680+ int ReadIntegerAtKey (const std::string &plugin,
681+ const std::string &key)
682+ {
683+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
684+ key,
685+ TypeInt));
686+ return readIntFromVariant (variant.get ());
687+ }
688+
689+ float ReadFloatAtKey (const std::string &plugin,
690+ const std::string &key)
691+ {
692+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
693+ key,
694+ TypeFloat));
695+ return readFloatFromVariant (variant.get ());
696+ }
697+
698+ const char * ReadStringAtKey (const std::string &plugin,
699+ const std::string &key)
700+ {
701+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
702+ key,
703+ TypeString));
704+ return readStringFromVariant (variant.get ());
705+ }
706+
707+ CCSSettingColorValue ReadColorAtKey (const std::string &plugin,
708+ const std::string &key)
709+ {
710+ Bool success = FALSE;
711+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
712+ key,
713+ TypeColor));
714+ CCSSettingColorValue value = readColorFromVariant (variant.get (), &success);
715+ EXPECT_TRUE (success);
716+ return value;
717+ }
718+
719+ CCSSettingKeyValue ReadKeyAtKey (const std::string &plugin,
720+ const std::string &key)
721+ {
722+ Bool success = FALSE;
723+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
724+ key,
725+ TypeKey));
726+ CCSSettingKeyValue value = readKeyFromVariant (variant.get (), &success);
727+ EXPECT_TRUE (success);
728+ return value;
729+ }
730+
731+ CCSSettingButtonValue ReadButtonAtKey (const std::string &plugin,
732+ const std::string &key)
733+ {
734+ Bool success = FALSE;
735+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
736+ key,
737+ TypeButton));
738+ CCSSettingButtonValue value = readButtonFromVariant (variant.get (), &success);
739+ EXPECT_TRUE (success);
740+ return value;
741+ }
742+
743+ unsigned int ReadEdgeAtKey (const std::string &plugin,
744+ const std::string &key)
745+ {
746+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
747+ key,
748+ TypeEdge));
749+ return readEdgeFromVariant (variant.get ());
750+ }
751+
752+ const char * ReadMatchAtKey (const std::string &plugin,
753+ const std::string &key)
754+ {
755+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
756+ key,
757+ TypeMatch));
758+ return readStringFromVariant (variant.get ());
759+ }
760+
761+ Bool ReadBellAtKey (const std::string &plugin,
762+ const std::string &key)
763+ {
764+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
765+ key,
766+ TypeBell));
767+ return readBoolFromVariant (variant.get ());
768+ }
769+
770+ CCSSettingValueList ReadListAtKey (const std::string &plugin,
771+ const std::string &key,
772+ CCSSetting *setting)
773+ {
774+ GVariantShared variant (ReadVariantAtKeyToShared (plugin,
775+ key,
776+ TypeList));
777+ return readListValue (variant.get (), setting, &ccsDefaultObjectAllocator);
778+ }
779+
780+ void PreUpdate (CCSContextGMock *gmockContext,
781+ CCSPluginGMock *gmockPlugin,
782+ CCSSettingGMock *gmockSetting,
783+ CCSSettingType type)
784+ {
785+ EXPECT_CALL (*gmockContext, getIntegrationEnabled ()).WillOnce (Return (FALSE));
786+ EXPECT_CALL (*gmockPlugin, getContext ()).Times (AtLeast (1));
787+ EXPECT_CALL (*gmockPlugin, getName ()).Times (AtLeast (1));
788+ EXPECT_CALL (*gmockSetting, getType ()).Times (AtLeast (1));
789+ EXPECT_CALL (*gmockSetting, getName ()).Times (AtLeast (1));
790+ EXPECT_CALL (*gmockSetting, getParent ()).Times (AtLeast (1));
791+ EXPECT_CALL (*gmockSetting, isReadOnly ()).WillRepeatedly (Return (FALSE));
792+
793+ if (type == TypeList)
794+ {
795+ EXPECT_CALL (*gmockSetting, getInfo ()).Times (AtLeast (1));
796+ EXPECT_CALL (*gmockSetting, getDefaultValue ()).WillRepeatedly (ReturnNull ());
797+ }
798+
799+ EXPECT_CALL (*gmockContext, getProfile ());
800+ }
801+
802+ void PostUpdate (CCSContextGMock *gmockContext,
803+ CCSPluginGMock *gmockPlugin,
804+ CCSSettingGMock *gmockSetting,
805+ CCSSettingType type) {}
806+
807+ bool UpdateSettingAtKey (const std::string &plugin,
808+ const std::string &setting)
809+ {
810+ CharacterWrapper keyName (translateKeyForGSettings (setting.c_str ()));
811+
812+ if (updateSettingWithGSettingsKeyName (reinterpret_cast <CCSBackend *> (mGSettingsBackend), mSettings, keyName, ccsBackendUpdateSetting))
813+ return true;
814+
815+ return false;
816+ }
817+
818+ private:
819+
820+ GVariantShared
821+ ReadVariantAtKeyToShared (const std::string &plugin,
822+ const std::string &key,
823+ CCSSettingType type)
824+ {
825+ CharacterWrapper translatedKey (translateKeyForGSettings (key.c_str ()));
826+ CharacterWrapper pluginPath (makeCompizPluginPath (profileName.c_str (),
827+ plugin.c_str ()));
828+
829+ GVariant *rawVariant = getVariantAtKey (mSettings,
830+ translatedKey,
831+ pluginPath,
832+ type);
833+
834+ GVariantShared shared (AutoDestroyHelper <GVariant> (rawVariant,
835+ g_variant_unref));
836+
837+
838+
839+ return shared;
840+ }
841+
842+ CCSGSettingsWrapper *mSettings;
843+ CCSContext *mContext;
844+ CCSDynamicBackend *mBackend;
845+ CCSBackend *mGSettingsBackend;
846+ std::string pluginToMatch;
847+
848+ static const std::string profileName;
849+};
850+
851+const std::string CCSGSettingsBackendEnv::profileName = "mock";
852+
853+INSTANTIATE_TEST_CASE_P (CCSGSettingsBackendConcept, CCSBackendConformanceTestReadWrite,
854+ compizconfig::test::GenerateTestingParametersForBackendInterface <CCSGSettingsBackendEnv> ());
855+
856+INSTANTIATE_TEST_CASE_P (CCSGSettingsBackendConcept, CCSBackendConformanceTestInfo,
857+ compizconfig::test::GenerateTestingEnvFactoryBackendInterface <CCSGSettingsBackendEnv> ());
858+
859+INSTANTIATE_TEST_CASE_P (CCSGSettingsBackendConcept, CCSBackendConformanceTestInitFiniFuncs,
860+ compizconfig::test::GenerateTestingEnvFactoryBackendInterface <CCSGSettingsBackendEnv> ());
861+
862+INSTANTIATE_TEST_CASE_P (CCSGSettingsBackendConcept, CCSBackendConformanceTestProfileHandling,
863+ compizconfig::test::GenerateTestingEnvFactoryBackendInterface <CCSGSettingsBackendEnv> ());
864
865=== modified file 'compizconfig/libcompizconfig/config/CMakeLists.txt'
866--- compizconfig/libcompizconfig/config/CMakeLists.txt 2012-05-24 06:48:55 +0000
867+++ compizconfig/libcompizconfig/config/CMakeLists.txt 2012-08-07 01:05:25 +0000
868@@ -1,6 +1,9 @@
869 set (_config_file
870 config)
871
872+configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config_test
873+ ${CMAKE_CURRENT_BINARY_DIR}/compiz-1/compizconfig/config)
874+
875 compiz_opt_install_file (${CMAKE_CURRENT_SOURCE_DIR}/${_config_file} ${COMPIZ_SYSCONFDIR}/compizconfig/${_config_file})
876
877 add_custom_target (
878
879=== added file 'compizconfig/libcompizconfig/config/config_test'
880--- compizconfig/libcompizconfig/config/config_test 1970-01-01 00:00:00 +0000
881+++ compizconfig/libcompizconfig/config/config_test 2012-08-07 01:05:25 +0000
882@@ -0,0 +1,3 @@
883+[general]
884+backend = ini
885+plugin_list_autosort = true

Subscribers

People subscribed via source and target branches