Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(783)

Side by Side Diff: chrome/browser/extensions/api/bluetooth/bluetooth_apitest_chromeos.cc

Issue 10695161: Bluetooth API: test discovery callback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix patch Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
(...skipping 15 matching lines...) Expand all
26 namespace { 26 namespace {
27 27
28 class BluetoothApiTest : public PlatformAppApiTest { 28 class BluetoothApiTest : public PlatformAppApiTest {
29 public: 29 public:
30 BluetoothApiTest() : empty_extension_(utils::CreateEmptyExtension()) {} 30 BluetoothApiTest() : empty_extension_(utils::CreateEmptyExtension()) {}
31 31
32 virtual void SetUpOnMainThread() OVERRIDE { 32 virtual void SetUpOnMainThread() OVERRIDE {
33 // The browser will clean this up when it is torn down 33 // The browser will clean this up when it is torn down
34 mock_adapter_ = new testing::StrictMock<chromeos::MockBluetoothAdapter>; 34 mock_adapter_ = new testing::StrictMock<chromeos::MockBluetoothAdapter>;
35 event_router()->SetAdapterForTest(mock_adapter_); 35 event_router()->SetAdapterForTest(mock_adapter_);
36
37 device1_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>(
38 mock_adapter_, "d1", "11:12:13:14:15:16",
39 true /* paired */, false /* bonded */, true /* connected */));
40 device2_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>(
41 mock_adapter_, "d2", "21:22:23:24:25:26",
42 false /* paired */, true /* bonded */, false /* connected */));
36 } 43 }
37 44
38 void expectBooleanResult(bool expected, 45 void expectBooleanResult(bool expected,
39 UIThreadExtensionFunction* function, 46 UIThreadExtensionFunction* function,
40 const std::string& args) { 47 const std::string& args) {
41 scoped_ptr<base::Value> result( 48 scoped_ptr<base::Value> result(
42 utils::RunFunctionAndReturnResult(function, args, browser())); 49 utils::RunFunctionAndReturnResult(function, args, browser()));
43 ASSERT_TRUE(result.get() != NULL); 50 ASSERT_TRUE(result.get() != NULL);
44 ASSERT_EQ(base::Value::TYPE_BOOLEAN, result->GetType()); 51 ASSERT_EQ(base::Value::TYPE_BOOLEAN, result->GetType());
45 bool boolean_value; 52 bool boolean_value;
46 result->GetAsBoolean(&boolean_value); 53 result->GetAsBoolean(&boolean_value);
47 EXPECT_EQ(expected, boolean_value); 54 EXPECT_EQ(expected, boolean_value);
48 } 55 }
49 56
50 template <class T> 57 template <class T>
51 T* setupFunction(T* function) { 58 T* setupFunction(T* function) {
52 function->set_extension(empty_extension_.get()); 59 function->set_extension(empty_extension_.get());
53 function->set_has_callback(true); 60 function->set_has_callback(true);
54 return function; 61 return function;
55 } 62 }
56 63
57 protected: 64 protected:
58 testing::StrictMock<chromeos::MockBluetoothAdapter>* mock_adapter_; 65 testing::StrictMock<chromeos::MockBluetoothAdapter>* mock_adapter_;
66 scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device1_;
67 scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device2_;
59 68
60 chromeos::ExtensionBluetoothEventRouter* event_router() { 69 chromeos::ExtensionBluetoothEventRouter* event_router() {
61 return browser()->profile()->GetExtensionService()-> 70 return browser()->profile()->GetExtensionService()->
62 bluetooth_event_router(); 71 bluetooth_event_router();
63 } 72 }
64 73
65 private: 74 private:
66 scoped_refptr<Extension> empty_extension_; 75 scoped_refptr<Extension> empty_extension_;
67 }; 76 };
68 77
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 129
121 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 130 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
122 EXPECT_CALL(*mock_adapter_, IsPowered()) 131 EXPECT_CALL(*mock_adapter_, IsPowered())
123 .WillOnce(testing::Return(true)); 132 .WillOnce(testing::Return(true));
124 133
125 is_powered = setupFunction(new api::BluetoothIsPoweredFunction); 134 is_powered = setupFunction(new api::BluetoothIsPoweredFunction);
126 expectBooleanResult(true, is_powered, "[]"); 135 expectBooleanResult(true, is_powered, "[]");
127 } 136 }
128 137
129 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { 138 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) {
130 testing::NiceMock<chromeos::MockBluetoothDevice> device1(
131 mock_adapter_, "d1", "11:12:13:14:15:16",
132 true /* paired */, false /* bonded */, true /* connected */);
133 testing::NiceMock<chromeos::MockBluetoothDevice> device2(
134 mock_adapter_, "d2", "21:22:23:24:25:26",
135 false /* paired */, true /* bonded */, false /* connected */);
136 chromeos::BluetoothAdapter::ConstDeviceList devices; 139 chromeos::BluetoothAdapter::ConstDeviceList devices;
137 devices.push_back(&device1); 140 devices.push_back(device1_.get());
138 devices.push_back(&device2); 141 devices.push_back(device2_.get());
139 142
140 EXPECT_CALL(device1, ProvidesServiceWithUUID("foo")) 143 EXPECT_CALL(*device1_, ProvidesServiceWithUUID("foo"))
141 .WillOnce(testing::Return(false)); 144 .WillOnce(testing::Return(false));
142 EXPECT_CALL(device2, ProvidesServiceWithUUID("foo")) 145 EXPECT_CALL(*device2_, ProvidesServiceWithUUID("foo"))
143 .WillOnce(testing::Return(true)); 146 .WillOnce(testing::Return(true));
144 147
145 EXPECT_CALL(*mock_adapter_, GetDevices()) 148 EXPECT_CALL(*mock_adapter_, GetDevices())
146 .WillOnce(testing::Return(devices)); 149 .WillOnce(testing::Return(devices));
147 150
148 scoped_refptr<api::BluetoothGetDevicesFunction> get_devices; 151 scoped_refptr<api::BluetoothGetDevicesFunction> get_devices;
149 152
150 get_devices = setupFunction(new api::BluetoothGetDevicesFunction); 153 get_devices = setupFunction(new api::BluetoothGetDevicesFunction);
151 scoped_ptr<base::Value> result(utils::RunFunctionAndReturnResult( 154 scoped_ptr<base::Value> result(utils::RunFunctionAndReturnResult(
152 get_devices, 155 get_devices,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 get_oob_function = 232 get_oob_function =
230 setupFunction(new api::BluetoothGetLocalOutOfBandPairingDataFunction); 233 setupFunction(new api::BluetoothGetLocalOutOfBandPairingDataFunction);
231 234
232 std::string error( 235 std::string error(
233 utils::RunFunctionAndReturnError(get_oob_function, "[]", browser())); 236 utils::RunFunctionAndReturnError(get_oob_function, "[]", browser()));
234 EXPECT_FALSE(error.empty()); 237 EXPECT_FALSE(error.empty());
235 } 238 }
236 239
237 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, SetOutOfBandPairingData) { 240 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, SetOutOfBandPairingData) {
238 std::string device_address("11:12:13:14:15:16"); 241 std::string device_address("11:12:13:14:15:16");
239 testing::NiceMock<chromeos::MockBluetoothDevice> device(
240 mock_adapter_, "d1", device_address,
241 true /* paired */, false /* bonded */, true /* connected */);
242 EXPECT_CALL(*mock_adapter_, GetDevice(device_address)) 242 EXPECT_CALL(*mock_adapter_, GetDevice(device_address))
243 .WillOnce(testing::Return(&device)); 243 .WillOnce(testing::Return(device1_.get()));
244 EXPECT_CALL(device, 244 EXPECT_CALL(*device1_,
245 ClearOutOfBandPairingData(testing::Truly(CallClosure), 245 ClearOutOfBandPairingData(testing::Truly(CallClosure),
246 testing::_)); 246 testing::_));
247 247
248 char buf[64]; 248 char buf[64];
249 snprintf(buf, sizeof(buf), 249 snprintf(buf, sizeof(buf),
250 "[{\"deviceAddress\":\"%s\"}]", device_address.c_str()); 250 "[{\"deviceAddress\":\"%s\"}]", device_address.c_str());
251 std::string params(buf); 251 std::string params(buf);
252 252
253 scoped_refptr<api::BluetoothSetOutOfBandPairingDataFunction> set_oob_function; 253 scoped_refptr<api::BluetoothSetOutOfBandPairingDataFunction> set_oob_function;
254 set_oob_function = setupFunction( 254 set_oob_function = setupFunction(
255 new api::BluetoothSetOutOfBandPairingDataFunction); 255 new api::BluetoothSetOutOfBandPairingDataFunction);
256 // There isn't actually a result. 256 // There isn't actually a result.
257 (void)utils::RunFunctionAndReturnResult(set_oob_function, params, browser()); 257 (void)utils::RunFunctionAndReturnResult(set_oob_function, params, browser());
258 258
259 // Try again with an error 259 // Try again with an error
260 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 260 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
261 testing::Mock::VerifyAndClearExpectations(&device); 261 testing::Mock::VerifyAndClearExpectations(device1_.get());
262 EXPECT_CALL(*mock_adapter_, GetDevice(device_address)) 262 EXPECT_CALL(*mock_adapter_, GetDevice(device_address))
263 .WillOnce(testing::Return(&device)); 263 .WillOnce(testing::Return(device1_.get()));
264 EXPECT_CALL(device, 264 EXPECT_CALL(*device1_,
265 ClearOutOfBandPairingData(testing::_, 265 ClearOutOfBandPairingData(testing::_,
266 testing::Truly(CallClosure))); 266 testing::Truly(CallClosure)));
267 267
268 set_oob_function = setupFunction( 268 set_oob_function = setupFunction(
269 new api::BluetoothSetOutOfBandPairingDataFunction); 269 new api::BluetoothSetOutOfBandPairingDataFunction);
270 std::string error( 270 std::string error(
271 utils::RunFunctionAndReturnError(set_oob_function, params, browser())); 271 utils::RunFunctionAndReturnError(set_oob_function, params, browser()));
272 EXPECT_FALSE(error.empty()); 272 EXPECT_FALSE(error.empty());
273 273
274 // TODO(bryeung): Also test setting the data when there is support for 274 // TODO(bryeung): Also test setting the data when there is support for
275 // ArrayBuffers in the arguments to the RunFunctionAnd* methods. 275 // ArrayBuffers in the arguments to the RunFunctionAnd* methods.
276 // crbug.com/132796 276 // crbug.com/132796
277 } 277 }
278 278
279 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) { 279 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
280 // TODO(bryeung): test that no events are sent now (crbug.com/132616)
281
282 // Try with a failure to start 280 // Try with a failure to start
283 EXPECT_CALL(*mock_adapter_, 281 EXPECT_CALL(*mock_adapter_,
284 SetDiscovering(true, 282 SetDiscovering(true,
285 testing::_, 283 testing::_,
286 testing::Truly(CallClosure))); 284 testing::Truly(CallClosure)));
287 scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function; 285 scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function;
288 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); 286 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction);
289 std::string error( 287 std::string error(
290 utils::RunFunctionAndReturnError(start_function, "[]", browser())); 288 utils::RunFunctionAndReturnError(start_function, "[]", browser()));
291 ASSERT_TRUE(!error.empty()); 289 ASSERT_TRUE(!error.empty());
292 290
293 // Reset for a successful start 291 // Reset for a successful start
294 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 292 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
295 EXPECT_CALL(*mock_adapter_, 293 EXPECT_CALL(*mock_adapter_,
296 SetDiscovering(true, 294 SetDiscovering(true,
297 testing::Truly(CallClosure), 295 testing::Truly(CallClosure),
298 testing::_)); 296 testing::_));
299 297
300 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); 298 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction);
301 (void)utils::RunFunctionAndReturnError(start_function, "[]", browser()); 299 (void)utils::RunFunctionAndReturnError(start_function, "[]", browser());
302 300
303 // TODO(bryeung): test that events are sent now (crbug.com/132616)
304
305 // Reset to try stopping 301 // Reset to try stopping
306 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 302 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
307 EXPECT_CALL(*mock_adapter_, 303 EXPECT_CALL(*mock_adapter_,
308 SetDiscovering(false, 304 SetDiscovering(false,
309 testing::Truly(CallClosure), 305 testing::Truly(CallClosure),
310 testing::_)); 306 testing::_));
311 scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function; 307 scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function;
312 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); 308 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction);
313 (void)utils::RunFunctionAndReturnResult(stop_function, "[]", browser()); 309 (void)utils::RunFunctionAndReturnResult(stop_function, "[]", browser());
314 310
315 // TODO(bryeung): test that no events are sent now (crbug.com/132616)
316
317 // Reset to try stopping with an error 311 // Reset to try stopping with an error
318 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 312 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
319 EXPECT_CALL(*mock_adapter_, 313 EXPECT_CALL(*mock_adapter_,
320 SetDiscovering(false, 314 SetDiscovering(false,
321 testing::_, 315 testing::_,
322 testing::Truly(CallClosure))); 316 testing::Truly(CallClosure)));
323 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); 317 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction);
324 error = utils::RunFunctionAndReturnError(stop_function, "[]", browser()); 318 error = utils::RunFunctionAndReturnError(stop_function, "[]", browser());
325 ASSERT_TRUE(!error.empty()); 319 ASSERT_TRUE(!error.empty());
326 } 320 }
327 321
322 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryCallback) {
323 EXPECT_CALL(*mock_adapter_,
324 SetDiscovering(true, testing::Truly(CallClosure), testing::_));
325 EXPECT_CALL(*mock_adapter_,
326 SetDiscovering(false, testing::Truly(CallClosure), testing::_));
327
328 ResultCatcher catcher;
329 catcher.RestrictToProfile(browser()->profile());
330
331 ExtensionTestMessageListener discovery_started("ready", true);
332 const extensions::Extension* extension =
333 LoadExtension(test_data_dir_.AppendASCII("bluetooth"));
334 GURL page_url = extension->GetResourceURL("test_discovery.html");
335 ui_test_utils::NavigateToURL(browser(), page_url);
336 EXPECT_TRUE(discovery_started.WaitUntilSatisfied());
337
338 event_router()->DeviceAdded(mock_adapter_, device1_.get());
339
340 discovery_started.Reply("go");
341 ExtensionTestMessageListener discovery_stopped("ready", true);
342 EXPECT_TRUE(discovery_stopped.WaitUntilSatisfied());
343
344 event_router()->DeviceAdded(mock_adapter_, device2_.get());
345 discovery_stopped.Reply("go");
346
347 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
348 }
349
328 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Events) { 350 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Events) {
329 ResultCatcher catcher; 351 ResultCatcher catcher;
330 catcher.RestrictToProfile(browser()->profile()); 352 catcher.RestrictToProfile(browser()->profile());
331 353
332 // Load and wait for setup 354 // Load and wait for setup
333 ExtensionTestMessageListener listener("ready", true); 355 ExtensionTestMessageListener listener("ready", true);
334 const extensions::Extension* extension = 356 const extensions::Extension* extension =
335 LoadExtension(test_data_dir_.AppendASCII("bluetooth")); 357 LoadExtension(test_data_dir_.AppendASCII("bluetooth"));
336 GURL page_url = extension->GetResourceURL("test_events.html"); 358 GURL page_url = extension->GetResourceURL("test_events.html");
337 ui_test_utils::NavigateToURL(browser(), page_url); 359 ui_test_utils::NavigateToURL(browser(), page_url);
338 EXPECT_TRUE(listener.WaitUntilSatisfied()); 360 EXPECT_TRUE(listener.WaitUntilSatisfied());
339 361
340 event_router()->AdapterPoweredChanged(mock_adapter_, true); 362 event_router()->AdapterPoweredChanged(mock_adapter_, true);
341 event_router()->AdapterPoweredChanged(mock_adapter_, false); 363 event_router()->AdapterPoweredChanged(mock_adapter_, false);
342 event_router()->AdapterPresentChanged(mock_adapter_, true); 364 event_router()->AdapterPresentChanged(mock_adapter_, true);
343 event_router()->AdapterPresentChanged(mock_adapter_, false); 365 event_router()->AdapterPresentChanged(mock_adapter_, false);
344 366
345 listener.Reply("go"); 367 listener.Reply("go");
346 368
347 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 369 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
348 } 370 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698