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..c3abcf76f74ed0243e09d0c0a72d27bacd4585ef 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( |
@@ -38,26 +37,47 @@ 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(); })); |
+ |
+ factory_->EnumerateDeviceDescriptors(base::Bind( |
+ &MockDeviceDescriptorReceiver::HandleEnumerateDeviceDescriptorsCallback, |
+ base::Unretained(&descriptor_receiver_))); |
+ wait_loop.Run(); |
+} |
+ |
+TEST_F(VideoCaptureServiceTest, FakeDeviceFactoryEnumeratesOneDevice) { |
+ 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 |