diff --git a/tests/t00050/.clang-uml b/tests/t00050/.clang-uml new file mode 100644 index 00000000..62ef82ce --- /dev/null +++ b/tests/t00050/.clang-uml @@ -0,0 +1,38 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t00050_class: + type: class + glob: + - ../../tests/t00050/t00050.cc + include: + namespaces: + - clanguml::t00050 + using_namespace: clanguml::t00050 + plantuml: + after: + - > + note left of {{ alias("A") }} + {{ comment("A") }} + end note + + - > + {% for element in diagram.elements %} + {% if element.type == "class" and existsIn(element, "comment") %} + + note top of {{ element.alias }} + {{ element.comment }} + end note + + {% endif %} + {% endfor %} + - > + {% for element in diagram.elements %} + {% if element.type == "enum" and existsIn(element, "comment") %} + + note bottom of {{ element.alias }} + {{ element.comment }} + end note + + {% endif %} + {% endfor %} \ No newline at end of file diff --git a/tests/t00050/t00050.cc b/tests/t00050/t00050.cc new file mode 100644 index 00000000..09d14545 --- /dev/null +++ b/tests/t00050/t00050.cc @@ -0,0 +1,65 @@ +namespace clanguml { + +/// Vivamus integer non suscipit taciti mus +class A { }; + +namespace t00050 { + +/// Lorem ipsum dolor sit +class A { }; + +/** + * Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis + * vehicula class ultricies mollis dictumst, aenean non a in donec nulla. + * Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam, + * integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora + * tellus ligula porttitor metus. + */ +class B { }; + +/// Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis +/// vehicula class ultricies mollis dictumst, aenean non a in donec nulla. +/// Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam, +/// integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora +/// tellus ligula porttitor metus. +/// +/// Vivamus integer non suscipit taciti mus etiam at primis tempor sagittis sit, +/// euismod libero facilisi aptent elementum felis blandit cursus gravida sociis +/// erat ante, eleifend lectus nullam dapibus netus feugiat curae curabitur est +/// ad. Massa curae fringilla porttitor quam sollicitudin iaculis aptent leo +/// ligula euismod dictumst, orci penatibus mauris eros etiam praesent erat +/// volutpat posuere hac. Metus fringilla nec ullamcorper odio aliquam lacinia +/// conubia mauris tempor, etiam ultricies proin quisque lectus sociis id +/// tristique, integer phasellus taciti pretium adipiscing tortor sagittis +/// ligula. +/// +/// Mollis pretium lorem primis senectus habitasse lectus scelerisque +/// donec, ultricies tortor suspendisse adipiscing fusce morbi volutpat +/// pellentesque, consectetur mi risus molestie curae malesuada cum. Dignissim +/// lacus convallis massa mauris enim ad mattis magnis senectus montes, mollis +/// taciti phasellus accumsan bibendum semper blandit suspendisse faucibus nibh +/// est, metus lobortis morbi cras magna vivamus per risus fermentum. Dapibus +/// imperdiet praesent magnis ridiculus congue gravida curabitur dictum +/// sagittis, enim et magna sit inceptos sodales parturient pharetra mollis, +/// aenean vel nostra tellus commodo pretium sapien sociosqu. +class C { }; + +/// Mollis pretium lorem primis +namespace utils { + +/// Lorem ipsum dolor sit amet consectetur adipiscing elit, urna consequat felis +/// vehicula class ultricies mollis dictumst, aenean non a in donec nulla. +/// Phasellus ante pellentesque erat cum risus consequat imperdiet aliquam, +/// integer placerat et turpis mi eros nec lobortis taciti, vehicula nisl litora +/// tellus ligula porttitor metus. +class D { }; + +} + +/// Mollis pretium lorem primis +enum class E { E1, E2, E3 }; + +class NoComment {}; + +} +} \ No newline at end of file diff --git a/tests/t00050/test_case.h b/tests/t00050/test_case.h new file mode 100644 index 00000000..0ae81f49 --- /dev/null +++ b/tests/t00050/test_case.h @@ -0,0 +1,54 @@ +/** + * tests/t00050/test_case.h + * + * Copyright (c) 2021-2022 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("t00050", "[test-case][class]") +{ + auto [config, db] = load_config("t00050"); + + auto diagram = config.diagrams["t00050_class"]; + + REQUIRE(diagram->name == "t00050_class"); + + auto model = generate_class_diagram(*db, diagram); + + REQUIRE(model->name() == "t00050_class"); + + auto puml = generate_class_puml(diagram, *model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + // Check if all classes exist + REQUIRE_THAT(puml, IsClass(_A("A"))); + REQUIRE_THAT(puml, IsClass(_A("B"))); + REQUIRE_THAT(puml, IsClass(_A("C"))); + REQUIRE_THAT(puml, IsClass(_A("utils::D"))); + REQUIRE_THAT(puml, IsEnum(_A("E"))); + + REQUIRE_THAT(puml, HasNote(_A("A"), "left")); + REQUIRE_THAT(puml, HasNote(_A("A"), "top")); + REQUIRE_THAT(puml, HasNote(_A("B"), "top")); + REQUIRE_THAT(puml, HasNote(_A("C"), "top")); + REQUIRE_THAT(puml, HasNote(_A("utils::D"), "top")); + REQUIRE_THAT(puml, HasNote(_A("E"), "bottom")); + REQUIRE_THAT(puml, !HasNote(_A("NoComment"), "top")); + + save_puml( + "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); +} \ No newline at end of file