blob: eb2b4580c1787826e6772fc5ecb21fbc88ec19c6 [file] [log] [blame]
Enrico Granata60b1cbc2019-05-20 11:06:46 -07001// Copyright 2019 The Chromium OS 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 "mems_setup/test_helper.h"
6
Enrico Granata9bb17522019-06-28 17:22:42 -07007using libmems::fakes::FakeIioChannel;
8using libmems::fakes::FakeIioContext;
9using libmems::fakes::FakeIioDevice;
10using mems_setup::fakes::FakeDelegate;
Enrico Granata60b1cbc2019-05-20 11:06:46 -070011
12namespace mems_setup {
13namespace testing {
14
Enrico Granata9bb17522019-06-28 17:22:42 -070015bool FakeSysfsTrigger::WriteNumberAttribute(const std::string& name,
Enrico Granata60b1cbc2019-05-20 11:06:46 -070016 int64_t value) {
Enrico Granata9bb17522019-06-28 17:22:42 -070017 bool ok = this->FakeIioDevice::WriteNumberAttribute(name, value);
Enrico Granata60b1cbc2019-05-20 11:06:46 -070018 if (ok && name == "add_trigger" && value == 0) {
Gwendal Grignou1a663372020-01-24 09:36:49 -080019 mock_context_->AddTrigger(mock_trigger_);
Enrico Granata60b1cbc2019-05-20 11:06:46 -070020 }
21 return ok;
22}
23
Harvey Yang0c0dab52019-11-18 12:04:30 +080024SensorTestBase::SensorTestBase(const char* name, int id, SensorKind kind)
Enrico Granata9bb17522019-06-28 17:22:42 -070025 : mock_context_(new FakeIioContext),
26 mock_delegate_(new FakeDelegate),
Enrico Granata60b1cbc2019-05-20 11:06:46 -070027 mock_device_(
Enrico Granata9bb17522019-06-28 17:22:42 -070028 std::make_unique<FakeIioDevice>(mock_context_.get(), name, id)),
Harvey Yangfc9178f2020-03-16 14:26:53 +080029 mock_calib_channel_(
30 std::make_unique<FakeIioChannel>("calibration", false)),
31 mock_trigger1_(std::make_unique<FakeIioDevice>(
32 mock_context_.get(), "sysfstrig0", 1)),
Enrico Granata9bb17522019-06-28 17:22:42 -070033 mock_sysfs_trigger_(std::make_unique<FakeSysfsTrigger>(
Gwendal Grignou1a663372020-01-24 09:36:49 -080034 mock_context_.get(), mock_trigger1_.get())),
Enrico Granata60b1cbc2019-05-20 11:06:46 -070035 sensor_kind_(kind) {
36 mock_context_->AddDevice(mock_device_.get());
Harvey Yangfc9178f2020-03-16 14:26:53 +080037 mock_device_->AddChannel(mock_calib_channel_.get());
Harvey Yang0c0dab52019-11-18 12:04:30 +080038 mock_context_->AddTrigger(mock_sysfs_trigger_.get());
Enrico Granata60b1cbc2019-05-20 11:06:46 -070039}
40
41void SensorTestBase::SetSingleSensor(const char* location) {
42 mock_device_->WriteStringAttribute("location", location);
Enrico Granata064a25c2019-07-15 15:48:03 -070043
44 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
45 channels_.push_back(std::make_unique<FakeIioChannel>("accel_x", false));
46 channels_.push_back(std::make_unique<FakeIioChannel>("accel_y", false));
47 channels_.push_back(std::make_unique<FakeIioChannel>("accel_z", false));
48
49 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080050 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
51 channels_.push_back(std::make_unique<FakeIioChannel>("anglvel_x", false));
52 channels_.push_back(std::make_unique<FakeIioChannel>("anglvel_y", false));
53 channels_.push_back(std::make_unique<FakeIioChannel>("anglvel_z", false));
54
55 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
56 } else if (sensor_kind_ == SensorKind::LIGHT) {
57 channels_.push_back(std::make_unique<FakeIioChannel>("illuminance", false));
58
59 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -070060 }
61
Harvey Yangfc9178f2020-03-16 14:26:53 +080062 for (const auto& channel : channels_)
Enrico Granata064a25c2019-07-15 15:48:03 -070063 mock_device_->AddChannel(channel.get());
Enrico Granata064a25c2019-07-15 15:48:03 -070064}
65
66void SensorTestBase::SetSharedSensor() {
67 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
68 channels_.push_back(
69 std::make_unique<FakeIioChannel>("accel_x_base", false));
70 channels_.push_back(
71 std::make_unique<FakeIioChannel>("accel_y_base", false));
72 channels_.push_back(
73 std::make_unique<FakeIioChannel>("accel_z_base", false));
74
75 channels_.push_back(std::make_unique<FakeIioChannel>("accel_x_lid", false));
76 channels_.push_back(std::make_unique<FakeIioChannel>("accel_y_lid", false));
77 channels_.push_back(std::make_unique<FakeIioChannel>("accel_z_lid", false));
78
79 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080080 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
81 channels_.push_back(
82 std::make_unique<FakeIioChannel>("anglvel_x_base", false));
83 channels_.push_back(
84 std::make_unique<FakeIioChannel>("anglvel_y_base", false));
85 channels_.push_back(
86 std::make_unique<FakeIioChannel>("anglvel_z_base", false));
87
88 channels_.push_back(
89 std::make_unique<FakeIioChannel>("anglvel_x_lid", false));
90 channels_.push_back(
91 std::make_unique<FakeIioChannel>("anglvel_y_lid", false));
92 channels_.push_back(
93 std::make_unique<FakeIioChannel>("anglvel_z_lid", false));
94
95 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -070096 }
97
Harvey Yangfc9178f2020-03-16 14:26:53 +080098 for (const auto& channel : channels_)
Enrico Granata064a25c2019-07-15 15:48:03 -070099 mock_device_->AddChannel(channel.get());
Harvey Yangfc9178f2020-03-16 14:26:53 +0800100}
101
102void SensorTestBase::SetColorLightSensor() {
103 if (sensor_kind_ != SensorKind::LIGHT)
104 return;
105
106 channels_.push_back(std::make_unique<FakeIioChannel>("illuminance", false));
107 channels_.push_back(
108 std::make_unique<FakeIioChannel>("illuminance_red", false));
109 channels_.push_back(
110 std::make_unique<FakeIioChannel>("illuminance_green", false));
111 channels_.push_back(
112 std::make_unique<FakeIioChannel>("illuminance_blue", false));
113
114 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
115
116 for (const auto& channel : channels_)
117 mock_device_->AddChannel(channel.get());
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700118}
119
120void SensorTestBase::ConfigureVpd(
121 std::initializer_list<std::pair<const char*, const char*>> values) {
122 for (const auto& value : values) {
123 mock_delegate_->SetVpdValue(value.first, value.second);
124 }
125}
126
127Configuration* SensorTestBase::GetConfiguration() {
128 if (config_ == nullptr) {
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800129 config_.reset(new Configuration(mock_context_.get(), mock_device_.get(),
130 sensor_kind_, mock_delegate_.get()));
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700131 }
132
133 return config_.get();
134}
135
136} // namespace testing
137} // namespace mems_setup