Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: device/generic_sensor/iio/sensor_reader_unittest.cc

Issue 2370343002: [sensors] Ambient light sensor implementation for ChromeOS and Linux. (Closed)
Patch Set: fixed comment Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/files/file_util.h"
6 #include "base/files/scoped_temp_dir.h"
7 #include "base/strings/string_number_conversions.h"
8
9 #include "device/generic_sensor/iio/platform_sensor_utils_iio.h"
10 #include "device/generic_sensor/iio/sensor_data_iio.h"
11
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace device {
15
16 namespace {
17
18 const base::FilePath::CharType* kBaseSensorFilesDirTest =
19 FILE_PATH_LITERAL("/tmp/.org.chromium.generic_sensor_test/");
20
21 const base::FilePath::CharType* kDevice0Dir = FILE_PATH_LITERAL("device0");
22
23 const char* kSensorFileNameTest1 = "sensor_data1";
Mikhail 2016/10/18 11:37:21 nit: const char kSensorFileNameTest1[]
maksims (do not use this acc) 2016/10/19 06:57:09 Done.
24 const char* kSensorFileNameTest2 = "sensor_data2";
25 const char* kSensorFileNameTest3 = "sensor_data3";
26
27 const char* kTestSensorFileNamesTest[][5] = {
28 {
29 kSensorFileNameTest1, "sensor1_input", "sensor1_raw_input", "sensor1",
30 "sensor1_data_raw",
31 },
32 {
33 "sensor2", kSensorFileNameTest2, "sensor2_raw_input", "sensor2_input",
34 "sensor2_data_raw",
35 },
36 {
37 "sensor3", "sensor3_input", "sensor3_raw_input", "sensor3_data_raw",
38 kSensorFileNameTest3,
39 },
40 };
41
42 void CreateFile(const base::FilePath& file) {
43 EXPECT_EQ(base::WriteFile(file, NULL, 0), 0);
44 }
45
46 void DeleteFile(const base::FilePath& file) {
47 EXPECT_TRUE(base::DeleteFile(file, false));
48 }
49
50 void WriteStringToFile(const base::FilePath& path,
51 const base::StringPiece& str) {
52 int bytes_written = base::WriteFile(path, str.data(), str.size());
53 EXPECT_EQ(static_cast<size_t>(bytes_written), str.size());
54 }
55
56 } // namespace
57
58 class SensorReaderTest : public ::testing::Test {
59 public:
60 void SetUp() override {
61 base::FilePath path(kBaseSensorFilesDirTest);
62 base::FilePath sensors_dir = path.Append(kDevice0Dir);
63 ASSERT_TRUE(temp_dir_.Set(sensors_dir));
64 }
65
66 void TearDown() override {
67 // Delete //device0 folder.
68 ASSERT_TRUE(temp_dir_.Delete());
69 // Delete base folder.
70 base::FilePath path(kBaseSensorFilesDirTest);
71 ASSERT_TRUE(temp_dir_.Set(path));
Mikhail 2016/10/18 11:37:21 CreateUniqueTempDir() API looks more appropriate h
maksims (do not use this acc) 2016/10/19 06:57:09 Why??? I have a dir which lookis like /tmp/.org.ch
72 ASSERT_TRUE(temp_dir_.Delete());
73 }
74
75 void InitSensorDataForTest(size_t rows, SensorDataIio* data) {
76 // Corresponds to maximum values in SensorReading.
77 // We must read only from up to three files. Thus - 3 sets of files
78 // should be fill in here.
79 const size_t max_rows = 3;
80 if (rows > 3)
81 rows = max_rows;
82
83 data->base_path_sensor_iio = kBaseSensorFilesDirTest;
84 for (size_t i = 0; i < rows; ++i) {
85 data->sensor_file_names[i] = &kTestSensorFileNamesTest[i][0];
86 }
87 data->sensor_file_names_cols = arraysize(*kTestSensorFileNamesTest);
88 data->sensor_file_names_rows = rows;
89 }
90
91 void CheckSensorDataFields(const SensorReading& data,
92 std::string value1,
Mikhail 2016/10/18 11:37:21 let's make it accept doubles
93 std::string value2,
94 std::string value3) {
95 EXPECT_EQ(value1, base::DoubleToString(data.values[0]));
96 EXPECT_EQ(value2, base::DoubleToString(data.values[1]));
97 EXPECT_EQ(value3, base::DoubleToString(data.values[2]));
98 }
99
100 protected:
101 base::ScopedTempDir temp_dir_;
102 };
103
104 TEST_F(SensorReaderTest, FileDoesNotExist) {
105 const char* kGiberishFiles[] = {"temp1", "temp2", "temp3", "temp4"};
106 const size_t rows = 3;
107 // Create some giberish files that we are not interested in.
108 base::FilePath sensors_dir = temp_dir_.GetPath();
109 for (unsigned int i = 0; i < arraysize(kGiberishFiles); ++i) {
110 base::FilePath some_file = sensors_dir.Append(kGiberishFiles[i]);
111 CreateFile(some_file);
112 }
113
114 SensorDataIio sensor_data;
115 InitSensorDataForTest(rows, &sensor_data);
116
117 std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
118 EXPECT_FALSE(reader);
119 }
120
121 TEST_F(SensorReaderTest, ReadValueFromOneFile) {
122 const size_t rows = 1;
123 const std::string value1 = "20";
124 const std::string zero_value = "0";
125 // Get sensors dir, which looks like
126 // /tmp/.org.chromium.generic_sensor_test/device0
127 base::FilePath sensors_dir = temp_dir_.GetPath();
128 // Create a test sensor file, which must be found to be read from.
129 base::FilePath temp_sensor_file = sensors_dir.Append(kSensorFileNameTest1);
130 CreateFile(temp_sensor_file);
131
132 // Initialize sensor data for a reader.
133 SensorDataIio sensor_data;
134 InitSensorDataForTest(rows, &sensor_data);
135
136 std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
137 EXPECT_TRUE(reader);
138
139 // Write a value to the file.
140 WriteStringToFile(temp_sensor_file, value1);
141
142 // Fill SensorReading's first field with read value. Other fields must
143 // be 0.
144 SensorReading reading;
145 EXPECT_TRUE(reader->ReadSensorReading(&reading));
146 CheckSensorDataFields(reading, value1, zero_value, zero_value);
147 }
148
149 TEST_F(SensorReaderTest, ReadValuesFromTwoFiles) {
150 const size_t rows = 2;
151 const std::string value1 = "20";
152 const std::string value2 = "50";
153 const std::string zero_value = "0";
154 // Get sensors dir, which looks like
155 // /tmp/.org.chromium.generic_sensor_test/device0
156 base::FilePath sensors_dir = temp_dir_.GetPath();
157 // Create a test sensor file, which must be found.
158 base::FilePath temp_sensor_file1 = sensors_dir.Append(kSensorFileNameTest1);
159 CreateFile(temp_sensor_file1);
160
161 // Create another test sensor file, which must be found.
162 base::FilePath temp_sensor_file2 = sensors_dir.Append(kSensorFileNameTest2);
163 CreateFile(temp_sensor_file2);
164
165 // Initialize sensor data for a reader.
166 SensorDataIio sensor_data;
167 InitSensorDataForTest(rows, &sensor_data);
168
169 std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
170 EXPECT_TRUE(reader);
171
172 // Write a value to the file.
173 WriteStringToFile(temp_sensor_file1, value1);
174 WriteStringToFile(temp_sensor_file2, value2);
175
176 // Fill SensorReading's two first fields with read value. Last field must
177 // be 0.
178 SensorReading reading;
179 EXPECT_TRUE(reader->ReadSensorReading(&reading));
180 CheckSensorDataFields(reading, value1, value2, zero_value);
181 }
182
183 TEST_F(SensorReaderTest, ReadValuesFromThreeFilesAndFail) {
184 const size_t rows = 4;
185 const std::string value1 = "20";
Mikhail 2016/10/18 11:37:21 double (and in other places)
maksims (do not use this acc) 2016/10/19 06:57:09 Done.
186 const std::string value2 = "50";
187 const std::string value3 = "80";
188 const std::string zero_value = "0";
189 // Get sensors dir, which looks like
190 // /tmp/.org.chromium.generic_sensor_test/device0
191 base::FilePath sensors_dir = temp_dir_.GetPath();
192 // Create a test sensor file, which must be found.
193 base::FilePath temp_sensor_file1 = sensors_dir.Append(kSensorFileNameTest1);
194 CreateFile(temp_sensor_file1);
195
196 // Create another test sensor file, which must be found.
197 base::FilePath temp_sensor_file2 = sensors_dir.Append(kSensorFileNameTest2);
198 CreateFile(temp_sensor_file2);
199
200 // Create third test sensor file, which must be found.
201 base::FilePath temp_sensor_file3 = sensors_dir.Append(kSensorFileNameTest3);
202 CreateFile(temp_sensor_file3);
203
204 // Initialize sensor data for a reader.
205 SensorDataIio sensor_data;
206 InitSensorDataForTest(rows, &sensor_data);
207
208 std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
209 EXPECT_TRUE(reader);
210
211 // Write a value to the file.
212 WriteStringToFile(temp_sensor_file1, value1);
Mikhail 2016/10/18 11:37:21 WriteReadingFieldToFile(file, double)
maksims (do not use this acc) 2016/10/19 06:57:09 Done.
213 WriteStringToFile(temp_sensor_file2, value2);
214 WriteStringToFile(temp_sensor_file3, value3);
215
216 // Fill SensorReading's values with data from files.
217 SensorReading reading;
218 EXPECT_TRUE(reader->ReadSensorReading(&reading));
219 CheckSensorDataFields(reading, value1, value2, value3);
220
221 SensorReading reading2;
222 DeleteFile(temp_sensor_file2);
223 EXPECT_FALSE(reader->ReadSensorReading(&reading2));
224 CheckSensorDataFields(reading2, zero_value, zero_value, zero_value);
225 }
226
227 TEST_F(SensorReaderTest, SensorReadFilesDoNotExist) {
228 const size_t rows = 3;
229 // Get sensors dir, which looks like
230 // /tmp/.org.chromium.generic_sensor_test/device0
231 base::FilePath sensors_dir = temp_dir_.GetPath();
232 // Create a test sensor file, which must be found. Other
233 // files will not be created and the test must fail to create a reader.
234 base::FilePath temp_sensor_file1 = sensors_dir.Append(kSensorFileNameTest1);
235 CreateFile(temp_sensor_file1);
236
237 // Initialize sensor data for a reader.
238 SensorDataIio sensor_data;
239 InitSensorDataForTest(rows, &sensor_data);
240
241 std::unique_ptr<SensorReader> reader = SensorReader::Create(sensor_data);
242 EXPECT_FALSE(reader);
243
244 // Create one more file. The reader mustn't be created as long as it
245 // expects three files to be found.
246 base::FilePath temp_sensor_file2 = sensors_dir.Append(kSensorFileNameTest2);
247 CreateFile(temp_sensor_file2);
248
249 reader.reset();
250 reader = SensorReader::Create(sensor_data);
251 EXPECT_FALSE(reader);
252
253 // Create last file.
254 base::FilePath temp_sensor_file3 = sensors_dir.Append(kSensorFileNameTest3);
255 CreateFile(temp_sensor_file3);
256
257 reader.reset();
258 reader = SensorReader::Create(sensor_data);
259 EXPECT_TRUE(reader);
260 }
261
262 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698