Compare commits
2 Commits
main
...
test_20260
| Author | SHA1 | Date |
|---|---|---|
|
|
e8ecd9f2bc | |
|
|
1d069f92a2 |
|
|
@ -28,13 +28,13 @@ public:
|
|||
|
||||
// 查询追溯关系
|
||||
std::vector<TraceLink> getTraceLinks(const std::string& req_id) const;
|
||||
// 模拟 AST 构建与代码生成
|
||||
std::string generateCppSkeleton(const RequirementItem& req);
|
||||
std::string generateJavaSkeleton(const RequirementItem& req);
|
||||
|
||||
private:
|
||||
std::vector<TraceLink> trace_index_;
|
||||
|
||||
|
||||
// 模拟 AST 构建与代码生成
|
||||
std::string generateCppSkeleton(const RequirementItem& req);
|
||||
std::string generateJavaSkeleton(const RequirementItem& req);
|
||||
};
|
||||
|
||||
} // namespace aise
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
cmake_minimum_required(VERSION 3.10.0)
|
||||
project(auto_plan_test)
|
||||
include(FetchContent)
|
||||
if (MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
endif()
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
|
||||
)
|
||||
# For Windows: Prevent overriding the parent project's compiler/linker settings
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
||||
#include_directories(D:/workspace/googletest-demo/test_main)
|
||||
#add_executable(demo max.cpp main.cpp)
|
||||
|
||||
# 调用 find_package,它会使用你提供的变量
|
||||
find_package(GTest REQUIRED)
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
file(GLOB TEST_SOURCES "../*.cpp")
|
||||
add_executable(auto_plan_test test_codegen.cpp ${TEST_SOURCES})
|
||||
|
||||
target_link_libraries(auto_plan_test gtest gmock gtest_main)
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(auto_plan_test)
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
#include "aise/codegen.hpp"
|
||||
#include <gtest/gtest.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace aise {
|
||||
|
||||
class CodegenModuleTest : public ::testing::Test {
|
||||
protected:
|
||||
CodegenModule module;
|
||||
};
|
||||
|
||||
FRIEND_TEST(CodegenModuleTest, testCodegenModuleConstructor);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateCppNormal);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateJavaNormal);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateUnsupportedLanguage);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateEmptyReqId);
|
||||
FRIEND_TEST(CodegenModuleTest, testGetTraceLinksExisting);
|
||||
FRIEND_TEST(CodegenModuleTest, testGetTraceLinksNonExisting);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateCppSkeletonNormal);
|
||||
FRIEND_TEST(CodegenModuleTest, testGenerateJavaSkeletonNormal);
|
||||
|
||||
TEST_F(CodegenModuleTest, testCodegenModuleConstructor) {
|
||||
auto links = module.getTraceLinks("SRS-AISE_F-001");
|
||||
ASSERT_EQ(links.size(), 1);
|
||||
EXPECT_EQ(links[0].req_id, "SRS-AISE_F-001");
|
||||
EXPECT_EQ(links[0].file_path, "src/requirements.cpp");
|
||||
EXPECT_FALSE(links[0].changed);
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateCppNormal) {
|
||||
auto result = module.generate("REQ-001", "C++", "x86");
|
||||
EXPECT_TRUE(result.success);
|
||||
ASSERT_EQ(result.generated_files.size(), 1);
|
||||
EXPECT_EQ(result.generated_files[0], "REQ-001_impl.cpp");
|
||||
ASSERT_EQ(result.trace_links.size(), 1);
|
||||
EXPECT_EQ(result.trace_links[0].req_id, "REQ-001");
|
||||
EXPECT_EQ(result.output_dir, "./generated/REQ-001");
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateJavaNormal) {
|
||||
auto result = module.generate("REQ-002", "Java", "ARM");
|
||||
EXPECT_TRUE(result.success);
|
||||
ASSERT_EQ(result.generated_files.size(), 1);
|
||||
EXPECT_EQ(result.generated_files[0], "REQ-002_impl.java");
|
||||
ASSERT_EQ(result.trace_links.size(), 1);
|
||||
EXPECT_EQ(result.trace_links[0].req_id, "REQ-002");
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateUnsupportedLanguage) {
|
||||
auto result = module.generate("REQ-003", "Python", "x86");
|
||||
EXPECT_FALSE(result.success);
|
||||
EXPECT_EQ(result.error_msg, "Unsupported language: Python");
|
||||
EXPECT_TRUE(result.generated_files.empty());
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateEmptyReqId) {
|
||||
auto result = module.generate("", "C++", "x86");
|
||||
EXPECT_TRUE(result.success);
|
||||
ASSERT_EQ(result.generated_files.size(), 1);
|
||||
EXPECT_EQ(result.generated_files[0], "_impl.cpp");
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGetTraceLinksExisting) {
|
||||
module.generate("REQ-001", "C++", "x86");
|
||||
auto links = module.getTraceLinks("REQ-001");
|
||||
ASSERT_EQ(links.size(), 1);
|
||||
EXPECT_EQ(links[0].file_path, "REQ-001_impl.cpp");
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGetTraceLinksNonExisting) {
|
||||
auto links = module.getTraceLinks("NONEXIST");
|
||||
EXPECT_TRUE(links.empty());
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateCppSkeletonNormal) {
|
||||
RequirementItem req;
|
||||
req.id = "REQ-TEST";
|
||||
req.title = "Test Requirement";
|
||||
req.description = "Test Desc";
|
||||
std::string code = module.generateCppSkeleton(req);
|
||||
EXPECT_THAT(code, testing::HasSubstr("// Requirement: REQ-TEST - Test Requirement"));
|
||||
EXPECT_THAT(code, testing::HasSubstr("class REQModule"));
|
||||
EXPECT_THAT(code, testing::HasSubstr("void execute()"));
|
||||
}
|
||||
|
||||
TEST_F(CodegenModuleTest, testGenerateJavaSkeletonNormal) {
|
||||
RequirementItem req;
|
||||
req.id = "REQ-JAVA";
|
||||
req.title = "Java Requirement";
|
||||
req.description = "Java Desc";
|
||||
std::string code = module.generateJavaSkeleton(req);
|
||||
EXPECT_THAT(code, testing::HasSubstr("// Requirement: REQ-JAVA - Java Requirement"));
|
||||
EXPECT_THAT(code, testing::HasSubstr("public class REQModule"));
|
||||
EXPECT_THAT(code, testing::HasSubstr("System.out.println"));
|
||||
}
|
||||
|
||||
} // namespace aise
|
||||
Loading…
Reference in New Issue