Added test case for sequence diagram with nested classes (#287)
This commit is contained in:
@@ -1717,20 +1717,20 @@ translation_unit_visitor::create_class_model(clang::CXXRecordDecl *cls)
|
||||
const auto &[label, hint, access] =
|
||||
anonymous_struct_relationships_[cls->getID()];
|
||||
|
||||
c.set_name(parent_class.value().name() + "##" +
|
||||
fmt::format("({})", label));
|
||||
c.set_name(parent_class.value().name() +
|
||||
"::" + fmt::format("({})", label));
|
||||
|
||||
parent_class.value().add_relationship(
|
||||
{hint, common::to_id(c.full_name(false)), access, label});
|
||||
}
|
||||
else
|
||||
c.set_name(parent_class.value().name() + "##" +
|
||||
c.set_name(parent_class.value().name() + "::" +
|
||||
fmt::format(
|
||||
"(anonymous_{})", std::to_string(cls->getID())));
|
||||
}
|
||||
else {
|
||||
c.set_name(
|
||||
parent_class.value().name() + "##" + cls->getNameAsString());
|
||||
parent_class.value().name() + "::" + cls->getNameAsString());
|
||||
}
|
||||
|
||||
c.set_id(common::to_id(c.full_name(false)));
|
||||
|
||||
12
tests/t20054/.clang-uml
Normal file
12
tests/t20054/.clang-uml
Normal file
@@ -0,0 +1,12 @@
|
||||
diagrams:
|
||||
t20054_sequence:
|
||||
type: sequence
|
||||
glob:
|
||||
- t20054.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::t20054
|
||||
using_namespace: clanguml::t20054
|
||||
from:
|
||||
- function: "clanguml::t20054::tmain()"
|
||||
- function: "clanguml::t20054::A::AA::bb()"
|
||||
35
tests/t20054/t20054.cc
Normal file
35
tests/t20054/t20054.cc
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace clanguml {
|
||||
namespace t20054 {
|
||||
|
||||
struct A {
|
||||
struct AA {
|
||||
struct AAA {
|
||||
int aaa() { return 3; }
|
||||
};
|
||||
|
||||
struct BBB {
|
||||
int bbb() { return 4; }
|
||||
};
|
||||
|
||||
int aa() { return aaa.aaa(); }
|
||||
|
||||
int bb() { return bbb.bbb(); }
|
||||
|
||||
AAA aaa;
|
||||
BBB bbb;
|
||||
};
|
||||
|
||||
void a() { aa.aa(); }
|
||||
|
||||
AA aa;
|
||||
};
|
||||
|
||||
void tmain()
|
||||
{
|
||||
A a;
|
||||
|
||||
a.a();
|
||||
}
|
||||
|
||||
} // namespace t20054
|
||||
} // namespace clanguml
|
||||
35
tests/t20054/test_case.h
Normal file
35
tests/t20054/test_case.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* tests/t20054/test_case.h
|
||||
*
|
||||
* Copyright (c) 2021-2024 Bartek Kryza <bkryza@gmail.com>
|
||||
*
|
||||
* 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("t20054")
|
||||
{
|
||||
using namespace clanguml::test;
|
||||
using namespace std::string_literals;
|
||||
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20054", "t20054_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{{"tmain()", "A", "a()"}, {"A", "A::AA", "aa()"},
|
||||
{"A::AA", "A::AA::AAA", "aaa()"},
|
||||
|
||||
{Entrypoint{}, "A::AA", "bb()"},
|
||||
{"A::AA", "A::AA::BBB", "bbb()"}}));
|
||||
});
|
||||
}
|
||||
@@ -610,6 +610,7 @@ void CHECK_INCLUDE_DIAGRAM(const clanguml::config::config &config,
|
||||
|
||||
#include "t20052/test_case.h"
|
||||
#include "t20053/test_case.h"
|
||||
#include "t20054/test_case.h"
|
||||
|
||||
///
|
||||
/// Package diagram tests
|
||||
|
||||
@@ -382,6 +382,9 @@ test_cases:
|
||||
- name: t20053
|
||||
title: Test case for inlining nested lambda operator calls
|
||||
description:
|
||||
- name: t20054
|
||||
title: Test case for sequence diagram with nested classes
|
||||
description:
|
||||
Package diagrams:
|
||||
- name: t30001
|
||||
title: Basic package diagram test case
|
||||
|
||||
@@ -22,7 +22,7 @@ TEST_CASE("{{ name }}")
|
||||
using namespace std::string_literals;
|
||||
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_{{ TYPE }}_MODEL("{{ name }}", "{{ name }}_class");
|
||||
CHECK_{{ TYPE }}_MODEL("{{ name }}", "{{ name }}_{{ type }}");
|
||||
|
||||
{{ examples }}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user