From ea8f0e83c1084593d139fa0952a63a438fc76ad7 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 24 Jul 2021 19:40:12 +0200 Subject: [PATCH] Added include_relations_also_as_members flag --- docs/test_cases.md | 1 + docs/test_cases/t00017.md | 79 +++++++++++++++++++++++ docs/test_cases/t00017_class.png | Bin 0 -> 24264 bytes src/config/config.h | 7 +++ src/puml/class_diagram_generator.h | 97 +++++++++++++++++------------ tests/t00017/.clanguml | 13 ++++ tests/t00017/t00017.cc | 55 ++++++++++++++++ tests/t00017/test_case.h | 82 ++++++++++++++++++++++++ tests/test_cases.cc | 1 + tests/test_cases.yaml | 3 + 10 files changed, 297 insertions(+), 41 deletions(-) create mode 100644 docs/test_cases/t00017.md create mode 100644 docs/test_cases/t00017_class.png create mode 100644 tests/t00017/.clanguml create mode 100644 tests/t00017/t00017.cc create mode 100644 tests/t00017/test_case.h diff --git a/docs/test_cases.md b/docs/test_cases.md index 9b9ccb92..6e436e39 100644 --- a/docs/test_cases.md +++ b/docs/test_cases.md @@ -15,6 +15,7 @@ * [t00014](./test_cases/t00014.md) - Alias template instantiation * [t00015](./test_cases/t00015.md) - Namespace fun * [t00016](./test_cases/t00016.md) - Unnamed enums and empty templates + * [t00017](./test_cases/t00017.md) - Test include relations also as members flag ## Sequence diagrams * [t20001](./test_cases/t20001.md) - Basic sequence diagram ## Configuration diagrams diff --git a/docs/test_cases/t00017.md b/docs/test_cases/t00017.md new file mode 100644 index 00000000..9af0d568 --- /dev/null +++ b/docs/test_cases/t00017.md @@ -0,0 +1,79 @@ +# t00017 - Test include relations also as members flag +## Config +```yaml +compilation_database_dir: .. +output_directory: puml +diagrams: + t00017_class: + type: class + include_relations_also_as_members: false + glob: + - ../../tests/t00017/t00017.cc + using_namespace: + - clanguml::t00017 + include: + namespaces: + - clanguml::t00017 + +``` +## Source code +```cpp +namespace clanguml { +namespace t00017 { +class A { +}; + +class B { +}; + +class C { +}; + +class D { +}; + +class E { +}; + +class F { +}; + +class G { +}; + +class H { +}; + +class I { +}; + +class J { +}; + +class K { +}; + +class R { +private: + int some_int; + int *some_int_pointer; + int **some_int_pointer_pointer; + int &some_int_reference; + A a; + B *b; + C &c; + const D *d; + const E &e{}; + F &&f; + G **g; + H ***h; + I *&i; + volatile J *j; + mutable K *k; +}; +} +} + +``` +## Generated UML diagrams +![t00017_class](./t00017_class.png "Test include relations also as members flag") diff --git a/docs/test_cases/t00017_class.png b/docs/test_cases/t00017_class.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a0413df5d0d60c00c82592a7edce0b9916d1f1 GIT binary patch literal 24264 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 literal 0 HcmV?d00001 diff --git a/src/config/config.h b/src/config/config.h index 06866cf6..d710862f 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -165,6 +165,8 @@ struct class_diagram : public diagram { virtual ~class_diagram() = default; std::vector classes; + bool include_relations_also_as_members{true}; + bool has_class(std::string clazz) { for (const auto &c : classes) { @@ -316,6 +318,11 @@ template <> struct convert { if (!decode_diagram(node, rhs)) return false; + if (node["include_relations_also_as_members"]) + rhs.include_relations_also_as_members = + node["include_relations_also_as_members"] + .as(); + return true; } }; diff --git a/src/puml/class_diagram_generator.h b/src/puml/class_diagram_generator.h index 5dc3cd28..c4625334 100644 --- a/src/puml/class_diagram_generator.h +++ b/src/puml/class_diagram_generator.h @@ -195,6 +195,56 @@ public: ostr << std::endl; } + // + // Process relationships + // + std::set rendered_relations; + + std::stringstream all_relations_str; + for (const auto &r : c.relationships) { + if (!m_config.should_include_relationship(name(r.type))) + continue; + + std::stringstream relstr; + std::string destination; + try { + if (r.destination.find("#") != std::string::npos || + r.destination.find("@") != std::string::npos) { + destination = m_model.usr_to_name(uns, r.destination); + + // If something went wrong and we have an empty destination + // generate the relationship but comment it out for + // debugging + if (destination.empty()) { + relstr << "' "; + destination = r.destination; + } + } + else { + destination = r.destination; + } + + relstr << m_model.to_alias( + uns, ns_relative(uns, c.full_name(uns))) + << " " << to_string(r.type) << " " + << m_model.to_alias(uns, ns_relative(uns, destination)); + + if (!r.label.empty()) { + relstr << " : " << to_string(r.scope) << r.label; + rendered_relations.emplace(r.label); + } + + relstr << std::endl; + + all_relations_str << relstr.str(); + } + catch (error::uml_alias_missing &e) { + LOG_ERROR("Skipping {} relation from {} to {} due " + "to: {}", + to_string(r.type), c.full_name(uns), destination, e.what()); + } + } + // // Process members // @@ -202,6 +252,10 @@ public: if (!m_config.should_include(m.scope)) continue; + if (!m_config.include_relations_also_as_members && + rendered_relations.find(m.name) != rendered_relations.end()) + continue; + if (m.is_static) ostr << "{static} "; @@ -228,47 +282,8 @@ public: } } - for (const auto &r : c.relationships) { - if (!m_config.should_include_relationship(name(r.type))) - continue; - - std::stringstream relstr; - - std::string destination; - try { - if (r.destination.find("#") != std::string::npos || - r.destination.find("@") != std::string::npos) { - destination = m_model.usr_to_name(uns, r.destination); - - // If something went wrong and we have an empty destination - // generate the relationship but comment it out for - // debugging - if (destination.empty()) { - relstr << "' "; - destination = r.destination; - } - } - else { - destination = r.destination; - } - - relstr << m_model.to_alias( - uns, ns_relative(uns, c.full_name(uns))) - << " " << to_string(r.type) << " " - << m_model.to_alias(uns, ns_relative(uns, destination)); - - if (!r.label.empty()) - relstr << " : " << to_string(r.scope) << r.label; - - relstr << std::endl; - ostr << relstr.str(); - } - catch (error::uml_alias_missing &e) { - LOG_ERROR("Skipping {} relation from {} to {} due " - "to: {}", - to_string(r.type), c.full_name(uns), destination, e.what()); - } - } + // Print relationships + ostr << all_relations_str.str(); } void generate(const enum_ &e, std::ostream &ostr) const diff --git a/tests/t00017/.clanguml b/tests/t00017/.clanguml new file mode 100644 index 00000000..e6942ec3 --- /dev/null +++ b/tests/t00017/.clanguml @@ -0,0 +1,13 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t00017_class: + type: class + include_relations_also_as_members: false + glob: + - ../../tests/t00017/t00017.cc + using_namespace: + - clanguml::t00017 + include: + namespaces: + - clanguml::t00017 diff --git a/tests/t00017/t00017.cc b/tests/t00017/t00017.cc new file mode 100644 index 00000000..d10162a4 --- /dev/null +++ b/tests/t00017/t00017.cc @@ -0,0 +1,55 @@ +namespace clanguml { +namespace t00017 { +class A { +}; + +class B { +}; + +class C { +}; + +class D { +}; + +class E { +}; + +class F { +}; + +class G { +}; + +class H { +}; + +class I { +}; + +class J { +}; + +class K { +}; + +class R { +private: + int some_int; + int *some_int_pointer; + int **some_int_pointer_pointer; + int &some_int_reference; + A a; + B *b; + C &c; + const D *d; + const E &e{}; + F &&f; + G **g; + H ***h; + I *&i; + volatile J *j; + mutable K *k; +}; +} +} diff --git a/tests/t00017/test_case.h b/tests/t00017/test_case.h new file mode 100644 index 00000000..ef469653 --- /dev/null +++ b/tests/t00017/test_case.h @@ -0,0 +1,82 @@ +/** + * tests/t00017/test_case.cc + * + * Copyright (c) 2021 Bartek Kryza + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +TEST_CASE("t00017", "[test-case][class]") +{ + auto [config, db] = load_config("t00017"); + + auto diagram = config.diagrams["t00017_class"]; + + REQUIRE(diagram->name == "t00017_class"); + + REQUIRE(diagram->include.namespaces.size() == 1); + REQUIRE_THAT(diagram->include.namespaces, + VectorContains(std::string{"clanguml::t00017"})); + + REQUIRE(diagram->exclude.namespaces.size() == 0); + + REQUIRE(diagram->should_include("clanguml::t00017::A")); + REQUIRE(diagram->should_include("clanguml::t00017::B")); + REQUIRE(diagram->should_include("clanguml::t00017::C")); + REQUIRE(diagram->should_include("clanguml::t00017::D")); + + auto model = generate_class_diagram(db, diagram); + + REQUIRE(model.name == "t00017_class"); + + auto puml = generate_class_puml(diagram, model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + REQUIRE_THAT(puml, IsClass(_A("A"))); + REQUIRE_THAT(puml, IsClass(_A("B"))); + REQUIRE_THAT(puml, IsClass(_A("C"))); + REQUIRE_THAT(puml, IsClass(_A("D"))); + REQUIRE_THAT(puml, IsClass(_A("E"))); + REQUIRE_THAT(puml, IsClass(_A("F"))); + REQUIRE_THAT(puml, IsClass(_A("G"))); + REQUIRE_THAT(puml, IsClass(_A("H"))); + REQUIRE_THAT(puml, IsClass(_A("I"))); + REQUIRE_THAT(puml, IsClass(_A("J"))); + REQUIRE_THAT(puml, IsClass(_A("K"))); + REQUIRE_THAT(puml, IsClass(_A("R"))); + + REQUIRE_THAT(puml, (IsField("some_int", "int"))); + REQUIRE_THAT(puml, (IsField("some_int_pointer", "int*"))); + REQUIRE_THAT(puml, (IsField("some_int_pointer_pointer", "int**"))); + + // Relationship members should not be rendered as part of this testcase + REQUIRE_THAT(puml, !(IsField("a", _A("A")))); + REQUIRE_THAT(puml, !(IsField("b", _A("B")))); + + REQUIRE_THAT(puml, IsAggregation(_A("R"), _A("A"), "-a")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("B"), "-b")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("C"), "-c")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("D"), "-d")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("E"), "-e")); + REQUIRE_THAT(puml, IsAggregation(_A("R"), _A("F"), "-f")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("G"), "-g")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("H"), "-h")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("I"), "-i")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("J"), "-j")); + REQUIRE_THAT(puml, IsAssociation(_A("R"), _A("K"), "-k")); + + save_puml( + "./" + config.output_directory + "/" + diagram->name + ".puml", puml); +} diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 247dd161..5cd129e8 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -120,6 +120,7 @@ using namespace clanguml::test::matchers; #include "t00014/test_case.h" #include "t00015/test_case.h" #include "t00016/test_case.h" +#include "t00017/test_case.h" // // Sequence diagram tests diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 12a11e65..f077977b 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -45,6 +45,9 @@ test_cases: - name: t00016 title: Unnamed enums and empty templates description: + - name: t00017 + title: Test include relations also as members flag + description: Sequence diagrams: - name: t20001 title: Basic sequence diagram