From c110d19a7825d2a78db3dba3c56ecb3f9acf175e Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 13 May 2023 14:58:24 +0200 Subject: [PATCH] Added type_list test case --- tests/t00064/.clang-uml | 15 +++++++ tests/t00064/t00064.cc | 28 ++++++++++++++ tests/t00064/test_case.h | 84 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 tests/t00064/.clang-uml create mode 100644 tests/t00064/t00064.cc create mode 100644 tests/t00064/test_case.h diff --git a/tests/t00064/.clang-uml b/tests/t00064/.clang-uml new file mode 100644 index 00000000..7a15ca17 --- /dev/null +++ b/tests/t00064/.clang-uml @@ -0,0 +1,15 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t00064_class: + type: class + glob: + - ../../tests/t00064/t00064.cc + include: + namespaces: + - clanguml::t00064 + using_namespace: + - clanguml::t00064 + plantuml: + before: + - left to right direction \ No newline at end of file diff --git a/tests/t00064/t00064.cc b/tests/t00064/t00064.cc new file mode 100644 index 00000000..baf4f292 --- /dev/null +++ b/tests/t00064/t00064.cc @@ -0,0 +1,28 @@ +namespace clanguml { +namespace t00064 { + +template struct type_list { }; + +template struct head; +template +struct head> { + using type = Head; +}; + +template using head_t = typename head::type; + +template class type_group_pair; +template +class type_group_pair, type_list> { }; + +struct A { }; +struct B { }; +struct C { }; + +class R { +public: + type_list aboolint; + type_group_pair, type_list> abc; +}; +} +} \ No newline at end of file diff --git a/tests/t00064/test_case.h b/tests/t00064/test_case.h new file mode 100644 index 00000000..6f10678d --- /dev/null +++ b/tests/t00064/test_case.h @@ -0,0 +1,84 @@ +/** + * tests/t00064/test_case.h + * + * Copyright (c) 2021-2023 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("t00064", "[test-case][class]") +{ + auto [config, db] = load_config("t00064"); + + auto diagram = config.diagrams["t00064_class"]; + + REQUIRE(diagram->name == "t00064_class"); + + auto model = generate_class_diagram(*db, diagram); + + REQUIRE(model->name() == "t00064_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, IsClassTemplate("type_group_pair", "typename,typename")); + + // Check if class templates exist + // REQUIRE_THAT(puml, IsClassTemplate("A", "T,P,CMP,int N")); + + // Check concepts + // REQUIRE_THAT(puml, IsConcept(_A("AConcept"))); + // REQUIRE_THAT(puml, + // IsConceptRequirement( + // _A("AConcept"), "sizeof (T) > sizeof (P)")); + + // Check if all enums exist + // REQUIRE_THAT(puml, IsEnum(_A("Lights"))); + + // Check if all inner classes exist + // REQUIRE_THAT(puml, IsInnerClass(_A("A"), _A("AA"))); + + // Check if all inheritance relationships exist + // REQUIRE_THAT(puml, IsBaseClass(_A("Base"), _A("Child"))); + + // Check if all methods exist + // REQUIRE_THAT(puml, (IsMethod("foo"))); + + // Check if all fields exist + // REQUIRE_THAT(puml, (IsField("private_member", "int"))); + + // Check if all relationships exist + // REQUIRE_THAT(puml, IsAssociation(_A("D"), _A("A"), "-as")); + // REQUIRE_THAT(puml, IsDependency(_A("R"), _A("B"))); + // REQUIRE_THAT(puml, IsAggregation(_A("R"), _A("D"), "-ag")); + // REQUIRE_THAT(puml, IsComposition(_A("R"), _A("D"), "-ac")); + // REQUIRE_THAT(puml, IsInstantiation(_A("ABCD::F"), _A("F"))); + + save_puml( + config.output_directory() + "/" + diagram->name + ".puml", puml); + } + + { + auto j = generate_class_json(diagram, *model); + + using namespace json; + + save_json(config.output_directory() + "/" + diagram->name + ".json", j); + } +} \ No newline at end of file