diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 38909c61..3854f730 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -56,196 +56,160 @@ load_config(const std::string &test_name) return std::make_pair(std::move(config), std::move(compilation_database)); } -std::unique_ptr -generate_sequence_diagram(clang::tooling::CompilationDatabase &db, +namespace detail { +template +auto generate_diagram_impl(clang::tooling::CompilationDatabase &db, std::shared_ptr diagram) { - using diagram_config = clanguml::config::sequence_diagram; - using diagram_model = clanguml::sequence_diagram::model::diagram; + using diagram_config = DiagramConfig; + using diagram_model = + typename clanguml::common::generators::diagram_model_t< + diagram_config>::type; using diagram_visitor = - clanguml::sequence_diagram::visitor::translation_unit_visitor; + typename clanguml::common::generators::diagram_visitor_t< + diagram_config>::type; inject_diagram_options(diagram); auto model = clanguml::common::generators::generate(db, diagram->name, - dynamic_cast(*diagram), + dynamic_cast(*diagram), diagram->get_translation_units()); return model; } +template +auto generate_diagram_puml( + std::shared_ptr config, DiagramModel &model) +{ + using diagram_config = DiagramConfig; + using diagram_model = DiagramModel; + using diagram_generator = + typename clanguml::common::generators::diagram_generator_t< + DiagramConfig, + clanguml::common::generators::plantuml_generator_tag>::type; + + std::stringstream ss; + + ss << diagram_generator(dynamic_cast(*config), model); + + return ss.str(); +} + +template +auto generate_diagram_json( + std::shared_ptr config, DiagramModel &model) +{ + using diagram_config = DiagramConfig; + using diagram_model = DiagramModel; + using diagram_generator = + typename clanguml::common::generators::diagram_generator_t< + DiagramConfig, + clanguml::common::generators::json_generator_tag>::type; + + std::stringstream ss; + + ss << diagram_generator(dynamic_cast(*config), model); + + return nlohmann::json::parse(ss.str()); +} +} + std::unique_ptr generate_class_diagram( clang::tooling::CompilationDatabase &db, std::shared_ptr diagram) { - using diagram_config = clanguml::config::class_diagram; - using diagram_model = clanguml::class_diagram::model::diagram; - using diagram_visitor = - clanguml::class_diagram::visitor::translation_unit_visitor; + return detail::generate_diagram_impl( + db, diagram); +} - inject_diagram_options(diagram); - - auto model = clanguml::common::generators::generate(db, diagram->name, - dynamic_cast(*diagram), - diagram->get_translation_units()); - - return model; +std::unique_ptr +generate_sequence_diagram(clang::tooling::CompilationDatabase &db, + std::shared_ptr diagram) +{ + return detail::generate_diagram_impl( + db, diagram); } std::unique_ptr generate_package_diagram(clang::tooling::CompilationDatabase &db, std::shared_ptr diagram) { - using diagram_config = clanguml::config::package_diagram; - using diagram_model = clanguml::package_diagram::model::diagram; - using diagram_visitor = - clanguml::package_diagram::visitor::translation_unit_visitor; - - inject_diagram_options(diagram); - - return clanguml::common::generators::generate(db, diagram->name, - dynamic_cast(*diagram), - diagram->get_translation_units()); + return detail::generate_diagram_impl( + db, diagram); } std::unique_ptr generate_include_diagram(clang::tooling::CompilationDatabase &db, std::shared_ptr diagram) { - using diagram_config = clanguml::config::include_diagram; - using diagram_model = clanguml::include_diagram::model::diagram; - using diagram_visitor = - clanguml::include_diagram::visitor::translation_unit_visitor; - - inject_diagram_options(diagram); - - return clanguml::common::generators::generate(db, diagram->name, - dynamic_cast(*diagram), - diagram->get_translation_units()); -} - -std::string generate_sequence_puml( - std::shared_ptr config, - clanguml::sequence_diagram::model::diagram &model) -{ - using namespace clanguml::sequence_diagram::generators::plantuml; - - std::stringstream ss; - - ss << generator( - dynamic_cast(*config), model); - - return ss.str(); -} - -nlohmann::json generate_sequence_json( - std::shared_ptr config, - clanguml::sequence_diagram::model::diagram &model) -{ - using namespace clanguml::sequence_diagram::generators::json; - - std::stringstream ss; - - ss << generator( - dynamic_cast(*config), model); - - return nlohmann::json::parse(ss.str()); + return detail::generate_diagram_impl( + db, diagram); } std::string generate_class_puml( std::shared_ptr config, clanguml::class_diagram::model::diagram &model) { - using namespace clanguml::class_diagram::generators::plantuml; - - std::stringstream ss; - - ss << generator( - dynamic_cast(*config), model); - - return ss.str(); + return detail::generate_diagram_puml( + config, model); } -nlohmann::json generate_class_json( +std::string generate_sequence_puml( std::shared_ptr config, - clanguml::class_diagram::model::diagram &model) + clanguml::sequence_diagram::model::diagram &model) { - using namespace clanguml::class_diagram::generators::json; - - std::stringstream ss; - - ss << generator( - dynamic_cast(*config), model); - - return nlohmann::json::parse(ss.str()); + return detail::generate_diagram_puml( + config, model); } std::string generate_package_puml( std::shared_ptr config, clanguml::package_diagram::model::diagram &model) { - using namespace clanguml::package_diagram::generators::plantuml; - - std::stringstream ss; - - assert(config.get() != nullptr); - - ss << generator( - dynamic_cast(*config), model); - - return ss.str(); -} - -nlohmann::json generate_package_json( - std::shared_ptr config, - clanguml::package_diagram::model::diagram &model) -{ - using namespace clanguml::package_diagram::generators::json; - - std::stringstream ss; - - assert(config.get() != nullptr); - - ss << generator( - dynamic_cast(*config), model); - - return nlohmann::json::parse(ss.str()); + return detail::generate_diagram_puml( + config, model); } std::string generate_include_puml( std::shared_ptr config, clanguml::include_diagram::model::diagram &model) { - using namespace clanguml::include_diagram::generators::plantuml; + return detail::generate_diagram_puml( + config, model); +} - std::stringstream ss; +nlohmann::json generate_class_json( + std::shared_ptr config, + clanguml::class_diagram::model::diagram &model) +{ + return detail::generate_diagram_json( + config, model); +} - assert(config.get() != nullptr); +nlohmann::json generate_sequence_json( + std::shared_ptr config, + clanguml::sequence_diagram::model::diagram &model) +{ + return detail::generate_diagram_json( + config, model); +} - ss << generator( - dynamic_cast(*config), model); - - return ss.str(); +nlohmann::json generate_package_json( + std::shared_ptr config, + clanguml::package_diagram::model::diagram &model) +{ + return detail::generate_diagram_json( + config, model); } nlohmann::json generate_include_json( std::shared_ptr config, clanguml::include_diagram::model::diagram &model) { - using namespace clanguml::include_diagram::generators::json; - - std::stringstream ss; - - assert(config.get() != nullptr); - - ss << generator( - dynamic_cast(*config), model); - - return nlohmann::json::parse(ss.str()); + return detail::generate_diagram_json( + config, model); } void save_puml(const std::string &path, const std::string &puml)