blob: 1d6dfb9d8985a33b9a5fcfd65c587021e1fae457 [file] [log] [blame]
// Copyright 2023 The Fuchsia 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 <list>
#include <efi/variable/variable.h>
#include <fbl/vector.h>
#include <gtest/gtest.h>
namespace fbl {
template <typename T>
inline bool operator==(const Vector<T>& a, const Vector<T>& b) {
return std::equal(a.begin(), a.end(), b.begin(), b.end());
}
} // namespace fbl
namespace {
using ::testing::Test;
using namespace efi;
class VariableFixture : public ::testing::TestWithParam<Variable> {};
TEST_P(VariableFixture, VariableValueCopy) {
Variable input = GetParam();
const VariableValue& src = input.value;
const VariableValue dst = Copy(src);
EXPECT_EQ(src, dst);
}
TEST_P(VariableFixture, Constructor) {
Variable input = GetParam();
Variable variable(input.id, input.value);
EXPECT_EQ(variable.id, input.id);
EXPECT_EQ(variable.value, input.value);
}
TEST_P(VariableFixture, CopyConstructor) {
Variable input = GetParam();
Variable variable(input);
EXPECT_EQ(variable.id, input.id);
EXPECT_EQ(variable.value, input.value);
}
TEST_P(VariableFixture, MoveConstructor) {
Variable input = GetParam();
Variable tmp_variable(input);
Variable variable(std::move(tmp_variable));
EXPECT_EQ(variable.id, input.id);
EXPECT_EQ(variable.value, input.value);
}
TEST_P(VariableFixture, CopyAssignment) {
Variable input = GetParam();
Variable variable = input;
EXPECT_EQ(variable.id, input.id);
EXPECT_EQ(variable.value, input.value);
}
TEST_P(VariableFixture, MoveAssignment) {
Variable input = GetParam();
Variable tmp_variable(input);
Variable variable = std::move(tmp_variable);
EXPECT_EQ(variable.id, input.id);
EXPECT_EQ(variable.value, input.value);
}
constexpr efi_guid kEfiGuid0 = {0x0, 0x0, 0x0, {0x0}};
INSTANTIATE_TEST_SUITE_P(
VariableTest, VariableFixture,
::testing::Values(Variable{{String(u""), kEfiGuid0}, {0x00}},
Variable{{String(u""), {0x1, 0x0, 0x0, {0x0}}}, {0x01}},
Variable{{String(u"a\tb\nc\x0001\x0002"), kEfiGuid0}, {0x00}},
Variable{{String(u"abcDEF123!@#"), kEfiGuid0}, {0x02}},
Variable{{String(u"var0"), kEfiGuid0}, {0x03}},
Variable{{String(u"var0"), {0x0, 0x0, 0x1, {0x0}}}, {0x04}},
Variable{{String(u"var0"), {0x0, 0x0, 0x1, {0x1}}}, {0x05, 0x06}},
Variable{{String(u"var0"), {0x0, 0x1, 0x0, {0x0}}}, {0x07, 0x08, 0x09}},
Variable{{String(u"var0"), {0x1, 0x0, 0x0, {0x0}}}, {0x0a}},
Variable{{String(u"var1"), kEfiGuid0}, {0x0c}}));
} // unnamed namespace