#include #include "aise/codegen.hpp" #include #include namespace aise { class CodegenModuleTest : public ::testing::Test { protected: CodegenModule module_; }; TEST_F(CodegenModuleTest, testGenerateNormalInputCpp) { auto result = module_.generate("SRS-001", "C++", ""); EXPECT_TRUE(result.success); EXPECT_EQ(result.generated_files.size(), 1); EXPECT_EQ(result.generated_files[0], "SRS-001_impl.cpp"); EXPECT_EQ(result.trace_links.size(), 1); EXPECT_EQ(result.trace_links[0].req_id, "SRS-001"); EXPECT_EQ(result.output_dir, "./generated/SRS-001"); } TEST_F(CodegenModuleTest, testGenerateNormalInputJava) { auto result = module_.generate("REQ-002", "Java", ""); EXPECT_TRUE(result.success); EXPECT_EQ(result.generated_files[0], "REQ-002_impl.java"); EXPECT_EQ(result.trace_links[0].req_id, "REQ-002"); } TEST_F(CodegenModuleTest, testGenerateUnsupportedLanguage) { auto result = module_.generate("SRS-003", "Python", ""); 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++", ""); EXPECT_TRUE(result.success); EXPECT_EQ(result.generated_files[0], "_impl.cpp"); } TEST_F(CodegenModuleTest, testGetTraceLinksExisting) { module_.generate("SRS-001", "C++", ""); auto links = module_.getTraceLinks("SRS-001"); ASSERT_EQ(links.size(), 1); EXPECT_EQ(links[0].req_id, "SRS-001"); EXPECT_EQ(links[0].file_path, "SRS-001_impl.cpp"); } TEST_F(CodegenModuleTest, testGetTraceLinksNonExisting) { auto links = module_.getTraceLinks("NONEXISTENT"); EXPECT_TRUE(links.empty()); } TEST_F(CodegenModuleTest, testGenerateCppSkeletonNormal) { RequirementItem req; req.id = "SRS-001"; req.title = "Test Requirement"; req.description = "Test Description"; std::string code = module_.generateCppSkeleton(req); EXPECT_NE(code.find("class SRSModule"), std::string::npos); EXPECT_NE(code.find("// Requirement: SRS-001 - Test Requirement"), std::string::npos); EXPECT_NE(code.find("void execute()"), std::string::npos); } TEST_F(CodegenModuleTest, testGenerateJavaSkeletonNormal) { RequirementItem req; req.id = "REQ-002"; req.title = "Java Requirement"; req.description = "Java Description"; std::string code = module_.generateJavaSkeleton(req); EXPECT_NE(code.find("public class REQModule"), std::string::npos); EXPECT_NE(code.find("public void execute()"), std::string::npos); EXPECT_NE(code.find("System.out.println"), std::string::npos); } } // namespace aise