From 14c2cb62637db21b19fd3901613d5c8c0e30ebdd Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sun, 4 Dec 2022 23:38:26 +0100 Subject: [PATCH] Fixed handling of arguments in sequence diagrams --- .../visitor/translation_unit_visitor.cc | 16 ++++---- tests/t20006/test_case.h | 40 +++++++++++-------- tests/t20007/test_case.h | 10 +++-- tests/t20008/test_case.h | 19 +++++---- tests/t20009/test_case.h | 13 +++--- tests/t20010/test_case.h | 16 ++++---- tests/t20011/test_case.h | 12 +++--- tests/t20012/test_case.h | 32 +++++++-------- tests/test_cases.h | 2 +- 9 files changed, 86 insertions(+), 74 deletions(-) diff --git a/src/sequence_diagram/visitor/translation_unit_visitor.cc b/src/sequence_diagram/visitor/translation_unit_visitor.cc index 59b87ac3..df2233f3 100644 --- a/src/sequence_diagram/visitor/translation_unit_visitor.cc +++ b/src/sequence_diagram/visitor/translation_unit_visitor.cc @@ -304,7 +304,7 @@ bool translation_unit_visitor::VisitCXXMethodDecl(clang::CXXMethodDecl *m) for (const auto *param : m->parameters()) { m_ptr->add_parameter(simplify_system_template( - common::to_string(param->getType(), m->getASTContext()))); + common::to_string(param->getType(), m->getASTContext(), false))); } set_source_location(*m, *m_ptr); @@ -372,8 +372,8 @@ bool translation_unit_visitor::VisitFunctionDecl(clang::FunctionDecl *f) f_ptr->set_namespace(ns); for (const auto *param : f->parameters()) { - f_ptr->add_parameter(simplify_system_template( - common::to_string(param->getType(), f->getASTContext()))); + f_ptr->add_parameter(simplify_system_template(common::to_string( + param->getType(), f->getASTContext(), false))); } f_ptr->set_id(common::to_id(f_ptr->full_name(false))); @@ -415,7 +415,7 @@ bool translation_unit_visitor::VisitFunctionTemplateDecl( for (const auto *param : function_template->getTemplatedDecl()->parameters()) { f_ptr->add_parameter(simplify_system_template(common::to_string( - param->getType(), function_template->getASTContext()))); + param->getType(), function_template->getASTContext(), false))); } f_ptr->set_id(common::to_id(f_ptr->full_name(false))); @@ -426,7 +426,6 @@ bool translation_unit_visitor::VisitFunctionTemplateDecl( set_unique_id(function_template->getID(), f_ptr->id()); - // TODO: Handle overloaded functions with different arguments diagram().add_participant(std::move(f_ptr)); return true; @@ -1657,11 +1656,12 @@ bool translation_unit_visitor::simplify_system_template( std::string translation_unit_visitor::simplify_system_template( const std::string &full_name) const { - if (config().type_aliases().count(full_name) > 0) { - return config().type_aliases().at(full_name); + std::string result{full_name}; + for(const auto& [k, v] : config().type_aliases()) { + util::replace_all(result, k, v); } - return full_name; + return result; } std::string translation_unit_visitor::make_lambda_name( diff --git a/tests/t20006/test_case.h b/tests/t20006/test_case.h index be090ce1..dcedefb0 100644 --- a/tests/t20006/test_case.h +++ b/tests/t20006/test_case.h @@ -38,30 +38,36 @@ TEST_CASE("t20006", "[test-case][sequence]") REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b(int)")); REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a1(int)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b(std::string)")); REQUIRE_THAT( - puml, HasCall(_A("B"), _A("A"), "a2")); - - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("BB"), "bb1")); - REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa1")); - - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("BB"), "bb2")); - REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa2")); + puml, HasCall(_A("tmain()"), _A("B"), "b(std::string)")); + REQUIRE_THAT(puml, + HasCall(_A("B"), _A("A"), "a2(std::string)")); REQUIRE_THAT( - puml, HasCall(_A("tmain()"), _A("BB"), "bb1")); - REQUIRE_THAT( - puml, HasCall(_A("BB"), _A("AA"), "aa2")); + puml, HasCall(_A("tmain()"), _A("BB"), "bb1(int,int)")); + REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa1(int)")); REQUIRE_THAT( - puml, HasCall(_A("tmain()"), _A("BB"), "bb2")); - REQUIRE_THAT( - puml, HasCall(_A("BB"), _A("AA"), "aa1")); + puml, HasCall(_A("tmain()"), _A("BB"), "bb2(int,int)")); + REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa2(int)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("BB"), "bb1")); + REQUIRE_THAT(puml, + HasCall( + _A("tmain()"), _A("BB"), "bb1(int,std::string)")); REQUIRE_THAT( - puml, HasCall(_A("BB"), _A("BB"), "bb2")); - REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa2")); + puml, HasCall(_A("BB"), _A("AA"), "aa2(int)")); + + REQUIRE_THAT(puml, + HasCall( + _A("tmain()"), _A("BB"), "bb2(int,std::string)")); + REQUIRE_THAT( + puml, HasCall(_A("BB"), _A("AA"), "aa1(int)")); + + REQUIRE_THAT( + puml, HasCall(_A("tmain()"), _A("BB"), "bb1(int,float)")); + REQUIRE_THAT(puml, + HasCall(_A("BB"), _A("BB"), "bb2(int,float)")); + REQUIRE_THAT(puml, HasCall(_A("BB"), _A("AA"), "aa2(int)")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/t20007/test_case.h b/tests/t20007/test_case.h index 5fc2d26a..5f639b51 100644 --- a/tests/t20007/test_case.h +++ b/tests/t20007/test_case.h @@ -35,12 +35,14 @@ TEST_CASE("t20007", "[test-case][sequence]") REQUIRE_THAT(puml, EndsWith("@enduml\n")); // Check if all calls exist - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("Adder"), "add")); - REQUIRE_THAT( - puml, HasCall(_A("tmain()"), _A("Adder"), "add")); + REQUIRE_THAT(puml, + HasCall(_A("tmain()"), _A("Adder"), "add(int &&,int &&)")); + REQUIRE_THAT(puml, + HasCall(_A("tmain()"), _A("Adder"), + "add(int &&,float &&,double &&)")); REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("Adder"), - "add")); + "add(std::string &&,std::string &&,std::string &&)")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/t20008/test_case.h b/tests/t20008/test_case.h index 221485e2..4f214e19 100644 --- a/tests/t20008/test_case.h +++ b/tests/t20008/test_case.h @@ -35,18 +35,21 @@ TEST_CASE("t20008", "[test-case][sequence]") REQUIRE_THAT(puml, EndsWith("@enduml\n")); // Check if all calls exist - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a1")); - REQUIRE_THAT(puml, !HasCall(_A("B"), _A("A"), "a2")); - REQUIRE_THAT(puml, !HasCall(_A("B"), _A("A"), "a3")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b(int)")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a1(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("A"), "a2(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("A"), "a3(int)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); REQUIRE_THAT( - puml, HasCall(_A("B"), _A("A"), "a2")); + puml, HasCall(_A("tmain()"), _A("B"), "b(const char *)")); + REQUIRE_THAT(puml, + HasCall( + _A("B"), _A("A"), "a2(const char *)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); REQUIRE_THAT( - puml, HasCall(_A("B"), _A("A"), "a3")); + puml, HasCall(_A("tmain()"), _A("B"), "b(std::string)")); + REQUIRE_THAT(puml, + HasCall(_A("B"), _A("A"), "a3(std::string)")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/t20009/test_case.h b/tests/t20009/test_case.h index 359e625a..bddc823e 100644 --- a/tests/t20009/test_case.h +++ b/tests/t20009/test_case.h @@ -35,15 +35,16 @@ TEST_CASE("t20009", "[test-case][sequence]") REQUIRE_THAT(puml, EndsWith("@enduml\n")); // Check if all calls exist - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); REQUIRE_THAT( - puml, HasCall(_A("B"), _A("A"), "a")); + puml, HasCall(_A("tmain()"), _A("B"), "b(std::string)")); + REQUIRE_THAT(puml, + HasCall(_A("B"), _A("A"), "a(std::string)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b(int)")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a(int)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b(float)")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a(float)")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); } \ No newline at end of file diff --git a/tests/t20010/test_case.h b/tests/t20010/test_case.h index b2be4711..9e2c6594 100644 --- a/tests/t20010/test_case.h +++ b/tests/t20010/test_case.h @@ -35,17 +35,17 @@ TEST_CASE("t20010", "[test-case][sequence]") REQUIRE_THAT(puml, EndsWith("@enduml\n")); // Check if all calls exist - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b1")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a1")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b1()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a1()")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b2")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a2")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b2()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a2()")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b3")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a3")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b3()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a3()")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b4")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a4")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("B"), "b4()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("A"), "a4()")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/t20011/test_case.h b/tests/t20011/test_case.h index 55638487..f0640636 100644 --- a/tests/t20011/test_case.h +++ b/tests/t20011/test_case.h @@ -35,13 +35,13 @@ TEST_CASE("t20011", "[test-case][sequence]") REQUIRE_THAT(puml, EndsWith("@enduml\n")); // Check if all calls exist - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("A"), "a")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "a")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("A"), "a(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "a(int)")); - REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("A"), "b")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "c")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "d")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "b")); + REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("A"), "b(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "c(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "d(int)")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "b(int)")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/t20012/test_case.h b/tests/t20012/test_case.h index bc789226..b40f10e8 100644 --- a/tests/t20012/test_case.h +++ b/tests/t20012/test_case.h @@ -37,34 +37,34 @@ TEST_CASE("t20012", "[test-case][sequence]") // Check if all calls exist REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("tmain()::(lambda t20012.cc:49:20)"), - "operator()")); + "operator()()")); REQUIRE_THAT( - puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("A"), "a")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aa")); - REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aaa")); + puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("A"), "a()")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aa()")); + REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aaa()")); REQUIRE_THAT( - puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("B"), "b")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bb")); - REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bbb")); + puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("B"), "b()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bb()")); + REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bbb()")); REQUIRE_THAT( - puml, HasCall(_A("tmain()::(lambda t20012.cc:62:20)"), _A("C"), "c")); - REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "cc")); - REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc")); + puml, HasCall(_A("tmain()::(lambda t20012.cc:62:20)"), _A("C"), "c()")); + REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "cc()")); + REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc()")); REQUIRE_THAT(puml, HasCall(_A("tmain()::(lambda t20012.cc:62:20)"), - _A("tmain()::(lambda t20012.cc:49:20)"), "operator()")); + _A("tmain()::(lambda t20012.cc:49:20)"), "operator()()")); - REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc")); + REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc()")); - REQUIRE_THAT( - puml, HasCall(_A("tmain()"), _A("R"), "r")); + REQUIRE_THAT(puml, + HasCall(_A("tmain()"), _A("R"), "r()")); REQUIRE_THAT(puml, HasCall(_A("R"), - _A("tmain()::(lambda t20012.cc:68:9)"), "operator()")); + _A("tmain()::(lambda t20012.cc:68:9)"), "operator()()")); REQUIRE_THAT( - puml, HasCall(_A("tmain()::(lambda t20012.cc:68:9)"), _A("C"), "c")); + puml, HasCall(_A("tmain()::(lambda t20012.cc:68:9)"), _A("C"), "c()")); save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); diff --git a/tests/test_cases.h b/tests/test_cases.h index 23baa2b4..25ddc23f 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -131,7 +131,7 @@ ContainsMatcher HasCall(std::string const &from, std::string const &to, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) { return ContainsMatcher(CasedString( - fmt::format("{} -> {} : {}", from, to, message), caseSensitivity)); + fmt::format("{} -> {} : {}\n", from, to, message), caseSensitivity)); } auto HasCallWithResponse(std::string const &from, std::string const &to,