blob: fc2661433eda1f513c17f250fb1df1acc887ddfd [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 <algorithm>
#include <array>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <gtest/gtest.h>
#include "libec/ec_command.h"
#include "libec/rgb_keyboard_command.h"
namespace ec {
namespace {
TEST(RgbkbdSetColorCommand, HeaderSize) {
EXPECT_EQ(sizeof(rgb_keyboard::Header), sizeof(ec_params_rgbkbd_set_color));
}
TEST(RgbkbdSetColorCommand, RgbkbdSetColorCommandSingle) {
const std::vector<struct rgb_s> expected = {
{.r = 0xaa, .g = 0xbb, .b = 0xcc},
};
uint8_t start_key = 0xdd;
RgbkbdSetColorCommand cmd(start_key, expected);
EXPECT_EQ(cmd.Command(), EC_CMD_RGBKBD_SET_COLOR);
EXPECT_GE(cmd.Version(), 0);
EXPECT_EQ(cmd.Req()->req.start_key, start_key);
EXPECT_EQ(cmd.Req()->req.length, expected.size());
EXPECT_EQ(cmd.Req()->color[0].r, expected[0].r);
EXPECT_EQ(cmd.Req()->color[0].g, expected[0].g);
EXPECT_EQ(cmd.Req()->color[0].b, expected[0].b);
}
TEST(RgbkbdSetColorCommand, RgbkbdSetColorCommandMultiple) {
std::vector<struct rgb_s> color;
std::array<struct rgb_s, 128> expected;
uint8_t start_key = 0;
for (int i = 0; i < expected.size(); i++) {
expected[i].r = std::rand() & 0xff;
expected[i].g = std::rand() & 0xff;
expected[i].b = std::rand() & 0xff;
}
std::copy(expected.begin(), expected.end(), std::back_inserter(color));
RgbkbdSetColorCommand cmd(start_key, color);
EXPECT_EQ(cmd.Command(), EC_CMD_RGBKBD_SET_COLOR);
EXPECT_GE(cmd.Version(), 0);
EXPECT_EQ(cmd.Req()->req.start_key, start_key);
EXPECT_EQ(cmd.Req()->req.length, expected.size());
EXPECT_EQ(std::memcmp(&cmd.Req()->color[0], &expected[0],
expected.size() * sizeof(expected[0])),
0);
}
} // namespace
} // namespace ec