From 4c3a662febacd5cdba9fe2f2c73233d4c27cba9c Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sun, 25 Jul 2021 12:39:21 +0200 Subject: [PATCH] Added strategy pattern test case --- docs/test_cases.md | 1 + docs/test_cases/t00022.md | 9 ++--- docs/test_cases/t00023.md | 65 +++++++++++++++++++++++++++++++ docs/test_cases/t00023_class.png | Bin 0 -> 20855 bytes tests/t00023/.clanguml | 12 ++++++ tests/t00023/t00023.cc | 40 +++++++++++++++++++ tests/t00023/test_case.h | 50 ++++++++++++++++++++++++ tests/test_cases.cc | 1 + tests/test_cases.yaml | 3 ++ 9 files changed, 176 insertions(+), 5 deletions(-) create mode 100644 docs/test_cases/t00023.md create mode 100644 docs/test_cases/t00023_class.png create mode 100644 tests/t00023/.clanguml create mode 100644 tests/t00023/t00023.cc create mode 100644 tests/t00023/test_case.h diff --git a/docs/test_cases.md b/docs/test_cases.md index 9761b821..55e0632f 100644 --- a/docs/test_cases.md +++ b/docs/test_cases.md @@ -21,6 +21,7 @@ * [t00020](./test_cases/t00020.md) - Abstract factory pattern * [t00021](./test_cases/t00021.md) - Visitor pattern * [t00022](./test_cases/t00022.md) - Template method pattern + * [t00023](./test_cases/t00023.md) - Strategy pattern ## Sequence diagrams * [t20001](./test_cases/t20001.md) - Basic sequence diagram ## Configuration diagrams diff --git a/docs/test_cases/t00022.md b/docs/test_cases/t00022.md index 04c950ce..b8b9e1b9 100644 --- a/docs/test_cases/t00022.md +++ b/docs/test_cases/t00022.md @@ -38,16 +38,15 @@ protected: class A1 : public A { protected: - void method1() override { } - void method2() override { } + void method1() override {} + void method2() override {} }; class A2 : public A { protected: - void method1() override { } - void method2() override { } + void method1() override {} + void method2() override {} }; - } } diff --git a/docs/test_cases/t00023.md b/docs/test_cases/t00023.md new file mode 100644 index 00000000..4caf4db1 --- /dev/null +++ b/docs/test_cases/t00023.md @@ -0,0 +1,65 @@ +# t00023 - Strategy pattern +## Config +```yaml +compilation_database_dir: .. +output_directory: puml +diagrams: + t00023_class: + type: class + glob: + - ../../tests/t00023/t00023.cc + using_namespace: + - clanguml::t00023 + include: + namespaces: + - clanguml::t00023 + +``` +## Source code +File t00023.cc +```cpp +#include + +namespace clanguml { +namespace t00023 { + +class Strategy { +public: + virtual ~Strategy() = default; + virtual void algorithm() = 0; +}; + +class StrategyA : public Strategy { +public: + void algorithm() override { } +}; + +class StrategyB : public Strategy { +public: + void algorithm() override { } +}; + +class StrategyC : public Strategy { +public: + void algorithm() override { } +}; + +class Context { +public: + Context(std::unique_ptr strategy) + : m_strategy(std::move(strategy)) + { + } + + void apply() { m_strategy->algorithm(); } + +private: + std::unique_ptr m_strategy; +}; + +} +} + +``` +## Generated UML diagrams +![t00023_class](./t00023_class.png "Strategy pattern") diff --git a/docs/test_cases/t00023_class.png b/docs/test_cases/t00023_class.png new file mode 100644 index 0000000000000000000000000000000000000000..f9990de86d710b4af401d534d5e45a7b30980a67 GIT binary patch literal 20855 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 + +namespace clanguml { +namespace t00023 { + +class Strategy { +public: + virtual ~Strategy() = default; + virtual void algorithm() = 0; +}; + +class StrategyA : public Strategy { +public: + void algorithm() override {} +}; + +class StrategyB : public Strategy { +public: + void algorithm() override {} +}; + +class StrategyC : public Strategy { +public: + void algorithm() override {} +}; + +class Context { +public: + Context(std::unique_ptr strategy) + : m_strategy(std::move(strategy)) + { + } + + void apply() { m_strategy->algorithm(); } + +private: + std::unique_ptr m_strategy; +}; +} +} diff --git a/tests/t00023/test_case.h b/tests/t00023/test_case.h new file mode 100644 index 00000000..1aecf485 --- /dev/null +++ b/tests/t00023/test_case.h @@ -0,0 +1,50 @@ +/** + * tests/t00023/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("t00023", "[test-case][class]") +{ + auto [config, db] = load_config("t00023"); + + auto diagram = config.diagrams["t00023_class"]; + + REQUIRE(diagram->name == "t00023_class"); + + REQUIRE(diagram->include.namespaces.size() == 1); + REQUIRE_THAT(diagram->include.namespaces, + VectorContains(std::string{"clanguml::t00023"})); + + REQUIRE(diagram->exclude.namespaces.size() == 0); + + REQUIRE(diagram->should_include("clanguml::t00023::Visitor")); + + auto model = generate_class_diagram(db, diagram); + + REQUIRE(model.name == "t00023_class"); + + auto puml = generate_class_puml(diagram, model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + REQUIRE_THAT(puml, IsAbstractClass(_A("Strategy"))); + REQUIRE_THAT(puml, IsClass(_A("StrategyA"))); + REQUIRE_THAT(puml, IsClass(_A("StrategyB"))); + + save_puml( + "./" + config.output_directory + "/" + diagram->name + ".puml", puml); +} diff --git a/tests/test_cases.cc b/tests/test_cases.cc index d12c2b02..0aa68438 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -126,6 +126,7 @@ using namespace clanguml::test::matchers; #include "t00020/test_case.h" #include "t00021/test_case.h" #include "t00022/test_case.h" +#include "t00023/test_case.h" // // Sequence diagram tests diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 388c1bea..31bf2dce 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -63,6 +63,9 @@ test_cases: - name: t00022 title: Template method pattern description: + - name: t00023 + title: Strategy pattern + description: Sequence diagrams: - name: t20001 title: Basic sequence diagram