From 7c70ab69ad84fd59241575bf023a0a7ab8feaaf3 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Tue, 12 Sep 2023 09:03:30 +0200 Subject: [PATCH] Fixed generation of test cases for diagram notes in mermaid class diagrams --- tests/t00002/.clang-uml | 7 ++++++- tests/t00002/test_case.h | 9 +++++---- tests/t00028/test_case.h | 18 ++++++++++++++---- tests/t00050/.clang-uml | 28 +++++++++++++++++++++++++++- tests/t00050/test_case.h | 13 +++++++++++++ tests/test_cases.h | 10 ++++++++++ 6 files changed, 75 insertions(+), 10 deletions(-) diff --git a/tests/t00002/.clang-uml b/tests/t00002/.clang-uml index 1bb1ed91..772207d9 100644 --- a/tests/t00002/.clang-uml +++ b/tests/t00002/.clang-uml @@ -18,4 +18,9 @@ diagrams: - | note right of {{ alias("D") }} {{ comment("D").text }} - end note \ No newline at end of file + end note + mermaid: + after: + - '{% set e=element("A") %} note for {{ e.alias }} "{{ trim(e.comment.brief.0) }}"' + - '{% set e=element("clanguml::t00002::B") %} note for {{ e.alias }} "{{ trim(e.comment.brief.0) }}"' + - 'note for {{ alias("D") }} "{{ comment("D").text }}"' \ No newline at end of file diff --git a/tests/t00002/test_case.h b/tests/t00002/test_case.h index 796e8ef2..78eb6e66 100644 --- a/tests/t00002/test_case.h +++ b/tests/t00002/test_case.h @@ -110,9 +110,11 @@ TEST_CASE("t00002", "[test-case][class]") auto mmd = generate_class_mermaid(diagram, *model); mermaid::AliasMatcher _A(mmd); + using mermaid::HasNote; + using mermaid::IsAbstractClass; REQUIRE_THAT(mmd, StartsWith("classDiagram")); - REQUIRE_THAT(mmd, mermaid::IsAbstractClass(_A("A"))); + REQUIRE_THAT(mmd, IsAbstractClass(_A("A"))); REQUIRE_THAT(mmd, IsClass(_A("B"))); REQUIRE_THAT(mmd, IsClass(_A("C"))); REQUIRE_THAT(mmd, IsClass(_A("D"))); @@ -126,9 +128,8 @@ TEST_CASE("t00002", "[test-case][class]") REQUIRE_THAT(mmd, (mermaid::IsMethod("foo_a"))); REQUIRE_THAT(mmd, (mermaid::IsMethod("foo_c"))); - // REQUIRE_THAT(mmd, HasNote(_A("A"), "left", "This is class - // A")); REQUIRE_THAT(mmd, HasNote(_A("B"), "top", "This is class - // B")); + REQUIRE_THAT(mmd, HasNote(_A("A"), "left", "This is class A")); + REQUIRE_THAT(mmd, HasNote(_A("B"), "top", "This is class B")); REQUIRE_THAT(mmd, mermaid::HasLink(_A("A"), diff --git a/tests/t00028/test_case.h b/tests/t00028/test_case.h index 2ebe094f..372a1038 100644 --- a/tests/t00028/test_case.h +++ b/tests/t00028/test_case.h @@ -76,6 +76,7 @@ note.)"; auto src = generate_class_mermaid(diagram, *model); mermaid::AliasMatcher _A(src); + using mermaid::HasNote; using mermaid::IsEnum; REQUIRE_THAT(src, IsClass(_A("A"))); @@ -85,10 +86,19 @@ note.)"; REQUIRE_THAT(src, IsClass(_A("E"))); REQUIRE_THAT(src, IsEnum(_A("F"))); REQUIRE_THAT(src, IsClass(_A("R"))); - // REQUIRE_THAT(src, HasNote(_A("A"), "top", "A class note.")); - // REQUIRE_THAT(src, HasNote(_A("B"), "left", "B class note.")); - // REQUIRE_THAT(src, HasNote(_A("C"), "bottom", "C class - // note.")); + REQUIRE_THAT(src, HasNote(_A("A"), "top", "A class note.")); + REQUIRE_THAT(src, HasNote(_A("B"), "left", "B class note.")); + REQUIRE_THAT(src, HasNote(_A("C"), "bottom", "C class note.")); + const auto d_note = R"( +D +class +note.)"; + REQUIRE_THAT(src, HasNote(_A("D"), "left", d_note)); + REQUIRE_THAT( + src, HasNote(_A("E"), "left", "E template class note.")); + REQUIRE_THAT(src, HasNote(_A("F"), "bottom", "F enum note.")); + REQUIRE_THAT(src, !HasNote(_A("G"), "left", "G class note.")); + REQUIRE_THAT(src, HasNote(_A("R"), "right", "R class note.")); save_mermaid(config.output_directory(), diagram->name + ".mmd", src); } diff --git a/tests/t00050/.clang-uml b/tests/t00050/.clang-uml index 2b06a49d..9a80b579 100644 --- a/tests/t00050/.clang-uml +++ b/tests/t00050/.clang-uml @@ -62,7 +62,7 @@ diagrams: {% endfor %} {% endif %} - {# Render template paramete if any #} + {# Render template parameters if any #} {% if existsIn(e, "comment") and existsIn(e.comment, "tparam") %} {% set c=e.comment %} @@ -75,3 +75,29 @@ diagrams: {% endif %} {% endfor %} + mermaid: + after: + - | + note for {{ alias("NoSuchClass") }} "{{ comment("NoSuchClass").formatted }}" + - | + note for {{ alias("A") }} "{{ comment("clanguml::t00050::A").formatted }}" + - | + note for {{ element("clanguml::t00050::A").alias }} {% set e=element("clanguml::t00050::A") %} "{{ e.comment.formatted }}" + note for {{ alias("C") }} "{{ trim(comment("clanguml::t00050::C").text) }}" + {% set cmt=comment("clanguml::t00050::G").paragraph %} + note for {{ alias("G") }} "{{ trim(cmt.0) }}" + note for {{ alias("G") }} "{{ trim(cmt.1) }}" + note for {{ alias("G") }} "{{ trim(cmt.2) }}" + - | + {# Render brief comments and todos, if any were written for an element #} + {% for e in diagram.elements %} + {% if existsIn(e, "comment") and existsIn(e.comment, "brief") %} + note for {{ e.alias }} {% set c=e.comment %} "{{ c.brief.0 }}" + {% endif %} + {% if existsIn(e, "comment") and existsIn(e.comment, "todo") %} + {% set c=e.comment %} + {% for t in c.todo %} + note for {{ e.alias }} "**TODO** {{ t }}" + {% endfor %} + {% endif %} + {% endfor %} diff --git a/tests/t00050/test_case.h b/tests/t00050/test_case.h index 72c815c8..cdb593b8 100644 --- a/tests/t00050/test_case.h +++ b/tests/t00050/test_case.h @@ -73,6 +73,7 @@ TEST_CASE("t00050", "[test-case][class]") auto src = generate_class_mermaid(diagram, *model); mermaid::AliasMatcher _A(src); + using mermaid::HasNote; using mermaid::IsEnum; // Check if all classes exist @@ -82,6 +83,18 @@ TEST_CASE("t00050", "[test-case][class]") REQUIRE_THAT(src, IsClass(_A("utils::D"))); REQUIRE_THAT(src, IsEnum(_A("E"))); + REQUIRE_THAT(src, HasNote(_A("A"), "left")); + REQUIRE_THAT(src, HasNote(_A("A"), "right")); + REQUIRE_THAT(src, HasNote(_A("B"), "top")); + REQUIRE_THAT(src, HasNote(_A("C"), "top")); + REQUIRE_THAT(src, HasNote(_A("utils::D"), "top")); + REQUIRE_THAT(src, !HasNote(_A("E"), "bottom")); + REQUIRE_THAT(src, !HasNote(_A("NoComment"), "top")); + REQUIRE_THAT(src, HasNote(_A("F"), "top")); + REQUIRE_THAT(src, HasNote(_A("G"), "top")); + REQUIRE_THAT(src, HasNote(_A("G"), "bottom")); + REQUIRE_THAT(src, HasNote(_A("G"), "right")); + save_mermaid(config.output_directory(), diagram->name + ".mmd", src); } } \ No newline at end of file diff --git a/tests/test_cases.h b/tests/test_cases.h index 0ac7e500..9dabbc88 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -686,6 +686,16 @@ ContainsMatcher HasNote(std::string const &cls, std::string const &position, fmt::format("note {} of {}", position, cls), caseSensitivity)); } +namespace mermaid { +ContainsMatcher HasNote(std::string const &cls, + std::string const &position = "", std::string const ¬e = "", + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher( + CasedString(fmt::format("note for {}", cls), caseSensitivity)); +} +} + ContainsMatcher HasMemberNote(std::string const &cls, std::string const &member, std::string const &position, std::string const ¬e = "", CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)