| Index: dbus/end_to_end_async_unittest.cc
|
| diff --git a/dbus/end_to_end_async_unittest.cc b/dbus/end_to_end_async_unittest.cc
|
| index 9a88b42cffec6d1830bd479ab8b9bb9a3a5ee8ca..302b7b4758569fa0aa732a5a8f2110834f81145a 100644
|
| --- a/dbus/end_to_end_async_unittest.cc
|
| +++ b/dbus/end_to_end_async_unittest.cc
|
| @@ -83,6 +83,24 @@ class EndToEndAsyncTest : public testing::Test {
|
| base::Unretained(this)));
|
| // Wait until the object proxy is connected to the signal.
|
| message_loop_.Run();
|
| +
|
| + // Create a second object proxy for the root object.
|
| + root_object_proxy_ = bus_->GetObjectProxy(
|
| + "org.chromium.TestService",
|
| + dbus::ObjectPath("/"));
|
| + ASSERT_TRUE(bus_->HasDBusThread());
|
| +
|
| + // Connect to the "Test" signal of "org.chromium.TestInterface" from
|
| + // the root remote object too.
|
| + root_object_proxy_->ConnectToSignal(
|
| + "org.chromium.TestInterface",
|
| + "Test",
|
| + base::Bind(&EndToEndAsyncTest::OnRootTestSignal,
|
| + base::Unretained(this)),
|
| + base::Bind(&EndToEndAsyncTest::OnConnected,
|
| + base::Unretained(this)));
|
| + // Wait until the root object proxy is connected to the signal.
|
| + message_loop_.Run();
|
| }
|
|
|
| virtual void TearDown() {
|
| @@ -140,6 +158,15 @@ class EndToEndAsyncTest : public testing::Test {
|
| message_loop_.Quit();
|
| }
|
|
|
| + // Called when the "Test" signal is received, in the main thread, by
|
| + // the root object proxy. Copy the string payload to
|
| + // |root_test_signal_string_|.
|
| + void OnRootTestSignal(dbus::Signal* signal) {
|
| + dbus::MessageReader reader(signal);
|
| + ASSERT_TRUE(reader.PopString(&root_test_signal_string_));
|
| + message_loop_.Quit();
|
| + }
|
| +
|
| // Called when the "Test2" signal is received, in the main thread.
|
| void OnTest2Signal(dbus::Signal* signal) {
|
| dbus::MessageReader reader(signal);
|
| @@ -165,9 +192,12 @@ class EndToEndAsyncTest : public testing::Test {
|
| scoped_ptr<base::Thread> dbus_thread_;
|
| scoped_refptr<dbus::Bus> bus_;
|
| dbus::ObjectProxy* object_proxy_;
|
| + dbus::ObjectProxy* root_object_proxy_;
|
| scoped_ptr<dbus::TestService> test_service_;
|
| // Text message from "Test" signal.
|
| std::string test_signal_string_;
|
| + // Text message from "Test" signal delivered to root.
|
| + std::string root_test_signal_string_;
|
| };
|
|
|
| TEST_F(EndToEndAsyncTest, Echo) {
|
| @@ -302,11 +332,14 @@ TEST_F(EndToEndAsyncTest, TestSignal) {
|
|
|
| TEST_F(EndToEndAsyncTest, TestSignalFromRoot) {
|
| const char kMessage[] = "hello, world";
|
| - // Send the test signal from the root object path, to see if we can
|
| - // handle signals sent from "/", like dbus-send does.
|
| + // Object proxies are tied to a particular object path, if a signal
|
| + // arrives from a different object path like "/" the first object proxy
|
| + // |object_proxy_| should not handle it, and should leave it for the root
|
| + // object proxy |root_object_proxy_|.
|
| test_service_->SendTestSignalFromRoot(kMessage);
|
| - // Receive the signal with the object proxy. The signal is handled in
|
| - // EndToEndAsyncTest::OnTestSignal() in the main thread.
|
| WaitForTestSignal();
|
| - ASSERT_EQ(kMessage, test_signal_string_);
|
| + // Verify the signal was not received by the specific proxy.
|
| + ASSERT_TRUE(test_signal_string_.empty());
|
| + // Verify the string WAS received by the root proxy.
|
| + ASSERT_EQ(kMessage, root_test_signal_string_);
|
| }
|
|
|