OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string.h> | 5 #include <string.h> |
6 | 6 |
7 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" | 7 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" |
8 #include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" | 8 #include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" |
9 #include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h" | 9 #include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h" |
10 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" | 10 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" |
11 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" | 11 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" |
12 #include "chrome/browser/extensions/extension_apitest.h" | 12 #include "chrome/browser/extensions/extension_apitest.h" |
13 #include "chrome/browser/extensions/extension_function_test_utils.h" | 13 #include "chrome/browser/extensions/extension_function_test_utils.h" |
14 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
15 #include "chrome/browser/extensions/extension_test_message_listener.h" | 15 #include "chrome/browser/extensions/extension_test_message_listener.h" |
16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
17 #include "chromeos/dbus/bluetooth_out_of_band_client.h" | 17 #include "chromeos/dbus/bluetooth_out_of_band_client.h" |
18 #include "chrome/test/base/ui_test_utils.h" | 18 #include "chrome/test/base/ui_test_utils.h" |
19 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
20 | 20 |
21 using extensions::Extension; | 21 using extensions::Extension; |
22 | 22 |
23 namespace utils = extension_function_test_utils; | 23 namespace utils = extension_function_test_utils; |
24 namespace api = extensions::api; | 24 namespace api = extensions::api; |
25 | 25 |
26 namespace { | 26 namespace { |
27 | 27 |
| 28 static const char* kAddress = "01:02:03:04:05:06"; |
| 29 static const char* kName = "whatsinaname"; |
| 30 |
28 class BluetoothApiTest : public PlatformAppApiTest { | 31 class BluetoothApiTest : public PlatformAppApiTest { |
29 public: | 32 public: |
30 BluetoothApiTest() : empty_extension_(utils::CreateEmptyExtension()) {} | 33 BluetoothApiTest() : empty_extension_(utils::CreateEmptyExtension()) {} |
31 | 34 |
32 virtual void SetUpOnMainThread() OVERRIDE { | 35 virtual void SetUpOnMainThread() OVERRIDE { |
33 // The browser will clean this up when it is torn down | 36 // The browser will clean this up when it is torn down |
34 mock_adapter_ = new testing::StrictMock<chromeos::MockBluetoothAdapter>; | 37 mock_adapter_ = new testing::StrictMock<chromeos::MockBluetoothAdapter>; |
35 event_router()->SetAdapterForTest(mock_adapter_); | 38 event_router()->SetAdapterForTest(mock_adapter_); |
36 | 39 |
37 device1_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( | 40 device1_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( |
38 mock_adapter_, "d1", "11:12:13:14:15:16", | 41 mock_adapter_, "d1", "11:12:13:14:15:16", |
39 true /* paired */, false /* bonded */, true /* connected */)); | 42 true /* paired */, false /* bonded */, true /* connected */)); |
40 device2_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( | 43 device2_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( |
41 mock_adapter_, "d2", "21:22:23:24:25:26", | 44 mock_adapter_, "d2", "21:22:23:24:25:26", |
42 false /* paired */, true /* bonded */, false /* connected */)); | 45 false /* paired */, true /* bonded */, false /* connected */)); |
43 } | 46 } |
44 | 47 |
45 void expectBooleanResult(bool expected, | 48 void expectBooleanResult(bool expected, |
46 UIThreadExtensionFunction* function, | 49 UIThreadExtensionFunction* function) { |
47 const std::string& args) { | |
48 scoped_ptr<base::Value> result( | 50 scoped_ptr<base::Value> result( |
49 utils::RunFunctionAndReturnSingleResult(function, args, browser())); | 51 utils::RunFunctionAndReturnSingleResult(function, "[]", browser())); |
50 ASSERT_TRUE(result.get() != NULL); | 52 ASSERT_TRUE(result.get() != NULL); |
51 ASSERT_EQ(base::Value::TYPE_BOOLEAN, result->GetType()); | 53 ASSERT_EQ(base::Value::TYPE_BOOLEAN, result->GetType()); |
52 bool boolean_value; | 54 bool boolean_value; |
53 result->GetAsBoolean(&boolean_value); | 55 result->GetAsBoolean(&boolean_value); |
54 EXPECT_EQ(expected, boolean_value); | 56 EXPECT_EQ(expected, boolean_value); |
55 } | 57 } |
56 | 58 |
| 59 void expectStringResult(const std::string& expected, |
| 60 UIThreadExtensionFunction* function) { |
| 61 scoped_ptr<base::Value> result( |
| 62 utils::RunFunctionAndReturnSingleResult(function, "[]", browser())); |
| 63 ASSERT_TRUE(result.get() != NULL); |
| 64 ASSERT_EQ(base::Value::TYPE_STRING, result->GetType()); |
| 65 std::string string_value; |
| 66 result->GetAsString(&string_value); |
| 67 EXPECT_EQ(expected, string_value); |
| 68 } |
| 69 |
57 template <class T> | 70 template <class T> |
58 T* setupFunction(T* function) { | 71 T* setupFunction(T* function) { |
59 function->set_extension(empty_extension_.get()); | 72 function->set_extension(empty_extension_.get()); |
60 function->set_has_callback(true); | 73 function->set_has_callback(true); |
61 return function; | 74 return function; |
62 } | 75 } |
63 | 76 |
64 protected: | 77 protected: |
65 testing::StrictMock<chromeos::MockBluetoothAdapter>* mock_adapter_; | 78 testing::StrictMock<chromeos::MockBluetoothAdapter>* mock_adapter_; |
66 scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device1_; | 79 scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device1_; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 116 |
104 } // namespace | 117 } // namespace |
105 | 118 |
106 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, IsAvailable) { | 119 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, IsAvailable) { |
107 EXPECT_CALL(*mock_adapter_, IsPresent()) | 120 EXPECT_CALL(*mock_adapter_, IsPresent()) |
108 .WillOnce(testing::Return(false)); | 121 .WillOnce(testing::Return(false)); |
109 | 122 |
110 scoped_refptr<api::BluetoothIsAvailableFunction> is_available; | 123 scoped_refptr<api::BluetoothIsAvailableFunction> is_available; |
111 | 124 |
112 is_available = setupFunction(new api::BluetoothIsAvailableFunction); | 125 is_available = setupFunction(new api::BluetoothIsAvailableFunction); |
113 expectBooleanResult(false, is_available, "[]"); | 126 expectBooleanResult(false, is_available); |
114 | 127 |
115 testing::Mock::VerifyAndClearExpectations(mock_adapter_); | 128 testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
116 EXPECT_CALL(*mock_adapter_, IsPresent()) | 129 EXPECT_CALL(*mock_adapter_, IsPresent()) |
117 .WillOnce(testing::Return(true)); | 130 .WillOnce(testing::Return(true)); |
118 | 131 |
119 is_available = setupFunction(new api::BluetoothIsAvailableFunction); | 132 is_available = setupFunction(new api::BluetoothIsAvailableFunction); |
120 expectBooleanResult(true, is_available, "[]"); | 133 expectBooleanResult(true, is_available); |
121 } | 134 } |
122 | 135 |
123 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, IsPowered) { | 136 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, IsPowered) { |
124 EXPECT_CALL(*mock_adapter_, IsPowered()) | 137 EXPECT_CALL(*mock_adapter_, IsPowered()) |
125 .WillOnce(testing::Return(false)); | 138 .WillOnce(testing::Return(false)); |
126 | 139 |
127 scoped_refptr<api::BluetoothIsPoweredFunction> is_powered; | 140 scoped_refptr<api::BluetoothIsPoweredFunction> is_powered; |
128 | 141 |
129 is_powered = setupFunction(new api::BluetoothIsPoweredFunction); | 142 is_powered = setupFunction(new api::BluetoothIsPoweredFunction); |
130 expectBooleanResult(false, is_powered, "[]"); | 143 expectBooleanResult(false, is_powered); |
131 | 144 |
132 testing::Mock::VerifyAndClearExpectations(mock_adapter_); | 145 testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
133 EXPECT_CALL(*mock_adapter_, IsPowered()) | 146 EXPECT_CALL(*mock_adapter_, IsPowered()) |
134 .WillOnce(testing::Return(true)); | 147 .WillOnce(testing::Return(true)); |
135 | 148 |
136 is_powered = setupFunction(new api::BluetoothIsPoweredFunction); | 149 is_powered = setupFunction(new api::BluetoothIsPoweredFunction); |
137 expectBooleanResult(true, is_powered, "[]"); | 150 expectBooleanResult(true, is_powered); |
| 151 } |
| 152 |
| 153 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetAddress) { |
| 154 std::string address(kAddress); |
| 155 EXPECT_CALL(*mock_adapter_, address()).WillOnce(testing::ReturnRef(address)); |
| 156 |
| 157 scoped_refptr<api::BluetoothGetAddressFunction> get_address; |
| 158 get_address = setupFunction(new api::BluetoothGetAddressFunction); |
| 159 expectStringResult(address, get_address); |
| 160 } |
| 161 |
| 162 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetName) { |
| 163 std::string name(kName); |
| 164 EXPECT_CALL(*mock_adapter_, name()).WillOnce(testing::ReturnRef(name)); |
| 165 |
| 166 scoped_refptr<api::BluetoothGetNameFunction> get_name; |
| 167 get_name = setupFunction(new api::BluetoothGetNameFunction); |
| 168 expectStringResult(name, get_name); |
138 } | 169 } |
139 | 170 |
140 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { | 171 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { |
141 chromeos::BluetoothAdapter::ConstDeviceList devices; | 172 chromeos::BluetoothAdapter::ConstDeviceList devices; |
142 devices.push_back(device1_.get()); | 173 devices.push_back(device1_.get()); |
143 devices.push_back(device2_.get()); | 174 devices.push_back(device2_.get()); |
144 | 175 |
145 EXPECT_CALL(*device1_, ProvidesServiceWithUUID(kCanonicalUuid)) | 176 EXPECT_CALL(*device1_, ProvidesServiceWithUUID(kCanonicalUuid)) |
146 .WillOnce(testing::Return(false)); | 177 .WillOnce(testing::Return(false)); |
147 EXPECT_CALL(*device2_, ProvidesServiceWithUUID(kCanonicalUuid)) | 178 EXPECT_CALL(*device2_, ProvidesServiceWithUUID(kCanonicalUuid)) |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 event_router()->AdapterPoweredChanged(mock_adapter_, false); | 441 event_router()->AdapterPoweredChanged(mock_adapter_, false); |
411 event_router()->AdapterPresentChanged(mock_adapter_, true); | 442 event_router()->AdapterPresentChanged(mock_adapter_, true); |
412 event_router()->AdapterPresentChanged(mock_adapter_, false); | 443 event_router()->AdapterPresentChanged(mock_adapter_, false); |
413 event_router()->AdapterDiscoveringChanged(mock_adapter_, true); | 444 event_router()->AdapterDiscoveringChanged(mock_adapter_, true); |
414 event_router()->AdapterDiscoveringChanged(mock_adapter_, false); | 445 event_router()->AdapterDiscoveringChanged(mock_adapter_, false); |
415 | 446 |
416 listener.Reply("go"); | 447 listener.Reply("go"); |
417 | 448 |
418 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 449 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
419 } | 450 } |
OLD | NEW |