From ba090a1af4a46eefdcf9fafabe396e4bd79b0cda Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sun, 25 Jul 2021 12:51:59 +0200 Subject: [PATCH] Added proxy design pattern test case --- docs/test_cases.md | 1 + docs/test_cases/t00023.md | 7 ++-- docs/test_cases/t00024.md | 64 +++++++++++++++++++++++++++++++ docs/test_cases/t00024_class.png | Bin 0 -> 19425 bytes tests/t00024/.clanguml | 12 ++++++ tests/t00024/t00024.cc | 39 +++++++++++++++++++ tests/t00024/test_case.h | 54 ++++++++++++++++++++++++++ tests/test_cases.cc | 1 + tests/test_cases.yaml | 3 ++ 9 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 docs/test_cases/t00024.md create mode 100644 docs/test_cases/t00024_class.png create mode 100644 tests/t00024/.clanguml create mode 100644 tests/t00024/t00024.cc create mode 100644 tests/t00024/test_case.h diff --git a/docs/test_cases.md b/docs/test_cases.md index 55e0632f..3fbb9f9d 100644 --- a/docs/test_cases.md +++ b/docs/test_cases.md @@ -22,6 +22,7 @@ * [t00021](./test_cases/t00021.md) - Visitor pattern * [t00022](./test_cases/t00022.md) - Template method pattern * [t00023](./test_cases/t00023.md) - Strategy pattern + * [t00024](./test_cases/t00024.md) - Proxy pattern ## Sequence diagrams * [t20001](./test_cases/t20001.md) - Basic sequence diagram ## Configuration diagrams diff --git a/docs/test_cases/t00023.md b/docs/test_cases/t00023.md index 4caf4db1..f8bef705 100644 --- a/docs/test_cases/t00023.md +++ b/docs/test_cases/t00023.md @@ -31,17 +31,17 @@ public: class StrategyA : public Strategy { public: - void algorithm() override { } + void algorithm() override {} }; class StrategyB : public Strategy { public: - void algorithm() override { } + void algorithm() override {} }; class StrategyC : public Strategy { public: - void algorithm() override { } + void algorithm() override {} }; class Context { @@ -56,7 +56,6 @@ public: private: std::unique_ptr m_strategy; }; - } } diff --git a/docs/test_cases/t00024.md b/docs/test_cases/t00024.md new file mode 100644 index 00000000..1ecd4106 --- /dev/null +++ b/docs/test_cases/t00024.md @@ -0,0 +1,64 @@ +# t00024 - Proxy pattern +## Config +```yaml +compilation_database_dir: .. +output_directory: puml +diagrams: + t00024_class: + type: class + glob: + - ../../tests/t00024/t00024.cc + using_namespace: + - clanguml::t00024 + include: + namespaces: + - clanguml::t00024 + +``` +## Source code +File t00024.cc +```cpp +#include + +namespace clanguml { +namespace t00024 { + +class Target { +public: + virtual ~Target() = 0; + + virtual void m1() = 0; + virtual void m2() = 0; +}; + +class Target1 : public Target { +public: + void m1() override { } + void m2() override { } +}; + +class Target2 : public Target { +public: + void m1() override { } + void m2() override { } +}; + +class Proxy : public Target { +public: + Proxy(std::shared_ptr target) + : m_target {std::move(target)} + { + } + void m1() override { m_target->m1(); } + void m2() override { m_target->m2(); } + +private: + std::shared_ptr m_target; +}; + +} +} + +``` +## Generated UML diagrams +![t00024_class](./t00024_class.png "Proxy pattern") diff --git a/docs/test_cases/t00024_class.png b/docs/test_cases/t00024_class.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb2429aba9d5d0bca6aa9cab189961be50ba16e GIT binary patch literal 19425 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 + +namespace clanguml { +namespace t00024 { + +class Target { +public: + virtual ~Target() = 0; + + virtual void m1() = 0; + virtual void m2() = 0; +}; + +class Target1 : public Target { +public: + void m1() override {} + void m2() override {} +}; + +class Target2 : public Target { +public: + void m1() override {} + void m2() override {} +}; + +class Proxy : public Target { +public: + Proxy(std::shared_ptr target) + : m_target{std::move(target)} + { + } + void m1() override { m_target->m1(); } + void m2() override { m_target->m2(); } + +private: + std::shared_ptr m_target; +}; +} +} diff --git a/tests/t00024/test_case.h b/tests/t00024/test_case.h new file mode 100644 index 00000000..e0a883db --- /dev/null +++ b/tests/t00024/test_case.h @@ -0,0 +1,54 @@ +/** + * tests/t00024/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("t00024", "[test-case][class]") +{ + auto [config, db] = load_config("t00024"); + + auto diagram = config.diagrams["t00024_class"]; + + REQUIRE(diagram->name == "t00024_class"); + + REQUIRE(diagram->include.namespaces.size() == 1); + REQUIRE_THAT(diagram->include.namespaces, + VectorContains(std::string{"clanguml::t00024"})); + + REQUIRE(diagram->exclude.namespaces.size() == 0); + + REQUIRE(diagram->should_include("clanguml::t00024::A")); + + auto model = generate_class_diagram(db, diagram); + + REQUIRE(model.name == "t00024_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("Target"))); + REQUIRE_THAT(puml, IsClass(_A("Target1"))); + REQUIRE_THAT(puml, IsClass(_A("Target2"))); + REQUIRE_THAT(puml, IsClass(_A("Proxy"))); + REQUIRE_THAT(puml, IsBaseClass(_A("Target"), _A("Target1"))); + REQUIRE_THAT(puml, IsBaseClass(_A("Target"), _A("Target2"))); + REQUIRE_THAT(puml, IsBaseClass(_A("Target"), _A("Proxy"))); + + save_puml( + "./" + config.output_directory + "/" + diagram->name + ".puml", puml); +} diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 0aa68438..be6f76f9 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -127,6 +127,7 @@ using namespace clanguml::test::matchers; #include "t00021/test_case.h" #include "t00022/test_case.h" #include "t00023/test_case.h" +#include "t00024/test_case.h" // // Sequence diagram tests diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 31bf2dce..6090f7d6 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -66,6 +66,9 @@ test_cases: - name: t00023 title: Strategy pattern description: + - name: t00024 + title: Proxy pattern + description: Sequence diagrams: - name: t20001 title: Basic sequence diagram