auto_plan/tests/test_codegen.cpp

78 lines
2.7 KiB
C++

#include <gtest/gtest.h>
#include "aise/codegen.hpp"
#include <string>
#include <vector>
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