124 lines
4.5 KiB
C++
124 lines
4.5 KiB
C++
/**
|
|
* @file test_export_headers.cpp
|
|
* @brief Tests für Export Header Guards
|
|
*
|
|
* Tests verify that export headers exist and can be included without errors.
|
|
* Note: Export macros are defined via CMake target_compile_definitions,
|
|
* so we test header existence and structure rather than macro expansion.
|
|
*/
|
|
|
|
#include <fstream>
|
|
#include <gtest/gtest.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
// Helper to check if file exists and is readable
|
|
bool fileExists(const std::string& path)
|
|
{
|
|
std::ifstream file(path);
|
|
return file.good();
|
|
}
|
|
|
|
// Helper to read file content
|
|
std::string readFile(const std::string& path)
|
|
{
|
|
std::ifstream file(path);
|
|
if (!file.is_open())
|
|
{
|
|
return "";
|
|
}
|
|
return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
|
|
}
|
|
|
|
// Test 1: nglwidgets_export.h exists
|
|
TEST(ExportHeaders, NglWidgetsExportExists)
|
|
{
|
|
std::string path = "build/Z/src/nglwidgets/nglwidgets_export.h";
|
|
EXPECT_TRUE(fileExists(path)) << "Export header not found: " << path;
|
|
}
|
|
|
|
// Test 2: qtsingleapplication_export.h exists
|
|
TEST(ExportHeaders, QtSingleApplicationExportExists)
|
|
{
|
|
std::string path = "build/Z/src/QtSingleApplication/qtsingleapplication_export.h";
|
|
EXPECT_TRUE(fileExists(path)) << "Export header not found: " << path;
|
|
}
|
|
|
|
// Test 3: ltssessiondata_export.h exists
|
|
TEST(ExportHeaders, LtsSessionDataExportExists)
|
|
{
|
|
std::string path = "build/Lts/Common/LtsSession/ltssessiondata_export.h";
|
|
EXPECT_TRUE(fileExists(path)) << "Export header not found: " << path;
|
|
}
|
|
|
|
// Test 4: svcgmpserver_export.h exists
|
|
TEST(ExportHeaders, SvcGmpServerExportExists)
|
|
{
|
|
std::string path = "build/Lts/Services/GuezMinelayerProcessing/svcgmpserver_export.h";
|
|
EXPECT_TRUE(fileExists(path)) << "Export header not found: " << path;
|
|
}
|
|
|
|
// Test 5: Export headers have proper include guards
|
|
TEST(ExportHeaders, HaveIncludeGuards)
|
|
{
|
|
std::vector<std::string> headers = {
|
|
"build/Z/src/nglwidgets/nglwidgets_export.h", "build/Z/src/QtSingleApplication/qtsingleapplication_export.h",
|
|
"build/Lts/Common/LtsSession/ltssessiondata_export.h", "build/Lts/Proxies/ProjectDataManagement/pdm_export.h"};
|
|
|
|
for (const auto& header : headers)
|
|
{
|
|
std::string content = readFile(header);
|
|
if (!content.empty())
|
|
{
|
|
// Check for #ifndef guard
|
|
bool hasIfndef = content.find("#ifndef") != std::string::npos;
|
|
bool hasDefine = content.find("#define") != std::string::npos;
|
|
bool hasEndif = content.find("#endif") != std::string::npos;
|
|
|
|
EXPECT_TRUE(hasIfndef && hasDefine && hasEndif) << "Header " << header << " missing proper include guards";
|
|
}
|
|
}
|
|
}
|
|
|
|
// Test 6: Export macros follow naming convention
|
|
TEST(ExportHeaders, MacroNamingConvention)
|
|
{
|
|
// Check that export headers follow CMake naming convention
|
|
std::string adlerPath =
|
|
"qt-migration-legatus/qt6-after/qt6-migrated-legatus/build/Lts/Plugins/AdlerJson/adler_export.h";
|
|
std::string content = readFile(adlerPath);
|
|
|
|
if (!content.empty())
|
|
{
|
|
// Should have ADLER_EXPORT_H guard
|
|
bool hasCorrectGuard = content.find("#ifndef ADLER_EXPORT_H") != std::string::npos;
|
|
EXPECT_TRUE(hasCorrectGuard) << "adler_export.h should use ADLER_EXPORT_H guard";
|
|
}
|
|
}
|
|
|
|
// Test 7: Export headers define both EXPORT and NO_EXPORT macros
|
|
TEST(ExportHeaders, ExportAndNoExportMacros)
|
|
{
|
|
std::vector<std::pair<std::string, std::string>> expectedMacros = {
|
|
{"qt-migration-legatus/qt6-after/qt6-migrated-legatus/build/Lts/Plugins/AdlerJson/adler_export.h", "ADLER"},
|
|
{"qt-migration-legatus/qt6-after/qt6-migrated-legatus/build/Lts/Services/PresentationManagement/"
|
|
"svcprecommon_export.h",
|
|
"SVCPRECOMMON"},
|
|
{"qt-migration-legatus/qt6-after/qt6-migrated-legatus/build/Lts/Common/LtsSession/ltssessiondata_export.h",
|
|
"LTSESSIONDATA"},
|
|
{"qt-migration-legatus/qt6-after/qt6-migrated-legatus/build/Lts/Proxies/ProjectDataManagement/pdm_export.h",
|
|
"PDM"}};
|
|
|
|
for (const auto& [header, prefix] : expectedMacros)
|
|
{
|
|
std::string content = readFile(header);
|
|
if (!content.empty())
|
|
{
|
|
bool hasExport = content.find(prefix + "_EXPORT") != std::string::npos;
|
|
bool hasNoExport = content.find(prefix + "_NO_EXPORT") != std::string::npos;
|
|
|
|
EXPECT_TRUE(hasExport) << header << " should define " << prefix << "_EXPORT";
|
|
EXPECT_TRUE(hasNoExport) << header << " should define " << prefix << "_NO_EXPORT";
|
|
}
|
|
}
|
|
} |