From a7e2f7a4964a73795072df456d8828296809dbe4 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Wed, 22 May 2024 22:14:28 +0200 Subject: [PATCH] Fixed MessageChainsOrder test helper function for JSON --- .../json/sequence_diagram_generator.cc | 2 +- tests/test_cases.h | 47 ++++++++++++------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/sequence_diagram/generators/json/sequence_diagram_generator.cc b/src/sequence_diagram/generators/json/sequence_diagram_generator.cc index 5202764c..ad2b206d 100644 --- a/src/sequence_diagram/generators/json/sequence_diagram_generator.cc +++ b/src/sequence_diagram/generators/json/sequence_diagram_generator.cc @@ -40,7 +40,7 @@ void to_json(nlohmann::json &j, const participant &c) j["name"] = dynamic_cast(c).method_name(); } - j["full_name"] = c.full_name(false); + j["full_name"] = generators::json::render_name(c.full_name(false)); if (c.type_name() == "function" || c.type_name() == "function_template") { const auto &f = dynamic_cast(c); diff --git a/tests/test_cases.h b/tests/test_cases.h index fb561a42..3ab946b3 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -719,6 +719,8 @@ template bool MessageChainsOrder( const DiagramType &d, std::vector> message_chains) { + // Try to match each chain to each sequence - sequence order depends + // on platform and LLVM version for (const auto &message_chain : message_chains) { if (!MessageOrder(d, message_chain)) return false; @@ -2515,31 +2517,40 @@ template <> bool MessageChainsOrder( const json_t &d, std::vector> message_chains) { - uint32_t chain_index{0}; + const auto sequence_chains_count{ + d.src["sequences"][0]["message_chains"].size()}; + for (const auto &messages : message_chains) { - int64_t offset{0}; + for (uint32_t chain_index = 0; chain_index < sequence_chains_count; + chain_index++) { + int64_t offset{0}; - std::vector order; - order.reserve(messages.size()); - std::transform(messages.begin(), messages.end(), - std::back_inserter(order), - [&d, &offset, chain_index](const auto &m) { - offset = find_message_in_chain(d, m, offset, true, chain_index); - return offset; - }); + std::vector order; + order.reserve(messages.size()); + std::transform(messages.begin(), messages.end(), + std::back_inserter(order), + [&d, &offset, chain_index](const auto &m) -> int64_t { + try { + offset = find_message_in_chain( + d, m, offset, true, chain_index); + return offset; + } + catch (...) { + return 0; + } + }); - bool are_messages_in_order = std::is_sorted(order.begin(), order.end()); + bool are_messages_in_order = + std::is_sorted(order.begin(), order.end()); - chain_index++; - - if (!are_messages_in_order) { - FAIL(fmt::format( - "Messages are not in order: \n[{}]", fmt::join(order, ",\n"))); - return false; + if (are_messages_in_order) + return true; } } - return true; + FAIL(fmt::format("Messages are not in order")); + + return false; } template <>