blob: 16f7c8387388cf9e0f187161cce659d9e55c59c2 [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)),
Gwendal Grignou1a663372020-01-24 09:36:49 -080029 mock_trigger1_(
30 std::make_unique<FakeIioDevice>(mock_context_.get(),
31 "sysfstrig0", 1)),
Enrico Granata9bb17522019-06-28 17:22:42 -070032 mock_sysfs_trigger_(std::make_unique<FakeSysfsTrigger>(
Gwendal Grignou1a663372020-01-24 09:36:49 -080033 mock_context_.get(), mock_trigger1_.get())),
Enrico Granata60b1cbc2019-05-20 11:06:46 -070034 sensor_kind_(kind) {
35 mock_context_->AddDevice(mock_device_.get());
Gwendal Grignou7397fe72019-11-18 10:03:59 -080036 mock_device_->AddChannel(new FakeIioChannel("calibration", false));
Harvey Yang0c0dab52019-11-18 12:04:30 +080037 mock_context_->AddTrigger(mock_sysfs_trigger_.get());
Enrico Granata60b1cbc2019-05-20 11:06:46 -070038}
39
40void SensorTestBase::SetSingleSensor(const char* location) {
41 mock_device_->WriteStringAttribute("location", location);
Enrico Granata064a25c2019-07-15 15:48:03 -070042
43 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
44 channels_.push_back(std::make_unique<FakeIioChannel>("accel_x", false));
45 channels_.push_back(std::make_unique<FakeIioChannel>("accel_y", false));
46 channels_.push_back(std::make_unique<FakeIioChannel>("accel_z", false));
47
48 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
49 }
50
51 for (const auto& channel : channels_) {
52 mock_device_->AddChannel(channel.get());
53 }
54}
55
56void SensorTestBase::SetSharedSensor() {
57 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
58 channels_.push_back(
59 std::make_unique<FakeIioChannel>("accel_x_base", false));
60 channels_.push_back(
61 std::make_unique<FakeIioChannel>("accel_y_base", false));
62 channels_.push_back(
63 std::make_unique<FakeIioChannel>("accel_z_base", false));
64
65 channels_.push_back(std::make_unique<FakeIioChannel>("accel_x_lid", false));
66 channels_.push_back(std::make_unique<FakeIioChannel>("accel_y_lid", false));
67 channels_.push_back(std::make_unique<FakeIioChannel>("accel_z_lid", false));
68
69 channels_.push_back(std::make_unique<FakeIioChannel>("timestamp", true));
70 }
71
72 for (const auto& channel : channels_) {
73 mock_device_->AddChannel(channel.get());
74 }
Enrico Granata60b1cbc2019-05-20 11:06:46 -070075}
76
77void SensorTestBase::ConfigureVpd(
78 std::initializer_list<std::pair<const char*, const char*>> values) {
79 for (const auto& value : values) {
80 mock_delegate_->SetVpdValue(value.first, value.second);
81 }
82}
83
84Configuration* SensorTestBase::GetConfiguration() {
85 if (config_ == nullptr) {
Gwendal Grignouba911fe2019-12-08 17:14:53 -080086 config_.reset(new Configuration(mock_context_.get(), mock_device_.get(),
87 sensor_kind_, mock_delegate_.get()));
Enrico Granata60b1cbc2019-05-20 11:06:46 -070088 }
89
90 return config_.get();
91}
92
93} // namespace testing
94} // namespace mems_setup