| Index: device/generic_sensor/linux/sensor_reader_unittest.cc
|
| diff --git a/device/generic_sensor/linux/sensor_reader_unittest.cc b/device/generic_sensor/linux/sensor_reader_unittest.cc
|
| index af4e28fbabf89fb2fb0d1365d0909b75e1eba441..de5b936506c6a9c5ee817f714902ee2e0cc6d2c4 100644
|
| --- a/device/generic_sensor/linux/sensor_reader_unittest.cc
|
| +++ b/device/generic_sensor/linux/sensor_reader_unittest.cc
|
| @@ -17,11 +17,11 @@ namespace {
|
|
|
| const base::FilePath::CharType* kDevice0Dir = FILE_PATH_LITERAL("device0");
|
|
|
| -const std::string kSensorFileNameTest1 = "sensor_data1";
|
| -const std::string kSensorFileNameTest2 = "sensor_data2";
|
| -const std::string kSensorFileNameTest3 = "sensor_data3";
|
| +const char kSensorFileNameTest1[] = "sensor_data1";
|
| +const char kSensorFileNameTest2[] = "sensor_data2";
|
| +const char kSensorFileNameTest3[] = "sensor_data3";
|
|
|
| -const std::string kTestSensorFileNamesTest[3][5] = {
|
| +const char* kTestSensorFileNamesTest[3][5] = {
|
| {
|
| kSensorFileNameTest1, "sensor1_input", "sensor1_raw_input", "sensor1",
|
| "sensor1_data_raw",
|
| @@ -36,6 +36,8 @@ const std::string kTestSensorFileNamesTest[3][5] = {
|
| },
|
| };
|
|
|
| +const char kTestSensorFileNameScaling[] = "test_scaling";
|
| +
|
| void CreateFile(const base::FilePath& file) {
|
| EXPECT_EQ(base::WriteFile(file, nullptr, 0), 0);
|
| }
|
| @@ -44,7 +46,7 @@ void DeleteFile(const base::FilePath& file) {
|
| EXPECT_TRUE(base::DeleteFile(file, false));
|
| }
|
|
|
| -void WriteReadingFieldToFile(const base::FilePath& path, double value) {
|
| +void WriteValueToFile(const base::FilePath& path, double value) {
|
| const std::string str = base::DoubleToString(value);
|
| int bytes_written = base::WriteFile(path, str.data(), str.size());
|
| EXPECT_EQ(static_cast<size_t>(bytes_written), str.size());
|
| @@ -65,7 +67,10 @@ class SensorReaderTest : public ::testing::Test {
|
| void TearDown() override { ASSERT_TRUE(base_temp_dir_.Delete()); }
|
|
|
| // Initialize SensorDataLinux with values for a sensor reader.
|
| - void InitSensorDataForTest(size_t rows, SensorDataLinux* data) {
|
| + void InitSensorDataForTest(
|
| + size_t rows,
|
| + const SensorDataLinux::ReaderFunctor& apply_scaling_func,
|
| + SensorDataLinux* data) {
|
| // Corresponds to maximum values in SensorReading.
|
| // We must read only from up to three files. Thus - 3 sets of files
|
| // should be fill in here.
|
| @@ -73,6 +78,8 @@ class SensorReaderTest : public ::testing::Test {
|
| if (rows > 3)
|
| rows = max_rows;
|
|
|
| + data->apply_scaling_func = apply_scaling_func;
|
| + data->sensor_scale_name = kTestSensorFileNameScaling;
|
| data->base_path_sensor_linux = base_dir_.value().c_str();
|
| for (size_t i = 0; i < rows; ++i) {
|
| std::vector<std::string> file_names(
|
| @@ -106,14 +113,60 @@ class SensorReaderTest : public ::testing::Test {
|
| TEST_F(SensorReaderTest, FileDoesNotExist) {
|
| const char* kGiberishFiles[] = {"temp1", "temp2", "temp3", "temp4"};
|
| const size_t rows = 3;
|
| + const double scaling_value = 0.1234;
|
| // Create some gibberish files that we are not interested in.
|
| for (unsigned int i = 0; i < arraysize(kGiberishFiles); ++i) {
|
| base::FilePath some_file = sensors_dir_.Append(kGiberishFiles[i]);
|
| CreateFile(some_file);
|
| }
|
|
|
| + // Create a file with a scaling value.
|
| + base::FilePath temp_sensor_scale_file =
|
| + sensors_dir_.Append(kTestSensorFileNameScaling);
|
| + CreateFile(temp_sensor_scale_file);
|
| + // Write a scaling value to the file.
|
| + WriteValueToFile(temp_sensor_scale_file, scaling_value);
|
| +
|
| SensorDataLinux sensor_data;
|
| - InitSensorDataForTest(rows, &sensor_data);
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
| +
|
| + std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| + EXPECT_FALSE(reader);
|
| +}
|
| +
|
| +// Test a reader is still created if a file with a scaling value
|
| +// does not exist.
|
| +TEST_F(SensorReaderTest, ScalingFileDoesNotExist) {
|
| + const size_t rows = 1;
|
| + // Create a test sensor file, which must be found.
|
| + base::FilePath temp_sensor_file1 = sensors_dir_.Append(kSensorFileNameTest1);
|
| + CreateFile(temp_sensor_file1);
|
| +
|
| + SensorDataLinux sensor_data;
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
| +
|
| + std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| + EXPECT_TRUE(reader);
|
| +}
|
| +
|
| +// Test a reader is not created if a scaling file exists, but cannot be read
|
| +// from.
|
| +TEST_F(SensorReaderTest, CannotReadFromScalingFile) {
|
| + const size_t rows = 1;
|
| + // Create a test sensor file, which must be found.
|
| + base::FilePath temp_sensor_file1 = sensors_dir_.Append(kSensorFileNameTest1);
|
| + CreateFile(temp_sensor_file1);
|
| +
|
| + // Create a file with a scaling value, which must be found.
|
| + base::FilePath temp_sensor_scale_file =
|
| + sensors_dir_.Append(kTestSensorFileNameScaling);
|
| + CreateFile(temp_sensor_scale_file);
|
| +
|
| + SensorDataLinux sensor_data;
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
|
|
| std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| EXPECT_FALSE(reader);
|
| @@ -130,13 +183,14 @@ TEST_F(SensorReaderTest, ReadValueFromOneFile) {
|
|
|
| // Initialize sensor data for a reader.
|
| SensorDataLinux sensor_data;
|
| - InitSensorDataForTest(rows, &sensor_data);
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
|
|
| std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| EXPECT_TRUE(reader);
|
|
|
| // Write a value to the file.
|
| - WriteReadingFieldToFile(temp_sensor_file, value1);
|
| + WriteValueToFile(temp_sensor_file, value1);
|
|
|
| // Fill SensorReading's first field with read value. Other fields must
|
| // be 0.
|
| @@ -161,14 +215,15 @@ TEST_F(SensorReaderTest, ReadValuesFromTwoFiles) {
|
|
|
| // Initialize sensor data for a reader.
|
| SensorDataLinux sensor_data;
|
| - InitSensorDataForTest(rows, &sensor_data);
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
|
|
| std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| EXPECT_TRUE(reader);
|
|
|
| // Write a value to the file.
|
| - WriteReadingFieldToFile(temp_sensor_file1, value1);
|
| - WriteReadingFieldToFile(temp_sensor_file2, value2);
|
| + WriteValueToFile(temp_sensor_file1, value1);
|
| + WriteValueToFile(temp_sensor_file2, value2);
|
|
|
| // Fill SensorReading's two first fields with read value. Last field must
|
| // be 0.
|
| @@ -200,15 +255,16 @@ TEST_F(SensorReaderTest, ReadValuesFromThreeFilesAndFail) {
|
|
|
| // Initialize sensor data for a reader.
|
| SensorDataLinux sensor_data;
|
| - InitSensorDataForTest(rows, &sensor_data);
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
|
|
| std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| EXPECT_TRUE(reader);
|
|
|
| - // Write a value to the file.
|
| - WriteReadingFieldToFile(temp_sensor_file1, value1);
|
| - WriteReadingFieldToFile(temp_sensor_file2, value2);
|
| - WriteReadingFieldToFile(temp_sensor_file3, value3);
|
| + // Write values to the files.
|
| + WriteValueToFile(temp_sensor_file1, value1);
|
| + WriteValueToFile(temp_sensor_file2, value2);
|
| + WriteValueToFile(temp_sensor_file3, value3);
|
|
|
| // Fill SensorReading's values with data from files.
|
| SensorReading reading;
|
| @@ -234,7 +290,8 @@ TEST_F(SensorReaderTest, SensorReadFilesDoNotExist) {
|
|
|
| // Initialize sensor data for a reader.
|
| SensorDataLinux sensor_data;
|
| - InitSensorDataForTest(rows, &sensor_data);
|
| + SensorDataLinux::ReaderFunctor empty_func;
|
| + InitSensorDataForTest(rows, empty_func, &sensor_data);
|
|
|
| std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| EXPECT_FALSE(reader);
|
| @@ -257,4 +314,59 @@ TEST_F(SensorReaderTest, SensorReadFilesDoNotExist) {
|
| EXPECT_TRUE(reader);
|
| }
|
|
|
| +// Fill in SensorDataLinux with three arrays of files that must be found
|
| +// before creating a sensor reader. Create a file with a scaling value that
|
| +// must be applied. Pass a func to a SensorReader that will be used to
|
| +// apply scalings.
|
| +TEST_F(SensorReaderTest, CheckSensorReadingScalingApplied) {
|
| + const size_t rows = 3;
|
| + const double value1 = 20;
|
| + const double value2 = 50;
|
| + const double value3 = 80;
|
| + const double scaling_value = 0.1234;
|
| + // Create a file with a scaling value, which must be found.
|
| + base::FilePath temp_sensor_scale_file =
|
| + sensors_dir_.Append(kTestSensorFileNameScaling);
|
| + CreateFile(temp_sensor_scale_file);
|
| +
|
| + // Create a test sensor file, which must be found. Other
|
| + // files will not be created and the test must fail to create a reader.
|
| + base::FilePath temp_sensor_file1 = sensors_dir_.Append(kSensorFileNameTest1);
|
| + CreateFile(temp_sensor_file1);
|
| +
|
| + // Create one more file. The reader mustn't be created as long as it
|
| + // expects three files to be found.
|
| + base::FilePath temp_sensor_file2 = sensors_dir_.Append(kSensorFileNameTest2);
|
| + CreateFile(temp_sensor_file2);
|
| +
|
| + // Create last file.
|
| + base::FilePath temp_sensor_file3 = sensors_dir_.Append(kSensorFileNameTest3);
|
| + CreateFile(temp_sensor_file3);
|
| +
|
| + // Write value to the files.
|
| + WriteValueToFile(temp_sensor_file1, value1);
|
| + WriteValueToFile(temp_sensor_file2, value2);
|
| + WriteValueToFile(temp_sensor_file3, value3);
|
| + WriteValueToFile(temp_sensor_scale_file, scaling_value);
|
| +
|
| + // Initialize sensor data for a reader.
|
| + SensorDataLinux sensor_data;
|
| + SensorDataLinux::ReaderFunctor apply_scaling_func =
|
| + base::Bind([](double scaling_value_in_reader, SensorReading& reading) {
|
| + reading.values[0] = scaling_value_in_reader * reading.values[0];
|
| + reading.values[1] = -scaling_value_in_reader * reading.values[1];
|
| + reading.values[2] = scaling_value_in_reader * reading.values[2];
|
| + });
|
| + InitSensorDataForTest(rows, apply_scaling_func, &sensor_data);
|
| +
|
| + std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
|
| + EXPECT_TRUE(reader);
|
| +
|
| + // Fill SensorReading's values with data from files.
|
| + SensorReading reading;
|
| + EXPECT_TRUE(reader->ReadSensorReading(&reading));
|
| + CheckSensorDataFields(reading, value1 * scaling_value,
|
| + value2 * (-scaling_value), value3 * scaling_value);
|
| +}
|
| +
|
| } // namespace device
|
|
|