diff --git a/src/sequence_diagram/visitor/translation_unit_visitor.cc b/src/sequence_diagram/visitor/translation_unit_visitor.cc index 0328eb74..b5bfbdef 100644 --- a/src/sequence_diagram/visitor/translation_unit_visitor.cc +++ b/src/sequence_diagram/visitor/translation_unit_visitor.cc @@ -93,6 +93,8 @@ void translation_unit_visitor::process_activities(const cppast::cpp_function &e) .lookup_definition(function_call.get_callee_id()) .value(); m.to = cx::util::ns(callee) + "::" + callee.name(); + if (callee.kind() == cpp_entity_kind::function_t) + m.to += "()"; if (!ctx.config().should_include(m.to)) continue; diff --git a/tests/t20002/.clang-uml b/tests/t20002/.clang-uml new file mode 100644 index 00000000..29d74b71 --- /dev/null +++ b/tests/t20002/.clang-uml @@ -0,0 +1,14 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t20002_sequence: + type: sequence + glob: + - ../../tests/t20002/t20002.cc + include: + namespaces: + - clanguml::t20002 + using_namespace: + - clanguml::t20002 + start_from: + - function: "clanguml::t20002::m1()" diff --git a/tests/t20002/t20002.cc b/tests/t20002/t20002.cc new file mode 100644 index 00000000..9888c599 --- /dev/null +++ b/tests/t20002/t20002.cc @@ -0,0 +1,16 @@ +#include +#include +#include + +namespace clanguml { +namespace t20002 { + +void m4() { } + +void m3() { m4(); } + +void m2() { m3(); } + +void m1() { m2(); } +} +} diff --git a/tests/t20002/test_case.h b/tests/t20002/test_case.h new file mode 100644 index 00000000..01e80f02 --- /dev/null +++ b/tests/t20002/test_case.h @@ -0,0 +1,46 @@ +/** + * tests/t20002/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("t20002", "[test-case][sequence]") +{ + auto [config, db] = load_config("t20002"); + + auto diagram = config.diagrams["t20002_sequence"]; + + REQUIRE(diagram->include.namespaces.size() == 1); + REQUIRE_THAT(diagram->include.namespaces, + VectorContains(std::string{"clanguml::t20002"})); + + REQUIRE(diagram->name == "t20002_sequence"); + + auto model = generate_sequence_diagram(db, diagram); + + REQUIRE(model.name == "t20002_sequence"); + + auto puml = generate_sequence_puml(diagram, model); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + REQUIRE_THAT(puml, HasFunctionCall("m1", "m2")); + REQUIRE_THAT(puml, HasFunctionCall("m2", "m3")); + REQUIRE_THAT(puml, HasFunctionCall("m3", "m4")); + + save_puml( + "./" + config.output_directory + "/" + diagram->name + ".puml", puml); +} diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 999f6828..2e3dc9b5 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -145,6 +145,7 @@ using namespace clanguml::test::matchers; // Sequence diagram tests // #include "t20001/test_case.h" +#include "t20002/test_case.h" // // Other tests (e.g. configuration file) diff --git a/tests/test_cases.h b/tests/test_cases.h index 625ad19d..12088b96 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -127,6 +127,15 @@ ContainsMatcher HasCall(std::string const &from, std::string const &message, caseSensitivity)); } +ContainsMatcher HasFunctionCall(std::string const &from, + std::string const &message, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher(CasedString( + fmt::format("\"{}()\" -> \"{}()\" : {}()", from, message, message), + caseSensitivity)); +} + ContainsMatcher HasCall(std::string const &from, std::string const &to, std::string const &message, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index df851df1..9989b495 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -101,7 +101,10 @@ test_cases: description: Sequence diagrams: - name: t20001 - title: Basic sequence diagram + title: Basic sequence diagram test case + description: + - name: t20002 + title: Free function sequence diagram test case description: Configuration diagrams: - name: t90000