forked from Kistler-Group/sdbus-cpp
Add object manager automatically in ObjectManager_adaptor constructor
This commit is contained in:
@ -130,30 +130,6 @@ namespace sdbus {
|
|||||||
getObject().unregister();
|
getObject().unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief Adds an ObjectManager interface at the path of this D-Bus object
|
|
||||||
*
|
|
||||||
* Creates an ObjectManager interface at the specified object path on
|
|
||||||
* the connection. This is a convenient way to interrogate a connection
|
|
||||||
* to see what objects it has.
|
|
||||||
*
|
|
||||||
* @throws sdbus::Error in case of failure
|
|
||||||
*/
|
|
||||||
void addObjectManager()
|
|
||||||
{
|
|
||||||
getObject().addObjectManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief Removes an ObjectManager interface from the path of this D-Bus object
|
|
||||||
*
|
|
||||||
* @throws sdbus::Error in case of failure
|
|
||||||
*/
|
|
||||||
void removeObjectManager()
|
|
||||||
{
|
|
||||||
getObject().removeObjectManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
using base_type = AdaptorInterfaces;
|
using base_type = AdaptorInterfaces;
|
||||||
};
|
};
|
||||||
|
@ -216,6 +216,7 @@ namespace sdbus {
|
|||||||
ObjectManager_adaptor(sdbus::IObject& object)
|
ObjectManager_adaptor(sdbus::IObject& object)
|
||||||
: object_(object)
|
: object_(object)
|
||||||
{
|
{
|
||||||
|
object_.addObjectManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -496,22 +496,8 @@ TEST_F(SdbusTestObject, EmitsPropertyChangedSignalForAllProperties)
|
|||||||
ASSERT_TRUE(waitUntil(signalReceived));
|
ASSERT_TRUE(waitUntil(signalReceived));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SdbusTestObject, DoesNotProvideObjectManagerInterfaceByDefault)
|
|
||||||
{
|
|
||||||
ASSERT_THROW(m_proxy->GetManagedObjects(), sdbus::Error);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SdbusTestObject, ProvidesObjectManagerInterfaceWhenExplicitlyAdded)
|
|
||||||
{
|
|
||||||
m_adaptor->addObjectManager();
|
|
||||||
|
|
||||||
ASSERT_NO_THROW(m_proxy->GetManagedObjects());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects)
|
TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects)
|
||||||
{
|
{
|
||||||
m_adaptor->addObjectManager();
|
|
||||||
|
|
||||||
const auto objectsInterfacesAndProperties = m_proxy->GetManagedObjects();
|
const auto objectsInterfacesAndProperties = m_proxy->GetManagedObjects();
|
||||||
|
|
||||||
ASSERT_THAT(objectsInterfacesAndProperties, SizeIs(0));
|
ASSERT_THAT(objectsInterfacesAndProperties, SizeIs(0));
|
||||||
@ -519,7 +505,6 @@ TEST_F(SdbusTestObject, GetsZeroManagedObjectsIfHasNoSubPathObjects)
|
|||||||
|
|
||||||
TEST_F(SdbusTestObject, GetsManagedObjectsSuccessfully)
|
TEST_F(SdbusTestObject, GetsManagedObjectsSuccessfully)
|
||||||
{
|
{
|
||||||
m_adaptor->addObjectManager();
|
|
||||||
auto subObject1 = sdbus::createObject(*s_connection, "/sub/path1");
|
auto subObject1 = sdbus::createObject(*s_connection, "/sub/path1");
|
||||||
subObject1->registerProperty("aProperty1").onInterface("org.sdbuscpp.integrationtests.iface1").withGetter([]{return uint8_t{123};});
|
subObject1->registerProperty("aProperty1").onInterface("org.sdbuscpp.integrationtests.iface1").withGetter([]{return uint8_t{123};});
|
||||||
subObject1->finishRegistration();
|
subObject1->finishRegistration();
|
||||||
@ -546,7 +531,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesAddedSignalForSelectedObjectInterfaces)
|
|||||||
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3));
|
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3));
|
||||||
signalReceived = true;
|
signalReceived = true;
|
||||||
};
|
};
|
||||||
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
|
|
||||||
|
|
||||||
m_adaptor->emitInterfacesAddedSignal({INTERFACE_NAME});
|
m_adaptor->emitInterfacesAddedSignal({INTERFACE_NAME});
|
||||||
|
|
||||||
@ -564,7 +548,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesAddedSignalForAllObjectInterfaces)
|
|||||||
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3)); // 3 properties under INTERFACE_NAME
|
EXPECT_THAT(interfacesAndProperties.at(INTERFACE_NAME), SizeIs(3)); // 3 properties under INTERFACE_NAME
|
||||||
signalReceived = true;
|
signalReceived = true;
|
||||||
};
|
};
|
||||||
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
|
|
||||||
|
|
||||||
m_adaptor->emitInterfacesAddedSignal();
|
m_adaptor->emitInterfacesAddedSignal();
|
||||||
|
|
||||||
@ -582,7 +565,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesRemovedSignalForSelectedObjectInterfaces)
|
|||||||
EXPECT_THAT(interfaces[0], Eq(INTERFACE_NAME));
|
EXPECT_THAT(interfaces[0], Eq(INTERFACE_NAME));
|
||||||
signalReceived = true;
|
signalReceived = true;
|
||||||
};
|
};
|
||||||
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
|
|
||||||
|
|
||||||
m_adaptor->emitInterfacesRemovedSignal({INTERFACE_NAME});
|
m_adaptor->emitInterfacesRemovedSignal({INTERFACE_NAME});
|
||||||
|
|
||||||
@ -599,7 +581,6 @@ TEST_F(SdbusTestObject, EmitsInterfacesRemovedSignalForAllObjectInterfaces)
|
|||||||
ASSERT_THAT(interfaces, SizeIs(5)); // INTERFACE_NAME + 4 standard interfaces
|
ASSERT_THAT(interfaces, SizeIs(5)); // INTERFACE_NAME + 4 standard interfaces
|
||||||
signalReceived = true;
|
signalReceived = true;
|
||||||
};
|
};
|
||||||
m_adaptor->addObjectManager(); // ObjectManager interface needs to be activated explicitly
|
|
||||||
|
|
||||||
m_adaptor->emitInterfacesRemovedSignal();
|
m_adaptor->emitInterfacesRemovedSignal();
|
||||||
|
|
||||||
|
@ -211,6 +211,19 @@ R"delimiter(<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspectio
|
|||||||
<arg type="as" name="invalidated_properties"/>
|
<arg type="as" name="invalidated_properties"/>
|
||||||
</signal>
|
</signal>
|
||||||
</interface>
|
</interface>
|
||||||
|
<interface name="org.freedesktop.DBus.ObjectManager">
|
||||||
|
<method name="GetManagedObjects">
|
||||||
|
<arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out"/>
|
||||||
|
</method>
|
||||||
|
<signal name="InterfacesAdded">
|
||||||
|
<arg type="o" name="object_path"/>
|
||||||
|
<arg type="a{sa{sv}}" name="interfaces_and_properties"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="InterfacesRemoved">
|
||||||
|
<arg type="o" name="object_path"/>
|
||||||
|
<arg type="as" name="interfaces"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
<interface name="org.sdbuscpp.integrationtests">
|
<interface name="org.sdbuscpp.integrationtests">
|
||||||
<annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
|
<annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
|
||||||
<method name="doOperation">
|
<method name="doOperation">
|
||||||
|
Reference in New Issue
Block a user