Add partial pre-read functionality to browser startup (Windows).
[chromium-blink-merge.git] / dbus / bus_unittest.cc
blobbbd2a4cf1c177aad93411fab5cef8bb2dac6f91b
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "dbus/bus.h"
7 #include "base/bind.h"
8 #include "base/message_loop.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/threading/thread.h"
11 #include "dbus/exported_object.h"
12 #include "dbus/object_proxy.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 namespace {
18 // Used to test AddFilterFunction().
19 DBusHandlerResult DummyHandler(DBusConnection* connection,
20 DBusMessage* raw_message,
21 void* user_data) {
22 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
25 } // namespace
27 TEST(BusTest, GetObjectProxy) {
28 dbus::Bus::Options options;
29 scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
31 dbus::ObjectProxy* object_proxy1 =
32 bus->GetObjectProxy("org.chromium.TestService",
33 "/org/chromium/TestObject");
34 ASSERT_TRUE(object_proxy1);
36 // This should return the same object.
37 dbus::ObjectProxy* object_proxy2 =
38 bus->GetObjectProxy("org.chromium.TestService",
39 "/org/chromium/TestObject");
40 ASSERT_TRUE(object_proxy2);
41 EXPECT_EQ(object_proxy1, object_proxy2);
43 // This should not.
44 dbus::ObjectProxy* object_proxy3 =
45 bus->GetObjectProxy("org.chromium.TestService",
46 "/org/chromium/DifferentTestObject");
47 ASSERT_TRUE(object_proxy3);
48 EXPECT_NE(object_proxy1, object_proxy3);
50 bus->ShutdownAndBlock();
53 TEST(BusTest, GetExportedObject) {
54 dbus::Bus::Options options;
55 scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
57 dbus::ExportedObject* object_proxy1 =
58 bus->GetExportedObject("org.chromium.TestService",
59 "/org/chromium/TestObject");
60 ASSERT_TRUE(object_proxy1);
62 // This should return the same object.
63 dbus::ExportedObject* object_proxy2 =
64 bus->GetExportedObject("org.chromium.TestService",
65 "/org/chromium/TestObject");
66 ASSERT_TRUE(object_proxy2);
67 EXPECT_EQ(object_proxy1, object_proxy2);
69 // This should not.
70 dbus::ExportedObject* object_proxy3 =
71 bus->GetExportedObject("org.chromium.TestService",
72 "/org/chromium/DifferentTestObject");
73 ASSERT_TRUE(object_proxy3);
74 EXPECT_NE(object_proxy1, object_proxy3);
76 bus->ShutdownAndBlock();
79 TEST(BusTest, ShutdownAndBlock) {
80 dbus::Bus::Options options;
81 scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
82 ASSERT_FALSE(bus->shutdown_completed());
84 // Shut down synchronously.
85 bus->ShutdownAndBlock();
86 EXPECT_TRUE(bus->shutdown_completed());
89 TEST(BusTest, ShutdownAndBlockWithDBusThread) {
90 // Start the D-Bus thread.
91 base::Thread::Options thread_options;
92 thread_options.message_loop_type = MessageLoop::TYPE_IO;
93 base::Thread dbus_thread("D-Bus thread");
94 dbus_thread.StartWithOptions(thread_options);
96 // Create the bus.
97 dbus::Bus::Options options;
98 options.dbus_thread_message_loop_proxy = dbus_thread.message_loop_proxy();
99 scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
100 ASSERT_FALSE(bus->shutdown_completed());
102 // Shut down synchronously.
103 bus->ShutdownOnDBusThreadAndBlock();
104 EXPECT_TRUE(bus->shutdown_completed());
105 dbus_thread.Stop();
108 TEST(BusTest, AddFilterFunction) {
109 dbus::Bus::Options options;
110 scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
111 // Should connect before calling AddFilterFunction().
112 bus->Connect();
114 int data1 = 100;
115 int data2 = 200;
116 ASSERT_TRUE(bus->AddFilterFunction(&DummyHandler, &data1));
117 // Cannot add the same function with the same data.
118 ASSERT_FALSE(bus->AddFilterFunction(&DummyHandler, &data1));
119 // Can add the same function with different data.
120 ASSERT_TRUE(bus->AddFilterFunction(&DummyHandler, &data2));
122 ASSERT_TRUE(bus->RemoveFilterFunction(&DummyHandler, &data1));
123 ASSERT_FALSE(bus->RemoveFilterFunction(&DummyHandler, &data1));
124 ASSERT_TRUE(bus->RemoveFilterFunction(&DummyHandler, &data2));
126 bus->ShutdownAndBlock();