Index: device/generic_sensor/platform_sensor_and_provider_unittest_win.cc |
diff --git a/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc b/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc |
index 49b4d2244e4f08867b1052dedb730671108dd14b..74b7a2c248a0ddaecf8ad5cae4c7a48d12f40503 100644 |
--- a/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc |
+++ b/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc |
@@ -224,6 +224,20 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { |
return sensor; |
} |
+ // Listening the sensor is asynchronous, therefore inner loop is used to wait |
+ // for SetEventSink to be called. |
+ bool StartListening(scoped_refptr<PlatformSensor> sensor, |
+ PlatformSensor::Client* client, |
+ const PlatformSensorConfiguration& config) { |
+ run_loop_ = base::MakeUnique<base::RunLoop>(); |
+ bool ret = sensor->StartListening(client, config); |
+ run_loop_->Run(); |
+ run_loop_ = nullptr; |
+ return ret; |
+ } |
+ |
+ void QuitInnerLoop() { run_loop_->Quit(); } |
+ |
// Sets sensor with REFSENSOR_TYPE_ID |sensor| to be supported by mocked |
// ISensorMager and it will be present in ISensorCollection. |
void SetSupportedSensor(REFSENSOR_TYPE_ID sensor) { |
@@ -261,6 +275,12 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { |
.WillByDefault(Invoke([this](ISensorEvents* events) { |
events->AddRef(); |
sensor_events_.Attach(events); |
+ if (this->run_loop_) { |
+ message_loop_.task_runner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&PlatformSensorAndProviderTestWin::QuitInnerLoop, |
+ base::Unretained(this))); |
+ } |
return S_OK; |
})); |
@@ -269,6 +289,12 @@ class PlatformSensorAndProviderTestWin : public ::testing::Test { |
ON_CALL(*sensor_, SetEventSink(IsNull())) |
.WillByDefault(Invoke([this](ISensorEvents* events) { |
sensor_events_.Release(); |
+ if (this->run_loop_) { |
+ message_loop_.task_runner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&PlatformSensorAndProviderTestWin::QuitInnerLoop, |
+ base::Unretained(this))); |
+ } |
return S_OK; |
})); |
} |
@@ -433,7 +459,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStarted) { |
EXPECT_CALL(*sensor_, SetEventSink(NotNull())).Times(1); |
EXPECT_CALL(*sensor_, SetEventSink(IsNull())).Times(1); |
EXPECT_CALL(*sensor_, SetProperties(NotNull(), _)) |
- .WillOnce(Invoke( |
+ .WillRepeatedly(Invoke( |
[](IPortableDeviceValues* props, IPortableDeviceValues** result) { |
ULONG value = 0; |
HRESULT hr = props->GetUnsignedIntegerValue( |
@@ -449,7 +475,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStarted) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); |
GenerateDataUpdatedEvent({{SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, 3.14}}); |
@@ -465,7 +491,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorRemoved) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorError()).Times(1); |
GenerateLeaveEvent(); |
@@ -480,7 +506,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStateChangedToError) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorError()).Times(1); |
GenerateStateChangeEvent(SENSOR_STATE_ERROR); |
@@ -495,7 +521,7 @@ TEST_F(PlatformSensorAndProviderTestWin, SensorStateChangedToReady) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorError()).Times(0); |
GenerateStateChangeEvent(SENSOR_STATE_READY); |
@@ -534,7 +560,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckAccelerometerReadingConversion) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); |
double x_accel = 0.25; |
@@ -567,7 +593,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckGyroscopeReadingConversion) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); |
double x_ang_accel = 0.0; |
@@ -608,7 +634,7 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckMagnetometerReadingConversion) { |
auto client = base::MakeUnique<NiceMock<MockPlatformSensorClient>>(sensor); |
PlatformSensorConfiguration configuration(10); |
- EXPECT_TRUE(sensor->StartListening(client.get(), configuration)); |
+ EXPECT_TRUE(StartListening(sensor, client.get(), configuration)); |
EXPECT_CALL(*client, OnSensorReadingChanged()).Times(1); |
double x_magn_field = 112.0; |