Fixed multiple relationship generation for template instantiation

This commit is contained in:
Bartek Kryza
2021-07-25 18:00:35 +02:00
parent 5484a23647
commit 9e44fec60e
5 changed files with 88 additions and 105 deletions

View File

@@ -1,39 +0,0 @@
#include <memory>
namespace clanguml {
namespace t00025 {
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> target)
: m_target{std::move(target)}
{
}
void m1() override { m_target->m1(); }
void m2() override { m_target->m2(); }
private:
std::shared_ptr<Target> m_target;
};
}
}

View File

@@ -5,20 +5,20 @@ namespace t00025 {
class Target1 {
public:
void m1() { }
void m2() { }
void m1() {}
void m2() {}
};
class Target2 {
public:
void m1() { }
void m2() { }
void m1() {}
void m2() {}
};
template <typename T> class Proxy {
public:
Proxy(std::shared_ptr<T> target)
: m_target {std::move(target)}
: m_target{std::move(target)}
{
}
void m1() { m_target->m1(); }

View File

@@ -46,10 +46,14 @@ TEST_CASE("t00025", "[test-case][class]")
REQUIRE_THAT(puml, IsClassTemplate("Proxy", "T"));
REQUIRE_THAT(puml, IsInstantiation(_A("Proxy<T>"), _A("Proxy<Target1>")));
REQUIRE_THAT(puml, IsInstantiation(_A("Proxy<T>"), _A("Proxy<Target2>")));
REQUIRE_THAT(puml, IsAggregation(_A("ProxyHolder"), _A("Proxy<Target1>"), "+proxy1"));
REQUIRE_THAT(puml, IsAggregation(_A("ProxyHolder"), _A("Proxy<Target2>"), "+proxy2"));
REQUIRE_THAT(puml, !IsAggregation(_A("ProxyHolder"), _A("Target1"), "+proxy1"));
REQUIRE_THAT(puml, !IsAggregation(_A("ProxyHolder"), _A("Target2"), "+proxy2"));
REQUIRE_THAT(puml,
IsAggregation(_A("ProxyHolder"), _A("Proxy<Target1>"), "+proxy1"));
REQUIRE_THAT(puml,
IsAggregation(_A("ProxyHolder"), _A("Proxy<Target2>"), "+proxy2"));
REQUIRE_THAT(
puml, !IsAggregation(_A("ProxyHolder"), _A("Target1"), "+proxy1"));
REQUIRE_THAT(
puml, !IsAggregation(_A("ProxyHolder"), _A("Target2"), "+proxy2"));
save_puml(
"./" + config.output_directory + "/" + diagram->name + ".puml", puml);