blob: b3d9f2ca25cff99dc9715f67f04c114892dccd69 [file] [log] [blame]
// Copyright 2022 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/mkbp_wake_mask_command.h"
namespace ec {
namespace {
using ::testing::Return;
TEST(MkbpWakeMaskCommand, MkbpWakeMaskCommandGet) {
// Constructor for getting values.
MkbpWakeMaskCommand cmd(EC_MKBP_HOST_EVENT_WAKE_MASK);
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, GET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_HOST_EVENT_WAKE_MASK);
}
TEST(MkbpWakeMaskCommand, MkbpWakeMaskCommandSet) {
MkbpWakeMaskCommand cmd(EC_MKBP_HOST_EVENT_WAKE_MASK,
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_CLOSED));
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, SET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_HOST_EVENT_WAKE_MASK);
EXPECT_EQ(cmd.Req()->new_wake_mask, 1);
}
TEST(MkbpWakeMaskHostEventCommand, MkbpWakeMaskHostEventCommandGet) {
MkbpWakeMaskHostEventCommand cmd;
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, GET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_HOST_EVENT_WAKE_MASK);
}
TEST(MkbpWakeMaskHostEventCommand, MkbpWakeMaskHostEventCommandSet) {
MkbpWakeMaskHostEventCommand cmd(
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_CLOSED));
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, SET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_HOST_EVENT_WAKE_MASK);
EXPECT_EQ(cmd.Req()->new_wake_mask, 1);
}
TEST(MkbpWakeMaskEventCommand, MkbpWakeMaskEventCommandGet) {
MkbpWakeMaskEventCommand cmd;
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, GET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_EVENT_WAKE_MASK);
}
TEST(MkbpWakeMaskEventCommand, MkbpWakeMaskEventCommandSet) {
MkbpWakeMaskEventCommand cmd(EC_HOST_EVENT_MASK(EC_MKBP_EVENT_BUTTON));
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_MKBP_WAKE_MASK);
EXPECT_EQ(cmd.Req()->action, SET_WAKE_MASK);
EXPECT_EQ(cmd.Req()->mask_type, EC_MKBP_EVENT_WAKE_MASK);
EXPECT_EQ(cmd.Req()->new_wake_mask, 4);
}
// Mock the underlying EcCommand to test.
class MkbpWakeMaskCommandTest : public testing::Test {
public:
class MockMkbpWakeMaskCommand : public MkbpWakeMaskCommand {
public:
using MkbpWakeMaskCommand::MkbpWakeMaskCommand;
MOCK_METHOD(const struct ec_response_mkbp_event_wake_mask*,
Resp,
(),
(const, override));
};
};
TEST_F(MkbpWakeMaskCommandTest, Success) {
MockMkbpWakeMaskCommand mock_command(EC_MKBP_HOST_EVENT_WAKE_MASK);
struct ec_response_mkbp_event_wake_mask response = {
.wake_mask = EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN)};
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_EQ(mock_command.GetWakeMask(), 2);
}
// Mock the underlying EcCommand to test.
class MkbpWakeMaskHostEventCommandTest : public testing::Test {
public:
class MockMkbpWakeMaskHostEventCommand : public MkbpWakeMaskHostEventCommand {
public:
using MkbpWakeMaskHostEventCommand::MkbpWakeMaskHostEventCommand;
MOCK_METHOD(const struct ec_response_mkbp_event_wake_mask*,
Resp,
(),
(const, override));
};
};
TEST_F(MkbpWakeMaskHostEventCommandTest, Success) {
MockMkbpWakeMaskHostEventCommand mock_command;
struct ec_response_mkbp_event_wake_mask response = {
.wake_mask = EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN)};
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_TRUE(mock_command.IsEnabled(EC_HOST_EVENT_LID_OPEN));
EXPECT_FALSE(mock_command.IsEnabled(EC_HOST_EVENT_LID_CLOSED));
EXPECT_EQ(mock_command.GetWakeMask(), 2);
}
// Mock the underlying EcCommand to test.
class MkbpWakeMaskEventCommandTest : public testing::Test {
public:
class MockMkbpWakeMaskEventCommand : public MkbpWakeMaskEventCommand {
public:
using MkbpWakeMaskEventCommand::MkbpWakeMaskEventCommand;
MOCK_METHOD(const struct ec_response_mkbp_event_wake_mask*,
Resp,
(),
(const, override));
};
};
TEST_F(MkbpWakeMaskEventCommandTest, Success) {
MockMkbpWakeMaskEventCommand mock_command;
struct ec_response_mkbp_event_wake_mask response = {
.wake_mask = EC_HOST_EVENT_MASK(EC_MKBP_EVENT_SWITCH)};
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_TRUE(mock_command.IsEnabled(EC_MKBP_EVENT_SWITCH));
EXPECT_FALSE(mock_command.IsEnabled(EC_MKBP_EVENT_FINGERPRINT));
EXPECT_EQ(mock_command.GetWakeMask(), 8);
}
} // namespace
} // namespace ec