2017
2025
pluginsWithChangedKeys.get (),
2031
const CCSBackendInfo stubBackendInfo =
2040
const CCSBackendInfo *
2041
stubBackendGetInfo (CCSBackend *backend)
2043
return &stubBackendInfo;
2047
stubBackendInit (CCSBackend *backend, CCSContext *context)
2053
stubBackendFini (CCSBackend *backend)
2058
CCSBackendInterface stubBackendInterface =
2081
const std::string MOCK_PLUGIN_NAME ("mock");
2082
const std::string MOCK_SCHEMA_NAME ("org.compiz.mock");
2083
const std::string MOCK_PROFILE_NAME ("mock");
2084
const std::string MOCK_GSCHEMA_PATH ("/org/compiz/profiles/mock/plugins/mock");
2085
const std::string PLUGINS_WITH_SET_KEYS ("plugins-with-set-keys");
2087
boost::shared_ptr <GVariant>
2088
GetEmptyPluginsWithSetKeys ()
2090
GVariantBuilder pluginsWithChangedKeysBuilder;
2092
g_variant_builder_init (&pluginsWithChangedKeysBuilder, G_VARIANT_TYPE ("as"));
2093
return AutoDestroy (g_variant_ref_sink (g_variant_builder_end (&pluginsWithChangedKeysBuilder)),
2098
class CCSGSettingsTestCCSGSettingsBackend :
2099
public CCSGSettingsTestIndependent
2103
CCSGSettingsTestCCSGSettingsBackend () :
2104
mockContext (AutoDestroy (ccsMockContextNew (), ccsFreeMockContext)),
2105
stubBackend (AutoDestroy (ccsBackendNewWithDynamicInterface (mockContext.get (), &stubBackendInterface),
2107
mockCompizconfigSettings (ccsMockGSettingsWrapperNew ()),
2108
mockCurrentProfileSettings (ccsMockGSettingsWrapperNew ()),
2109
mockWrapperFactory (ccsMockGSettingsWrapperFactoryNew ()),
2110
mockIntegration (ccsMockIntegrationBackendNew (&ccsDefaultObjectAllocator)),
2111
valueChangeData (reinterpret_cast <CCSGNOMEValueChangeData *> (calloc (1, sizeof (CCSGNOMEValueChangeData)))),
2112
currentProfile (strdup (MOCK_PROFILE_NAME.c_str ())),
2113
mockMockPluginWrapper (ccsMockGSettingsWrapperNew ()),
2114
gmockWrapperFactory (reinterpret_cast <CCSGSettingsWrapperFactoryGMock *> (ccsObjectGetPrivate (mockWrapperFactory))),
2115
gmockWrapper (reinterpret_cast <CCSGSettingsWrapperGMock *> (ccsObjectGetPrivate (mockMockPluginWrapper))),
2116
gmockCurrentProfileSettings (reinterpret_cast <CCSGSettingsWrapperGMock *> (ccsObjectGetPrivate (mockCurrentProfileSettings)))
2119
valueChangeData->integration = mockIntegration;
2120
valueChangeData->factory = NULL;
2121
valueChangeData->storage = NULL;
2122
valueChangeData->context = mockContext.get ();
2124
if (!ccsGSettingsBackendAttachNewToBackend (stubBackend.get (),
2126
mockCompizconfigSettings,
2127
mockCurrentProfileSettings,
2132
throw std::runtime_error ("Failed to attach GSettings backend");
2135
virtual void TearDown ()
2137
ccsGSettingsBackendDetachFromBackend (stubBackend.get ());
2139
CCSGSettingsTestIndependent::TearDown ();
2142
boost::shared_ptr <CCSContext> mockContext;
2143
boost::shared_ptr <CCSBackend> stubBackend;
2144
CCSGSettingsWrapper *mockCompizconfigSettings;
2145
CCSGSettingsWrapper *mockCurrentProfileSettings;
2146
CCSGSettingsWrapperFactory *mockWrapperFactory;
2147
CCSIntegration *mockIntegration;
2148
CCSGNOMEValueChangeData *valueChangeData;
2149
char *currentProfile;
2150
CCSGSettingsWrapper *mockMockPluginWrapper;
2152
CCSGSettingsWrapperFactoryGMock *gmockWrapperFactory;
2153
CCSGSettingsWrapperGMock *gmockWrapper;
2154
CCSGSettingsWrapperGMock *gmockCurrentProfileSettings;
2158
TEST_F (CCSGSettingsTestCCSGSettingsBackend, TestWriteOutSetKeysOnGetSettingsObject)
2160
/* Should create a new wrapper for this "plugin" */
2161
EXPECT_CALL (*gmockWrapperFactory, newGSettingsWrapperWithPath (Eq (MOCK_SCHEMA_NAME),
2162
Eq (MOCK_GSCHEMA_PATH),
2163
_)).WillOnce (Return (mockMockPluginWrapper));
2164
EXPECT_CALL (*gmockWrapper, connectToChangedSignal (_, stubBackend.get ()));
2167
boost::shared_ptr <GVariant> pluginsWithSetKeysVariantEmpty (GetEmptyPluginsWithSetKeys ());
2169
/* Should now get the value of plugins-with-set-keys from
2170
* mockCurrentProfileSettings */
2171
EXPECT_CALL (*gmockCurrentProfileSettings, getValue (Eq (PLUGINS_WITH_SET_KEYS)))
2172
.WillOnce (Return (g_variant_ref (pluginsWithSetKeysVariantEmpty.get ())));
2174
/* Should acknowledge that we wrote to this schema */
2175
EXPECT_CALL (*gmockCurrentProfileSettings, setValue (Eq (PLUGINS_WITH_SET_KEYS),
2176
GVariantHasValueInArray <const gchar *> ("s",
2177
MOCK_PLUGIN_NAME.c_str (),
2178
boost::bind (streq, _1, _2))))
2179
.WillOnce (WithArgs <1> (Invoke (g_variant_unref)));;
2181
CCSGSettingsWrapper *wrapper = ccsGSettingsGetSettingsObjectForPluginWithPath (stubBackend.get (),
2182
MOCK_PLUGIN_NAME.c_str (),
2183
MOCK_GSCHEMA_PATH.c_str (),
2184
mockContext.get ());
2186
EXPECT_EQ (wrapper, mockMockPluginWrapper);
2189
TEST_F (CCSGSettingsTestCCSGSettingsBackend, TestNoWriteOutSetKeysOnGetSettingsObjectIfAlreadyWritten)
2191
/* Should create a new wrapper for this "plugin" */
2192
EXPECT_CALL (*gmockWrapperFactory, newGSettingsWrapperWithPath (Eq (MOCK_SCHEMA_NAME),
2193
Eq (MOCK_GSCHEMA_PATH),
2194
_)).WillOnce (Return (mockMockPluginWrapper));
2195
EXPECT_CALL (*gmockWrapper, connectToChangedSignal (_, stubBackend.get ()));
2198
GVariantBuilder pluginsWithChangedKeysBuilder;
2200
g_variant_builder_init (&pluginsWithChangedKeysBuilder, G_VARIANT_TYPE ("as"));
2201
g_variant_builder_add (&pluginsWithChangedKeysBuilder, "s", MOCK_PLUGIN_NAME.c_str ());
2202
boost::shared_ptr <GVariant> pluginsWithSetKeysVariantNonEmpty (AutoDestroy (g_variant_ref_sink (g_variant_builder_end (&pluginsWithChangedKeysBuilder)),
2205
/* Should now get the value of plugins-with-set-keys from
2206
* mockCurrentProfileSettings */
2207
EXPECT_CALL (*gmockCurrentProfileSettings, getValue (Eq (PLUGINS_WITH_SET_KEYS)))
2208
.WillOnce (Return (g_variant_ref (pluginsWithSetKeysVariantNonEmpty.get ())));
2210
/* No acknowledgement */
2211
EXPECT_CALL (*gmockCurrentProfileSettings, setValue (_, _)).Times (0);
2213
CCSGSettingsWrapper *wrapper = ccsGSettingsGetSettingsObjectForPluginWithPath (stubBackend.get (),
2214
MOCK_PLUGIN_NAME.c_str (),
2215
MOCK_GSCHEMA_PATH.c_str (),
2216
mockContext.get ());
2218
EXPECT_EQ (wrapper, mockMockPluginWrapper);
2221
TEST_F (CCSGSettingsTestCCSGSettingsBackend, TestReturnExistingWrapper)
2223
/* Should create a new wrapper for this "plugin" */
2224
EXPECT_CALL (*gmockWrapperFactory, newGSettingsWrapperWithPath (Eq (MOCK_SCHEMA_NAME),
2225
Eq (MOCK_GSCHEMA_PATH),
2226
_)).WillOnce (Return (mockMockPluginWrapper));
2227
EXPECT_CALL (*gmockWrapper, connectToChangedSignal (_, stubBackend.get ()));
2230
boost::shared_ptr <GVariant> pluginsWithSetKeysVariantEmpty (GetEmptyPluginsWithSetKeys ());
2232
/* Should now get the value of plugins-with-set-keys from
2233
* mockCurrentProfileSettings */
2234
EXPECT_CALL (*gmockCurrentProfileSettings, getValue (Eq (PLUGINS_WITH_SET_KEYS)))
2235
.WillOnce (Return (g_variant_ref (pluginsWithSetKeysVariantEmpty.get ())));
2237
/* Should acknowledge that we wrote to this schema */
2238
EXPECT_CALL (*gmockCurrentProfileSettings, setValue (Eq (PLUGINS_WITH_SET_KEYS),
2240
.WillOnce (WithArgs <1> (Invoke (g_variant_unref)));
2242
CCSGSettingsWrapper *wrapper = ccsGSettingsGetSettingsObjectForPluginWithPath (stubBackend.get (),
2243
MOCK_PLUGIN_NAME.c_str (),
2244
MOCK_GSCHEMA_PATH.c_str (),
2245
mockContext.get ());
2247
EXPECT_CALL (*gmockWrapper, getSchemaName ()).WillOnce (Return (MOCK_SCHEMA_NAME.c_str ()));
2249
/* Shouldn't be called again */
2250
EXPECT_CALL (*gmockWrapperFactory, newGSettingsWrapperWithPath (_, _, _)).Times (0);
2252
wrapper = ccsGSettingsGetSettingsObjectForPluginWithPath (stubBackend.get (),
2253
MOCK_PLUGIN_NAME.c_str (),
2254
MOCK_GSCHEMA_PATH.c_str (),
2255
mockContext.get ());
2257
/* It should return the cached one */
2258
EXPECT_EQ (mockMockPluginWrapper, wrapper);