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] =
|
const auto &[label, hint, access] =
|
||||||
anonymous_struct_relationships_[cls->getID()];
|
anonymous_struct_relationships_[cls->getID()];
|
||||||
|
|
||||||
c.set_name(parent_class.value().name() + "##" +
|
c.set_name(parent_class.value().name() +
|
||||||
fmt::format("({})", label));
|
"::" + fmt::format("({})", label));
|
||||||
|
|
||||||
parent_class.value().add_relationship(
|
parent_class.value().add_relationship(
|
||||||
{hint, common::to_id(c.full_name(false)), access, label});
|
{hint, common::to_id(c.full_name(false)), access, label});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
c.set_name(parent_class.value().name() + "##" +
|
c.set_name(parent_class.value().name() + "::" +
|
||||||
fmt::format(
|
fmt::format(
|
||||||
"(anonymous_{})", std::to_string(cls->getID())));
|
"(anonymous_{})", std::to_string(cls->getID())));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
c.set_name(
|
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)));
|
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 "t20052/test_case.h"
|
||||||
#include "t20053/test_case.h"
|
#include "t20053/test_case.h"
|
||||||
|
#include "t20054/test_case.h"
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Package diagram tests
|
/// Package diagram tests
|
||||||
|
|||||||
@@ -382,6 +382,9 @@ test_cases:
|
|||||||
- name: t20053
|
- name: t20053
|
||||||
title: Test case for inlining nested lambda operator calls
|
title: Test case for inlining nested lambda operator calls
|
||||||
description:
|
description:
|
||||||
|
- name: t20054
|
||||||
|
title: Test case for sequence diagram with nested classes
|
||||||
|
description:
|
||||||
Package diagrams:
|
Package diagrams:
|
||||||
- name: t30001
|
- name: t30001
|
||||||
title: Basic package diagram test case
|
title: Basic package diagram test case
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ TEST_CASE("{{ name }}")
|
|||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
auto [config, db, diagram, model] =
|
auto [config, db, diagram, model] =
|
||||||
CHECK_{{ TYPE }}_MODEL("{{ name }}", "{{ name }}_class");
|
CHECK_{{ TYPE }}_MODEL("{{ name }}", "{{ name }}_{{ type }}");
|
||||||
|
|
||||||
{{ examples }}
|
{{ examples }}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user