From 1d069f92a27d18db249ab299847be94a6969c649 Mon Sep 17 00:00:00 2001 From: linianlin Date: Tue, 28 Apr 2026 16:54:00 +0800 Subject: [PATCH] =?UTF-8?q?AI=20=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_codegen.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 tests/test_codegen.cpp diff --git a/tests/test_codegen.cpp b/tests/test_codegen.cpp new file mode 100644 index 0000000..9f13b99 --- /dev/null +++ b/tests/test_codegen.cpp @@ -0,0 +1,98 @@ +#include "aise/codegen.hpp" +#include +#include +#include + +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 \ No newline at end of file