blob: 944e9218dbbe3f237d3cd4c9636686431fd43183 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// 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/get_features_command.h"
namespace ec {
namespace {
using ::testing::Return;
TEST(GetFeaturesCommand, GetFeaturesCommand) {
GetFeaturesCommand cmd;
EXPECT_EQ(cmd.Version(), 0);
EXPECT_EQ(cmd.Command(), EC_CMD_GET_FEATURES);
}
// Mock the underlying EcCommand to test.
class GetFeaturesCommandTest : public testing::Test {
public:
class MockGetFeaturesCommand : public GetFeaturesCommand {
public:
using GetFeaturesCommand::GetFeaturesCommand;
MOCK_METHOD(const struct ec_response_get_features*,
Resp,
(),
(const, override));
};
};
TEST_F(GetFeaturesCommandTest, IsFeatureSupported) {
MockGetFeaturesCommand mock_command;
struct ec_response_get_features response {};
response.flags[0] = EC_FEATURE_MASK_0(ec_feature_code::EC_FEATURE_FLASH);
response.flags[1] = EC_FEATURE_MASK_1(ec_feature_code::EC_FEATURE_EFS2);
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_TRUE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_FLASH));
EXPECT_TRUE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_EFS2));
EXPECT_FALSE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_LED));
EXPECT_FALSE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_SCP));
}
TEST_F(GetFeaturesCommandTest, IsFeatureSupported_TwoFeatures) {
MockGetFeaturesCommand mock_command;
struct ec_response_get_features response {};
response.flags[0] = EC_FEATURE_MASK_0(ec_feature_code::EC_FEATURE_FLASH) |
EC_FEATURE_MASK_0(ec_feature_code::EC_FEATURE_LED);
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_TRUE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_FLASH));
EXPECT_TRUE(mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_LED));
}
TEST_F(GetFeaturesCommandTest, IsFeatureSupported_FeaturesEqualMod32) {
MockGetFeaturesCommand mock_command;
struct ec_response_get_features response {};
response.flags[0] = EC_FEATURE_MASK_0(ec_feature_code::EC_FEATURE_FLASH);
EXPECT_CALL(mock_command, Resp).WillRepeatedly(Return(&response));
EXPECT_EQ(ec_feature_code::EC_FEATURE_FLASH, 1);
EXPECT_EQ(ec_feature_code::EC_FEATURE_HOST_EVENT64, 33);
EXPECT_TRUE(
mock_command.IsFeatureSupported(ec_feature_code::EC_FEATURE_FLASH));
// EC_FEATURE_FLASH = 1 and EC_FEATURE_HOST_EVENT64 = 33. Make sure that the
// two are not treated the same since (33 % 32) = 1.
EXPECT_FALSE(mock_command.IsFeatureSupported(
ec_feature_code::EC_FEATURE_HOST_EVENT64));
}
} // namespace
} // namespace ec