blob: 7d572bfc1fc51d48107aea1edddc3faa703c00a3 [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "libec/device_event_command.h"
namespace ec {
namespace {
using ::testing::Return;
TEST(DeviceEventCommand, DeviceEventCommandGet) {
// Constructor for getting values.
DeviceEventCommand cmd(false);
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_DEVICE_EVENT);
EXPECT_EQ(cmd.Req()->param, EC_DEVICE_EVENT_PARAM_GET_ENABLED_EVENTS);
EXPECT_EQ(cmd.Req()->event_mask, 0);
}
TEST(DeviceEventCommand, DeviceEventCommandGetAndClear) {
// Constructor for getting values.
DeviceEventCommand cmd(true);
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_DEVICE_EVENT);
EXPECT_EQ(cmd.Req()->param, EC_DEVICE_EVENT_PARAM_GET_CURRENT_EVENTS);
EXPECT_EQ(cmd.Req()->event_mask, 0);
}
TEST(DeviceEventCommand, DeviceEventCommandEnableTrackpad) {
// Constructor for setting values.
DeviceEventCommand cmd(EC_DEVICE_EVENT_TRACKPAD, true,
EC_DEVICE_EVENT_MASK(EC_DEVICE_EVENT_DSP));
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_DEVICE_EVENT);
EXPECT_EQ(cmd.Req()->param, EC_DEVICE_EVENT_PARAM_SET_ENABLED_EVENTS);
EXPECT_EQ(cmd.Req()->event_mask, 3);
}
TEST(DeviceEventCommand, DeviceEventCommandDisableTrackpad) {
// Constructor for setting values.
DeviceEventCommand cmd(EC_DEVICE_EVENT_TRACKPAD, false,
EC_DEVICE_EVENT_MASK(EC_DEVICE_EVENT_TRACKPAD));
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_DEVICE_EVENT);
EXPECT_EQ(cmd.Req()->param, EC_DEVICE_EVENT_PARAM_SET_ENABLED_EVENTS);
EXPECT_EQ(cmd.Req()->event_mask, 0);
}
// Mock the underlying EcCommand to test.
class DeviceEventCommandTest : public testing::Test {
public:
class MockDeviceEventCommand : public DeviceEventCommand {
public:
using DeviceEventCommand::DeviceEventCommand;
MOCK_METHOD(const struct ec_response_device_event*,
Resp,
(),
(const, override));
};
};
TEST_F(DeviceEventCommandTest, Success) {
MockDeviceEventCommand mock_command(false);
struct ec_response_device_event response = {
.event_mask = EC_DEVICE_EVENT_MASK(EC_DEVICE_EVENT_WLC)};
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_TRUE(mock_command.IsEnabled(EC_DEVICE_EVENT_WLC));
EXPECT_FALSE(mock_command.IsEnabled(EC_DEVICE_EVENT_TRACKPAD));
EXPECT_FALSE(mock_command.IsEnabled(EC_DEVICE_EVENT_DSP));
EXPECT_FALSE(mock_command.IsEnabled(EC_DEVICE_EVENT_WIFI));
EXPECT_EQ(mock_command.GetMask(), 8);
}
} // namespace
} // namespace ec