From ed2b3e188b932f731072084a45cfd066b6145719 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Tue, 13 Dec 2022 23:47:04 +0100 Subject: [PATCH] Added virtual method call test case --- .../visitor/translation_unit_visitor.cc | 3 +- tests/t20025/t20025.cc | 2 +- tests/t20026/.clang-uml | 14 +++++++ tests/t20026/t20026.cc | 25 +++++++++++ tests/t20026/test_case.h | 42 +++++++++++++++++++ tests/test_cases.cc | 1 + tests/test_cases.yaml | 3 ++ 7 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 tests/t20026/.clang-uml create mode 100644 tests/t20026/t20026.cc create mode 100644 tests/t20026/test_case.h diff --git a/src/sequence_diagram/visitor/translation_unit_visitor.cc b/src/sequence_diagram/visitor/translation_unit_visitor.cc index 3a3747e2..c5d34d77 100644 --- a/src/sequence_diagram/visitor/translation_unit_visitor.cc +++ b/src/sequence_diagram/visitor/translation_unit_visitor.cc @@ -819,7 +819,8 @@ bool translation_unit_visitor::VisitCallExpr(clang::CallExpr *expr) return true; // Skip casts, moves and such - if (expr->isCallToStdMove()) return true; + if (expr->isCallToStdMove()) + return true; if (expr->isImplicitCXXThis()) return true; diff --git a/tests/t20025/t20025.cc b/tests/t20025/t20025.cc index 6764e123..9ddaf9c5 100644 --- a/tests/t20025/t20025.cc +++ b/tests/t20025/t20025.cc @@ -36,7 +36,7 @@ int tmain() result = a.a(); result += add(1, 2); - + result += add2(2, 4); return result; diff --git a/tests/t20026/.clang-uml b/tests/t20026/.clang-uml new file mode 100644 index 00000000..083b47ec --- /dev/null +++ b/tests/t20026/.clang-uml @@ -0,0 +1,14 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t20026_sequence: + type: sequence + glob: + - ../../tests/t20026/t20026.cc + include: + namespaces: + - clanguml::t20026 + using_namespace: + - clanguml::t20026 + start_from: + - function: "clanguml::t20026::tmain()" \ No newline at end of file diff --git a/tests/t20026/t20026.cc b/tests/t20026/t20026.cc new file mode 100644 index 00000000..7cb8f606 --- /dev/null +++ b/tests/t20026/t20026.cc @@ -0,0 +1,25 @@ +namespace clanguml { +namespace t20026 { + +struct A { + virtual void a() { } +}; + +struct B : public A { + void a() override { } +}; + +struct C : public B { + void a() override { } +}; + +int tmain() +{ + C *a{}; + + dynamic_cast(a)->a(); + + return 0; +} +} +} \ No newline at end of file diff --git a/tests/t20026/test_case.h b/tests/t20026/test_case.h new file mode 100644 index 00000000..e3298fcf --- /dev/null +++ b/tests/t20026/test_case.h @@ -0,0 +1,42 @@ +/** + * tests/t20026/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("t20026", "[test-case][sequence]") +{ + auto [config, db] = load_config("t20026"); + + auto diagram = config.diagrams["t20026_sequence"]; + + REQUIRE(diagram->name == "t20026_sequence"); + + auto model = generate_sequence_diagram(*db, diagram); + + REQUIRE(model->name() == "t20026_sequence"); + + auto puml = generate_sequence_puml(diagram, *model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + // Check if all calls exist + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("A"), "a()")); + + save_puml( + "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); +} \ No newline at end of file diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 539291ed..e3492193 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -272,6 +272,7 @@ using namespace clanguml::test::matchers; #include "t20023/test_case.h" #include "t20024/test_case.h" #include "t20025/test_case.h" +#include "t20026/test_case.h" /// /// Package diagram tests diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 60d2ea5b..f660db17 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -223,6 +223,9 @@ test_cases: - name: t20025 title: Skip decorator sequence diagram test case description: + - name: t20026 + title: Virtual method call sequence diagram test case + description: Package diagrams: - name: t30001 title: Basic package diagram test case