#define CATCH_CONFIG_MAIN #include "config/config.h" #include "cx/compilation_database.h" #include "puml/class_diagram_generator.h" #include "puml/sequence_diagram_generator.h" #include "uml/class_diagram_model.h" #include "uml/class_diagram_visitor.h" #include "uml/sequence_diagram_visitor.h" #include "catch.h" #include #include #include using Catch::Matchers::Contains; using Catch::Matchers::EndsWith; using Catch::Matchers::StartsWith; using Catch::Matchers::VectorContains; using clanguml::cx::compilation_database; auto load_config(const std::string &test_name) { auto config = clanguml::config::load(test_name + "/.clanguml"); auto db = clanguml::cx::compilation_database::from_directory( config.compilation_database_dir); return std::make_pair(std::move(config), std::move(db)); } auto generate_sequence_diagram(compilation_database &db, std::shared_ptr diagram) { auto diagram_model = clanguml::generators::sequence_diagram::generate(db, diagram->name, dynamic_cast(*diagram)); return diagram_model; } auto generate_class_diagram(compilation_database &db, std::shared_ptr diagram) { auto diagram_model = clanguml::generators::class_diagram::generate(db, diagram->name, dynamic_cast(*diagram)); return diagram_model; } std::string generate_sequence_puml( std::shared_ptr config, clanguml::model::sequence_diagram::diagram &model) { using namespace clanguml::generators::sequence_diagram::puml; std::stringstream ss; ss << generator( dynamic_cast(*config), model); return ss.str(); } TEST_CASE("Test t00001", "[unit-test]") { spdlog::set_level(spdlog::level::debug); auto [config, db] = load_config("t00001"); auto diagram = config.diagrams["t00001_sequence"]; REQUIRE(diagram->include.namespaces.size() == 1); REQUIRE_THAT(diagram->include.namespaces, VectorContains(std::string{"clanguml::t00001"})); REQUIRE(diagram->exclude.namespaces.size() == 1); REQUIRE_THAT(diagram->exclude.namespaces, VectorContains(std::string{"clanguml::t00001::detail"})); REQUIRE(diagram->should_include("clanguml::t00001::A")); REQUIRE(!diagram->should_include("clanguml::t00001::detail::C")); REQUIRE(!diagram->should_include("std::vector")); REQUIRE(diagram->name == "t00001_sequence"); auto model = generate_sequence_diagram(db, diagram); REQUIRE(model.name == "t00001_sequence"); auto puml = generate_sequence_puml(diagram, model); REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(puml, EndsWith("@enduml\n")); }