Chromium Code Reviews| Index: extensions/browser/api/usb/usb_apitest.cc |
| diff --git a/extensions/browser/api/usb/usb_apitest.cc b/extensions/browser/api/usb/usb_apitest.cc |
| index 57e073fe64a6146b92e8b46326e02ff74ba85bcd..3960731cbcf986dc8e2e4e262cc0b28134d763c4 100644 |
| --- a/extensions/browser/api/usb/usb_apitest.cc |
| +++ b/extensions/browser/api/usb/usb_apitest.cc |
| @@ -8,6 +8,7 @@ |
| #include "device/usb/usb_service.h" |
| #include "extensions/browser/api/usb/usb_api.h" |
| #include "extensions/shell/test/shell_apitest.h" |
| +#include "extensions/test/extension_test_message_listener.h" |
| #include "net/base/io_buffer.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| @@ -126,6 +127,16 @@ class MockUsbService : public UsbService { |
| public: |
| explicit MockUsbService(scoped_refptr<UsbDevice> device) : device_(device) {} |
| + // Public wrapper around the protected base class method. |
|
Yoyo Zhou
2015/01/21 06:57:43
Why not make the base class friend class UsbApiTes
Reilly Grant (use Gerrit)
2015/01/22 00:45:01
I tried this and no one in my office could figure
|
| + void NotifyDeviceAdded(scoped_refptr<UsbDevice> device) { |
| + UsbService::NotifyDeviceAdded(device); |
| + } |
| + |
| + // Public wrapper around the protected base class method. |
| + void NotifyDeviceRemoved(scoped_refptr<UsbDevice> device) { |
| + UsbService::NotifyDeviceRemoved(device); |
| + } |
| + |
| protected: |
| scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { |
| EXPECT_EQ(unique_id, 0U); |
| @@ -144,8 +155,12 @@ class UsbApiTest : public ShellApiTest { |
| public: |
| void SetUpOnMainThread() override { |
| ShellApiTest::SetUpOnMainThread(); |
| - mock_device_handle_ = new MockUsbDeviceHandle(); |
| + |
| mock_device_ = new MockUsbDevice(0, 0, 0); |
| + EXPECT_CALL(*mock_device_.get(), GetSerialNumber(_)) |
| + .WillRepeatedly(Return(false)); |
| + |
| + mock_device_handle_ = new MockUsbDeviceHandle(); |
| mock_device_handle_->set_device(mock_device_.get()); |
| EXPECT_CALL(*mock_device_.get(), RequestUsbAccess(_, _)) |
| .WillRepeatedly(Invoke(RequestUsbAccess)); |
| @@ -160,22 +175,26 @@ class UsbApiTest : public ShellApiTest { |
| } |
| void SetUpService() { |
| - UsbService::SetInstanceForTest(new MockUsbService(mock_device_)); |
| + mock_service_ = new MockUsbService(mock_device_); |
| + UsbService::SetInstanceForTest(mock_service_); |
| } |
| - void TearDownOnMainThread() override { |
| - UsbService* service = NULL; |
| - base::RunLoop run_loop; |
| - BrowserThread::PostTaskAndReply( |
| - BrowserThread::FILE, FROM_HERE, |
| - base::Bind(&UsbService::SetInstanceForTest, service), |
| - run_loop.QuitClosure()); |
| - run_loop.Run(); |
| + void AddTestDevices() { |
| + scoped_refptr<MockUsbDevice> device(new MockUsbDevice(0x18D1, 0x58F0, 1)); |
| + EXPECT_CALL(*device.get(), GetSerialNumber(_)) |
| + .WillRepeatedly(Return(false)); |
| + mock_service_->NotifyDeviceAdded(device); |
| + |
| + device = new MockUsbDevice(0x18D1, 0x58F1, 2); |
| + EXPECT_CALL(*device.get(), GetSerialNumber(_)) |
| + .WillRepeatedly(Return(false)); |
| + mock_service_->NotifyDeviceAdded(device); |
| } |
| protected: |
| scoped_refptr<MockUsbDeviceHandle> mock_device_handle_; |
| scoped_refptr<MockUsbDevice> mock_device_; |
| + MockUsbService* mock_service_; |
| }; |
| } // namespace |
| @@ -263,4 +282,43 @@ IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { |
| ASSERT_TRUE(RunAppTest("api_test/usb/invalid_length_transfer")); |
| } |
| +IN_PROC_BROWSER_TEST_F(UsbApiTest, OnDeviceAdded) { |
| + ExtensionTestMessageListener load_listener("loaded", false); |
| + ExtensionTestMessageListener result_listener("success", false); |
| + result_listener.set_failure_message("failure"); |
| + |
| + ASSERT_TRUE(LoadApp("api_test/usb/add_event")); |
| + ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| + |
| + base::RunLoop run_loop; |
| + BrowserThread::PostTaskAndReply( |
| + BrowserThread::FILE, FROM_HERE, |
| + base::Bind(&UsbApiTest::AddTestDevices, base::Unretained(this)), |
| + run_loop.QuitClosure()); |
| + run_loop.Run(); |
| + |
| + ASSERT_TRUE(result_listener.WaitUntilSatisfied()); |
| + ASSERT_EQ("success", result_listener.message()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(UsbApiTest, OnDeviceRemoved) { |
| + ExtensionTestMessageListener load_listener("loaded", false); |
| + ExtensionTestMessageListener result_listener("success", false); |
| + result_listener.set_failure_message("failure"); |
| + |
| + ASSERT_TRUE(LoadApp("api_test/usb/remove_event")); |
| + ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| + |
| + base::RunLoop run_loop; |
| + BrowserThread::PostTaskAndReply( |
| + BrowserThread::FILE, FROM_HERE, |
| + base::Bind(&MockUsbService::NotifyDeviceRemoved, |
| + base::Unretained(mock_service_), mock_device_), |
| + run_loop.QuitClosure()); |
| + run_loop.Run(); |
| + |
| + ASSERT_TRUE(result_listener.WaitUntilSatisfied()); |
| + ASSERT_EQ("success", result_listener.message()); |
| +} |
| + |
| } // namespace extensions |