Index: services/video_capture/service_unittest.cc |
diff --git a/services/video_capture/service_unittest.cc b/services/video_capture/service_unittest.cc |
index 76d299c7d169e5bc809cbac86e857b5bce70ee7d..27c65087d0c3ace890c88dc5de832c413f80f9e9 100644 |
--- a/services/video_capture/service_unittest.cc |
+++ b/services/video_capture/service_unittest.cc |
@@ -6,18 +6,17 @@ |
#include "base/run_loop.h" |
#include "services/shell/public/cpp/service_test.h" |
#include "services/video_capture/public/interfaces/video_capture_device_factory.mojom.h" |
+#include "services/video_capture/public/interfaces/video_capture_service.mojom.h" |
#include "testing/gmock/include/gmock/gmock.h" |
using testing::Exactly; |
using testing::_; |
+using testing::Invoke; |
+using testing::InvokeWithoutArgs; |
namespace video_capture { |
-ACTION_P(RunClosure, closure) { |
- closure.Run(); |
-} |
- |
-class MockClient { |
+class MockDeviceDescriptorReceiver { |
public: |
// Use forwarding method to work around gmock not supporting move-only types. |
void HandleEnumerateDeviceDescriptorsCallback( |
@@ -30,6 +29,14 @@ class MockClient { |
void(const std::vector<mojom::VideoCaptureDeviceDescriptorPtr>&)); |
}; |
+void HandleAddFakeVideoCaptureDeviceCallback( |
mcasas
2016/08/18 21:11:21
Unused? Remove if so.
chfremer
2016/08/19 16:10:19
Done.
|
+ base::RunLoop* loop, |
+ mojom::VideoCaptureDeviceDescriptorPtr* out_descriptor, |
+ mojom::VideoCaptureDeviceDescriptorPtr in_descriptor) { |
+ *out_descriptor = std::move(in_descriptor); |
+ loop->Quit(); |
+} |
+ |
class VideoCaptureServiceTest : public shell::test::ServiceTest { |
public: |
VideoCaptureServiceTest() |
@@ -38,26 +45,48 @@ class VideoCaptureServiceTest : public shell::test::ServiceTest { |
void SetUp() override { |
ServiceTest::SetUp(); |
- connector()->ConnectToInterface("mojo:video_capture", &factory_); |
+ connector()->ConnectToInterface("mojo:video_capture", &service_); |
+ service_->ConnectToFakeDeviceFactory(mojo::GetProxy(&factory_)); |
} |
protected: |
+ mojom::VideoCaptureServicePtr service_; |
mojom::VideoCaptureDeviceFactoryPtr factory_; |
- MockClient client_; |
+ MockDeviceDescriptorReceiver descriptor_receiver_; |
}; |
// Tests that an answer arrives from the service when calling |
// EnumerateDeviceDescriptors(). |
TEST_F(VideoCaptureServiceTest, EnumerateDeviceDescriptorsCallbackArrives) { |
base::RunLoop wait_loop; |
- EXPECT_CALL(client_, OnEnumerateDeviceDescriptorsCallback(_)) |
+ EXPECT_CALL(descriptor_receiver_, OnEnumerateDeviceDescriptorsCallback(_)) |
+ .Times(Exactly(1)) |
+ .WillOnce(InvokeWithoutArgs([&wait_loop]() { wait_loop.Quit(); })); |
+ ; |
mcasas
2016/08/18 21:11:21
Remove extra ;
chfremer
2016/08/19 16:10:19
Done.
|
+ |
+ factory_->EnumerateDeviceDescriptors(base::Bind( |
+ &MockDeviceDescriptorReceiver::HandleEnumerateDeviceDescriptorsCallback, |
+ base::Unretained(&descriptor_receiver_))); |
+ wait_loop.Run(); |
+} |
+ |
+TEST_F(VideoCaptureServiceTest, FakeDeviceFactroyEnumeratesOneDevice) { |
mcasas
2016/08/18 21:11:21
s/Factroy/Factory/
chfremer
2016/08/19 16:10:19
Done.
|
+ base::RunLoop wait_loop; |
+ size_t num_devices_enumerated = 0; |
+ EXPECT_CALL(descriptor_receiver_, OnEnumerateDeviceDescriptorsCallback(_)) |
.Times(Exactly(1)) |
- .WillOnce(RunClosure(wait_loop.QuitClosure())); |
+ .WillOnce(Invoke([&wait_loop, &num_devices_enumerated]( |
+ const std::vector<mojom::VideoCaptureDeviceDescriptorPtr>& |
+ descriptors) { |
+ num_devices_enumerated = descriptors.size(); |
+ wait_loop.Quit(); |
+ })); |
- factory_->EnumerateDeviceDescriptors( |
- base::Bind(&MockClient::HandleEnumerateDeviceDescriptorsCallback, |
- base::Unretained(&client_))); |
+ factory_->EnumerateDeviceDescriptors(base::Bind( |
+ &MockDeviceDescriptorReceiver::HandleEnumerateDeviceDescriptorsCallback, |
+ base::Unretained(&descriptor_receiver_))); |
wait_loop.Run(); |
+ ASSERT_EQ(1u, num_devices_enumerated); |
} |
} // namespace video_capture |