From 5835f230e496a5c7d14e9b95785e7e067638bc09 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Mon, 14 Feb 2022 22:51:29 +0100 Subject: [PATCH] Added layout hints config option to package diagrams --- src/config/config.cc | 2 ++ src/config/config.h | 2 ++ tests/test_config.cc | 45 +++++++++++++++++++++---------- tests/test_config_data/layout.yml | 17 +++++++++++- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/config/config.cc b/src/config/config.cc index fbf459d6..c4402bec 100644 --- a/src/config/config.cc +++ b/src/config/config.cc @@ -409,6 +409,8 @@ template <> struct convert { if (!decode_diagram(node, rhs)) return false; + get_option(node, rhs.layout); + return true; } }; diff --git a/src/config/config.h b/src/config/config.h index b4bf92ed..9a954c90 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -135,6 +135,8 @@ struct package_diagram : public diagram { virtual ~package_diagram() = default; diagram_type type() const override; + + option layout{"layout"}; }; struct config : public inheritable_diagram_options { diff --git a/tests/test_config.cc b/tests/test_config.cc index fd693444..95091f8e 100644 --- a/tests/test_config.cc +++ b/tests/test_config.cc @@ -83,22 +83,39 @@ TEST_CASE("Test config layout", "[unit-test]") { auto cfg = clanguml::config::load("./test_config_data/layout.yml"); - CHECK(cfg.diagrams.size() == 1); + CHECK(cfg.diagrams.size() == 2); + auto &def = static_cast( *cfg.diagrams["class_main"]); - CHECK(def.type() == clanguml::config::diagram_type::class_diagram); - CHECK(def.layout().at("ABCD").size() == 2); - CHECK(def.layout().at("ABCD")[0].hint == clanguml::config::hint_t::up); - CHECK(def.layout().at("ABCD")[0].entity == "ABCD_SUBCLASS"); - CHECK(def.layout().at("ABCD")[1].hint == clanguml::config::hint_t::left); - CHECK(def.layout().at("ABCD")[1].entity == "ABCD_SIBLING"); + auto check_layout = [](const auto &diagram, + const clanguml::config::diagram_type type) { + CHECK(diagram.type() == type); - CHECK(def.layout().at("ABCD_SIBLING").size() == 2); - CHECK(def.layout().at("ABCD_SIBLING")[0].hint == - clanguml::config::hint_t::right); - CHECK(def.layout().at("ABCD_SIBLING")[0].entity == "ABCD_OTHER_SIBLING"); - CHECK(def.layout().at("ABCD_SIBLING")[1].hint == - clanguml::config::hint_t::down); - CHECK(def.layout().at("ABCD_SIBLING")[1].entity == "ABCD_SIBLING_SIBLING"); + CHECK(diagram.layout().at("ABCD").size() == 2); + CHECK(diagram.layout().at("ABCD")[0].hint == + clanguml::config::hint_t::up); + CHECK(diagram.layout().at("ABCD")[0].entity == "ABCD_SUBCLASS"); + CHECK(diagram.layout().at("ABCD")[1].hint == + clanguml::config::hint_t::left); + CHECK(diagram.layout().at("ABCD")[1].entity == "ABCD_SIBLING"); + + CHECK(diagram.layout().at("ABCD_SIBLING").size() == 2); + CHECK(diagram.layout().at("ABCD_SIBLING")[0].hint == + clanguml::config::hint_t::right); + CHECK(diagram.layout().at("ABCD_SIBLING")[0].entity == + "ABCD_OTHER_SIBLING"); + CHECK(diagram.layout().at("ABCD_SIBLING")[1].hint == + clanguml::config::hint_t::down); + CHECK(diagram.layout().at("ABCD_SIBLING")[1].entity == + "ABCD_SIBLING_SIBLING"); + }; + + check_layout(static_cast( + *cfg.diagrams["class_main"]), + clanguml::config::diagram_type::class_diagram); + + check_layout(static_cast( + *cfg.diagrams["package_main"]), + clanguml::config::diagram_type::package_diagram); } \ No newline at end of file diff --git a/tests/test_config_data/layout.yml b/tests/test_config_data/layout.yml index d30f264d..e70502dc 100644 --- a/tests/test_config_data/layout.yml +++ b/tests/test_config_data/layout.yml @@ -19,4 +19,19 @@ diagrams: include: namespaces: - clanguml - - ABCD \ No newline at end of file + - ABCD + package_main: + type: package + glob: + - src/**/*.cc + - src/**/*.h + using_namespace: + - clanguml + generate_method_arguments: full + layout: + ABCD: + - up: ABCD_SUBCLASS + - left: ABCD_SIBLING + ABCD_SIBLING: + - right: ABCD_OTHER_SIBLING + - down: ABCD_SIBLING_SIBLING \ No newline at end of file