From 1915bd85b191382ac9b4ae7ffc0a5281eec3bcdb Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Tue, 12 Apr 2022 23:36:26 +0200 Subject: [PATCH] Fixed link generation in include diagrams for include directives --- .../visitor/translation_unit_visitor.cc | 9 +++++---- tests/t40002/test_case.h | 14 ++++++++++++++ tests/test_cases.h | 8 ++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/include_diagram/visitor/translation_unit_visitor.cc b/src/include_diagram/visitor/translation_unit_visitor.cc index 7eeca607..a062391b 100644 --- a/src/include_diagram/visitor/translation_unit_visitor.cc +++ b/src/include_diagram/visitor/translation_unit_visitor.cc @@ -64,7 +64,7 @@ void translation_unit_visitor::process_include_directive( auto include_path = std::filesystem::path(include_directive.full_path()); - // Make sure the include_path is absolute with respect to the + // Make sure the file_path is absolute with respect to the // filesystem, and in normal form if (include_path.is_relative()) { include_path = ctx.config().base_directory() / include_path; @@ -103,9 +103,10 @@ void translation_unit_visitor::process_include_directive( ctx.get_current_file().value().add_relationship( relationship{relationship_type, include_file.alias()}); - include_file.set_file(std::filesystem::absolute(include_path) - .lexically_normal() - .string()); + include_file.set_file( + std::filesystem::absolute(include_directive.full_path()) + .lexically_normal() + .string()); include_file.set_line(0); } else { diff --git a/tests/t40002/test_case.h b/tests/t40002/test_case.h index ef752157..1c53aa4c 100644 --- a/tests/t40002/test_case.h +++ b/tests/t40002/test_case.h @@ -48,6 +48,20 @@ TEST_CASE("t40002", "[test-case][package]") REQUIRE_THAT(puml, IsAssociation(_A("lib1.cc"), _A("lib1.h"))); REQUIRE_THAT(puml, IsAssociation(_A("lib2.cc"), _A("lib2.h"))); + REQUIRE_THAT(puml, + HasLink(_A("lib1.h"), + fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" + "t40002/include/lib1/lib1.h#L0", + clanguml::util::get_git_commit()), + "lib1.h")); + + REQUIRE_THAT(puml, + HasLink(_A("lib2.h"), + fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" + "t40002/include/lib2/lib2.h#L0", + clanguml::util::get_git_commit()), + "lib2.h")); + save_puml( "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); } diff --git a/tests/test_cases.h b/tests/test_cases.h index 835fbb92..0593e223 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -373,6 +373,14 @@ ContainsMatcher HasNote(std::string const &cls, std::string const &position, fmt::format("note {} of {}", position, cls), caseSensitivity)); } +ContainsMatcher HasLink(std::string const &alias, std::string const &link, + std::string const &tooltip, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher(CasedString( + fmt::format("{} [[{}{{{}}}]]", alias, link, tooltip), caseSensitivity)); +} + template ContainsMatcher IsMethod(std::string const &name, std::string const &type = "void",