Files
ViewDesignEngine/tests/core/test_version.cpp
T

131 lines
5.1 KiB
C++
Raw Normal View History

/**
* @file test_version.cpp
* @brief ViewDesignEngine 版本信息单元测试
*/
#include <gtest/gtest.h>
#include "vde/core/version.h"
#include <string>
using namespace vde::core;
// ═══════════════════════════════════════════════════════════════
// 编译时版本宏测试
// ═══════════════════════════════════════════════════════════════
TEST(VersionMacro, MajorVersion) {
EXPECT_EQ(VDE_VERSION_MAJOR, 1);
}
TEST(VersionMacro, MinorVersion) {
EXPECT_EQ(VDE_VERSION_MINOR, 0);
}
TEST(VersionMacro, PatchVersion) {
EXPECT_EQ(VDE_VERSION_PATCH, 1);
}
TEST(VersionMacro, VersionString) {
EXPECT_STREQ(VDE_VERSION_STRING, "1.0.1");
}
TEST(VersionMacro, VersionNum) {
EXPECT_EQ(VDE_VERSION_NUM, 10001); // 1*10000 + 0*100 + 1
}
TEST(VersionMacro, VersionCodeFunction) {
EXPECT_EQ(VDE_VERSION_CODE(2, 3, 4), 20304);
EXPECT_EQ(VDE_VERSION_CODE(0, 0, 1), 1);
EXPECT_EQ(VDE_VERSION_CODE(10, 20, 30), 102030);
}
// ═══════════════════════════════════════════════════════════════
// 构建信息测试
// ═══════════════════════════════════════════════════════════════
TEST(BuildInfo, BuildTypeDefined) {
EXPECT_TRUE(std::string(VDE_BUILD_TYPE).size() > 0);
}
TEST(BuildInfo, CompilerInfoDefined) {
EXPECT_TRUE(std::string(VDE_COMPILER_INFO).size() > 0);
}
TEST(BuildInfo, CppStandardString) {
std::string cpp = VDE_CPP_STANDARD_STRING;
EXPECT_TRUE(cpp == "C++20" || cpp == "C++17" || cpp == "C++14" ||
cpp == "C++11" || cpp == "C++03");
// 项目要求 C++20
EXPECT_EQ(cpp, "C++20");
}
// ═══════════════════════════════════════════════════════════════
// VersionInfo 结构体测试
// ═══════════════════════════════════════════════════════════════
TEST(VersionInfo, DefaultConstruction) {
VersionInfo info = vde_version();
EXPECT_EQ(info.major, 1);
EXPECT_EQ(info.minor, 0);
EXPECT_EQ(info.patch, 1);
EXPECT_EQ(info.version_string, "1.0.1");
EXPECT_FALSE(info.build_type.empty());
EXPECT_FALSE(info.compiler_info.empty());
EXPECT_EQ(info.cpp_standard, "C++20");
}
TEST(VersionInfo, BuildTimestamp) {
VersionInfo info = vde_version();
// 时间戳可能为 unknown 或 ISO 8601 格式
EXPECT_FALSE(info.build_timestamp.empty());
}
// ═══════════════════════════════════════════════════════════════
// vde_version_string 测试
// ═══════════════════════════════════════════════════════════════
TEST(VersionString, Format) {
std::string vs = vde_version_string();
// 格式:ViewDesignEngine v1.0.1 (C++20, GCC x.x)
EXPECT_TRUE(vs.find("ViewDesignEngine v1.0.1") != std::string::npos);
EXPECT_TRUE(vs.find("C++20") != std::string::npos);
EXPECT_TRUE(vs.find("(") != std::string::npos);
EXPECT_TRUE(vs.find(")") != std::string::npos);
}
TEST(VersionString, NonEmpty) {
EXPECT_FALSE(vde_version_string().empty());
EXPECT_GT(vde_version_string().size(), 20u);
}
// ═══════════════════════════════════════════════════════════════
// vde_version_compare 测试
// ═══════════════════════════════════════════════════════════════
TEST(VersionCompare, Equality) {
EXPECT_EQ(vde_version_compare(1, 0, 1, 1, 0, 1), 0);
EXPECT_EQ(vde_version_compare(2, 0, 0, 2, 0, 0), 0);
}
TEST(VersionCompare, Less) {
EXPECT_LT(vde_version_compare(1, 0, 0, 1, 0, 1), 0);
EXPECT_LT(vde_version_compare(1, 0, 0, 2, 0, 0), 0);
EXPECT_LT(vde_version_compare(1, 9, 9, 2, 0, 0), 0);
}
TEST(VersionCompare, Greater) {
EXPECT_GT(vde_version_compare(2, 0, 0, 1, 0, 0), 0);
EXPECT_GT(vde_version_compare(1, 0, 2, 1, 0, 1), 0);
EXPECT_GT(vde_version_compare(1, 1, 0, 1, 0, 99), 0);
}
TEST(VersionCompare, Transitivity) {
// 1.0.0 < 1.0.1 < 1.1.0 < 2.0.0
int cmp1 = vde_version_compare(1, 0, 0, 1, 0, 1);
int cmp2 = vde_version_compare(1, 0, 1, 1, 1, 0);
int cmp3 = vde_version_compare(1, 1, 0, 2, 0, 0);
EXPECT_LT(cmp1, 0);
EXPECT_LT(cmp2, 0);
EXPECT_LT(cmp3, 0);
}