From e885149cf0a86ef08197078fa0e23232f5e2e6d4 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 27 Feb 2021 14:46:23 +0100 Subject: [PATCH] Added sequence diagram catch matchers --- tests/t00001/test_case.h | 5 +++++ tests/test_cases.cc | 2 ++ tests/test_cases.h | 47 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/tests/t00001/test_case.h b/tests/t00001/test_case.h index 4c2b3c22..641b28e0 100644 --- a/tests/t00001/test_case.h +++ b/tests/t00001/test_case.h @@ -47,6 +47,11 @@ TEST_CASE("Test t00001", "[unit-test]") REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(puml, EndsWith("@enduml\n")); + REQUIRE_THAT(puml, HasCall("A", "log_result")); + REQUIRE_THAT(puml, HasCall("B", "A", "log_result")); + REQUIRE_THAT(puml, HasCallWithResponse("B", "A", "add3")); + REQUIRE_THAT(puml, HasCall("A", "add")); + save_puml( "./" + config.output_directory + "/" + diagram->name + ".puml", puml); } diff --git a/tests/test_cases.cc b/tests/test_cases.cc index d47a6465..4a2e6a6c 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -93,6 +93,8 @@ void save_puml(const std::string &path, const std::string &puml) using clanguml::test::matchers::Abstract; using clanguml::test::matchers::Const; using clanguml::test::matchers::Default; +using clanguml::test::matchers::HasCall; +using clanguml::test::matchers::HasCallWithResponse; using clanguml::test::matchers::IsAbstractClass; using clanguml::test::matchers::IsBaseClass; using clanguml::test::matchers::IsClass; diff --git a/tests/test_cases.h b/tests/test_cases.h index 2e16ec9e..2003cbce 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -143,6 +143,53 @@ struct Default { std::string m_method; }; +struct HasCallWithResultMatcher : ContainsMatcher { + HasCallWithResultMatcher( + CasedString const &comparator, CasedString const &resultComparator) + : ContainsMatcher(comparator) + , m_resultComparator{resultComparator} + { + } + + bool match(std::string const &source) const override + { + return Catch::contains( + m_comparator.adjustString(source), m_comparator.m_str) && + Catch::contains( + m_comparator.adjustString(source), m_resultComparator.m_str); + } + + CasedString m_resultComparator; +}; + +ContainsMatcher HasCall(std::string const &from, std::string const &message, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher( + CasedString(fmt::format("\"{}\" -> \"{}\" : {}()", from, from, message), + caseSensitivity)); +} + +ContainsMatcher HasCall(std::string const &from, std::string const &to, + std::string const &message, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher( + CasedString(fmt::format("\"{}\" -> \"{}\" : {}()", from, to, message), + caseSensitivity)); +} + +auto HasCallWithResponse(std::string const &from, std::string const &to, + std::string const &message, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return HasCallWithResultMatcher( + CasedString(fmt::format("\"{}\" -> \"{}\" : {}()", from, to, message), + caseSensitivity), + CasedString( + fmt::format("\"{}\" --> \"{}\"", to, from), caseSensitivity)); +} + ContainsMatcher IsClass(std::string const &str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) {