diff --git a/tests/t20015/.clang-uml b/tests/t20015/.clang-uml new file mode 100644 index 00000000..231e9543 --- /dev/null +++ b/tests/t20015/.clang-uml @@ -0,0 +1,17 @@ +compilation_database_dir: .. +output_directory: puml +diagrams: + t20015_sequence: + type: sequence + glob: + - ../../tests/t20015/t20015.cc + include: + namespaces: + - clanguml::t20015 + exclude: + namespaces: + - clanguml::t20015::detail + using_namespace: + - clanguml::t20015 + start_from: + - function: "clanguml::t20015::tmain()" \ No newline at end of file diff --git a/tests/t20015/t20015.cc b/tests/t20015/t20015.cc new file mode 100644 index 00000000..0c999632 --- /dev/null +++ b/tests/t20015/t20015.cc @@ -0,0 +1,39 @@ +#include + +namespace clanguml { +namespace t20015 { + +namespace detail { +class A { +public: + void set_x(int x) { x_ = x; } + void set_y(int y) { y_ = y; } + void set_z(int z) { z_ = z; } + +private: + int x_; + int y_; + int z_; +}; +} + +class B { +public: + void setup_a(std::shared_ptr &a) + { + a->set_x(1); + a.get()->set_y(2); + (*a).set_z(3); + } +}; + +void tmain() +{ + auto a = std::make_shared(); + + B b; + + b.setup_a(a); +} +} +} \ No newline at end of file diff --git a/tests/t20015/test_case.h b/tests/t20015/test_case.h new file mode 100644 index 00000000..54186b73 --- /dev/null +++ b/tests/t20015/test_case.h @@ -0,0 +1,51 @@ +/** + * tests/t20015/test_case.h + * + * Copyright (c) 2021-2022 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("t20015", "[test-case][sequence]") +{ + auto [config, db] = load_config("t20015"); + + auto diagram = config.diagrams["t20015_sequence"]; + + REQUIRE(diagram->name == "t20015_sequence"); + + auto model = generate_sequence_diagram(*db, diagram); + + REQUIRE(model->name() == "t20015_sequence"); + + auto puml = generate_sequence_puml(diagram, *model); + AliasMatcher _A(puml); + + REQUIRE_THAT(puml, StartsWith("@startuml")); + REQUIRE_THAT(puml, EndsWith("@enduml\n")); + + // Check if all calls exist + REQUIRE_THAT(puml, + HasCall( + _A("tmain()"), _A("B"), "setup_a(std::shared_ptr &)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("detail::A"), "set_x(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("detail::A"), "set_y(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("detail::A"), "set_z(int)")); + + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("B"), "set_x(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("B"), "set_y(int)")); + REQUIRE_THAT(puml, !HasCall(_A("B"), _A("B"), "set_z(int)")); + + save_puml( + "./" + config.output_directory() + "/" + diagram->name + ".puml", puml); +} \ No newline at end of file diff --git a/tests/test_cases.cc b/tests/test_cases.cc index 9e0486ea..fe09b0be 100644 --- a/tests/test_cases.cc +++ b/tests/test_cases.cc @@ -261,6 +261,7 @@ using namespace clanguml::test::matchers; #include "t20012/test_case.h" #include "t20013/test_case.h" #include "t20014/test_case.h" +#include "t20015/test_case.h" /// /// Package diagram tests diff --git a/tests/test_cases.yaml b/tests/test_cases.yaml index 4f60cb43..a7c8d4db 100644 --- a/tests/test_cases.yaml +++ b/tests/test_cases.yaml @@ -190,6 +190,9 @@ test_cases: - name: t20014 title: Multiple translation units sequence diagram test case description: + - name: t20015 + title: Class exclusion by namespace in sequence diagram test case + description: Package diagrams: - name: t30001 title: Basic package diagram test case