Added mermaid test cases for package diagrams

This commit is contained in:
Bartek Kryza
2023-09-13 00:24:45 +02:00
parent 57af380dfa
commit 9872e2d225
13 changed files with 407 additions and 186 deletions

View File

@@ -20,3 +20,15 @@ diagrams:
- 'note right of {{ alias("A::AA::AAA") }}: A AAA note...' - 'note right of {{ alias("A::AA::AAA") }}: A AAA note...'
- '{% set e=element("A::AA") %} note top of {{ alias("A::AA") }} : {{ e.comment.formatted }}' - '{% set e=element("A::AA") %} note top of {{ alias("A::AA") }} : {{ e.comment.formatted }}'
- '{% set e=element("B::AA") %} note top of {{ alias("B::AA") }} : {{ e.comment.formatted }}' - '{% set e=element("B::AA") %} note top of {{ alias("B::AA") }} : {{ e.comment.formatted }}'
mermaid:
before:
- "%% t30001 test diagram of type {{ diagram.type }}"
after:
- 'N_0001(A AAA note...)'
- 'N_0001 -.- {{ alias("A::AA::AAA") }}'
- '{% set e=element("A::AA") %}N_0002({{ e.comment.formatted }})'
- '{% set e=element("B::AA") %}N_0003({{ e.comment.formatted }})'
- 'N_0002 -.- {{ alias("A::AA") }}'
- 'N_0003 -.- {{ alias("B::AA") }}'

View File

@@ -29,39 +29,39 @@ TEST_CASE("t30001", "[test-case][package]")
REQUIRE(model->name() == "t30001_package"); REQUIRE(model->name() == "t30001_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("A")); REQUIRE_THAT(src, IsPackage("A"));
REQUIRE_THAT(puml, IsPackage("AAA")); REQUIRE_THAT(src, IsPackage("AAA"));
REQUIRE_THAT(puml, IsPackage("AAA")); REQUIRE_THAT(src, IsPackage("AAA"));
// TODO: Fix _A() to handle fully qualified names, right // TODO: Fix _A() to handle fully qualified names, right
// now it only finds the first element with unqualified // now it only finds the first element with unqualified
// name match // name match
REQUIRE_THAT(puml, REQUIRE_THAT(src,
HasNote(_A("AA"), "top", "This is namespace AA in namespace A")); HasNote(_A("AA"), "top", "This is namespace AA in namespace A"));
REQUIRE_THAT(puml, REQUIRE_THAT(src,
HasLink(_A("AAA"), HasLink(_A("AAA"),
fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/"
"t30001/t30001.cc#L6", "t30001/t30001.cc#L6",
clanguml::util::get_git_commit()), clanguml::util::get_git_commit()),
"AAA")); "AAA"));
REQUIRE_THAT(puml, REQUIRE_THAT(src,
HasLink(_A("BBB"), HasLink(_A("BBB"),
fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/"
"t30001/t30001.cc#L8", "t30001/t30001.cc#L8",
clanguml::util::get_git_commit()), clanguml::util::get_git_commit()),
"BBB")); "BBB"));
REQUIRE_THAT(puml, HasComment("t30001 test diagram of type package")); REQUIRE_THAT(src, HasComment("t30001 test diagram of type package"));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -84,8 +84,41 @@ TEST_CASE("t30001", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); using mermaid::HasComment;
using mermaid::HasLink;
using mermaid::HasPackageNote;
using mermaid::IsPackage;
REQUIRE_THAT(src, IsPackage(_A("A")));
REQUIRE_THAT(src, IsPackage(_A("AAA")));
REQUIRE_THAT(src, IsPackage(_A("AAA")));
// TODO: Fix _A() to handle fully qualified names, right
// now it only finds the first element with unqualified
// name match
REQUIRE_THAT(src,
HasPackageNote(
_A("AA"), "top", "This is namespace AA in namespace A"));
REQUIRE_THAT(src,
HasLink(_A("AAA"),
fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/"
"t30001/t30001.cc#L6",
clanguml::util::get_git_commit()),
"AAA"));
REQUIRE_THAT(src,
HasLink(_A("BBB"),
fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/"
"t30001/t30001.cc#L8",
clanguml::util::get_git_commit()),
"BBB"));
REQUIRE_THAT(src, HasComment("t30001 test diagram of type package"));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,50 +29,50 @@ TEST_CASE("t30002", "[test-case][package]")
REQUIRE(model->name() == "t30002_package"); REQUIRE(model->name() == "t30002_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("A1")); REQUIRE_THAT(src, IsPackage("A1"));
REQUIRE_THAT(puml, IsPackage("A2")); REQUIRE_THAT(src, IsPackage("A2"));
REQUIRE_THAT(puml, IsPackage("A3")); REQUIRE_THAT(src, IsPackage("A3"));
REQUIRE_THAT(puml, IsPackage("A4")); REQUIRE_THAT(src, IsPackage("A4"));
REQUIRE_THAT(puml, IsPackage("A5")); REQUIRE_THAT(src, IsPackage("A5"));
REQUIRE_THAT(puml, IsPackage("A6")); REQUIRE_THAT(src, IsPackage("A6"));
REQUIRE_THAT(puml, IsPackage("A7")); REQUIRE_THAT(src, IsPackage("A7"));
REQUIRE_THAT(puml, IsPackage("A8")); REQUIRE_THAT(src, IsPackage("A8"));
REQUIRE_THAT(puml, IsPackage("A9")); REQUIRE_THAT(src, IsPackage("A9"));
REQUIRE_THAT(puml, IsPackage("A11")); REQUIRE_THAT(src, IsPackage("A11"));
REQUIRE_THAT(puml, IsPackage("A12")); REQUIRE_THAT(src, IsPackage("A12"));
REQUIRE_THAT(puml, IsPackage("A13")); REQUIRE_THAT(src, IsPackage("A13"));
REQUIRE_THAT(puml, IsPackage("A14")); REQUIRE_THAT(src, IsPackage("A14"));
REQUIRE_THAT(puml, IsPackage("A15")); REQUIRE_THAT(src, IsPackage("A15"));
REQUIRE_THAT(puml, IsPackage("A16")); REQUIRE_THAT(src, IsPackage("A16"));
REQUIRE_THAT(puml, IsPackage("A17")); REQUIRE_THAT(src, IsPackage("A17"));
REQUIRE_THAT(puml, IsPackage("A18")); REQUIRE_THAT(src, IsPackage("A18"));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A1"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A1")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A2"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A2")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A3"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A3")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A4"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A4")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A5"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A5")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A6"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A6")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A7"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A7")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A8"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A8")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A9"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A9")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A10"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A10")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A11"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A11")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A12"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A12")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A13"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A13")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A14"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A14")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A15"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A15")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A16"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A16")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A17"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A17")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A18"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("A18")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -123,8 +123,48 @@ TEST_CASE("t30002", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("A1")));
REQUIRE_THAT(src, IsPackage(_A("A2")));
REQUIRE_THAT(src, IsPackage(_A("A3")));
REQUIRE_THAT(src, IsPackage(_A("A4")));
REQUIRE_THAT(src, IsPackage(_A("A5")));
REQUIRE_THAT(src, IsPackage(_A("A6")));
REQUIRE_THAT(src, IsPackage(_A("A7")));
REQUIRE_THAT(src, IsPackage(_A("A8")));
REQUIRE_THAT(src, IsPackage(_A("A9")));
REQUIRE_THAT(src, IsPackage(_A("A11")));
REQUIRE_THAT(src, IsPackage(_A("A12")));
REQUIRE_THAT(src, IsPackage(_A("A13")));
REQUIRE_THAT(src, IsPackage(_A("A14")));
REQUIRE_THAT(src, IsPackage(_A("A15")));
REQUIRE_THAT(src, IsPackage(_A("A16")));
REQUIRE_THAT(src, IsPackage(_A("A17")));
REQUIRE_THAT(src, IsPackage(_A("A18")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A1")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A2")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A3")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A4")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A5")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A6")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A7")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A8")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A9")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A10")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A11")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A12")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A13")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A14")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A15")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A16")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A17")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("A18")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -28,22 +28,22 @@ TEST_CASE("t30003", "[test-case][package]")
REQUIRE(model->name() == "t30003_package"); REQUIRE(model->name() == "t30003_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("ns1")); REQUIRE_THAT(src, IsPackage("ns1"));
REQUIRE_THAT(puml, IsPackage("ns2")); REQUIRE_THAT(src, IsPackage("ns2"));
REQUIRE_THAT(puml, IsPackage("ns3")); REQUIRE_THAT(src, IsPackage("ns3"));
REQUIRE_THAT(puml, IsPackage("ns2_v1_0_0")); REQUIRE_THAT(src, IsPackage("ns2_v1_0_0"));
REQUIRE_THAT(puml, IsPackage("ns2_v0_9_0")); REQUIRE_THAT(src, IsPackage("ns2_v0_9_0"));
REQUIRE_THAT(puml, IsDeprecated(_A("ns2_v0_9_0"))); REQUIRE_THAT(src, IsDeprecated(_A("ns2_v0_9_0")));
REQUIRE_THAT(puml, IsDeprecated(_A("ns3"))); REQUIRE_THAT(src, IsDeprecated(_A("ns3")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -65,8 +65,19 @@ TEST_CASE("t30003", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("ns1")));
REQUIRE_THAT(src, IsPackage(_A("ns2")));
REQUIRE_THAT(src, IsPackage(_A("ns3")));
REQUIRE_THAT(src, IsPackage(_A("ns2_v1_0_0")));
REQUIRE_THAT(src, IsPackage(_A("ns2_v0_9_0")));
// REQUIRE_THAT(src, IsDeprecated(_A("ns2_v0_9_0")));
// REQUIRE_THAT(src, IsDeprecated(_A("ns3")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,19 +29,19 @@ TEST_CASE("t30004", "[test-case][package]")
REQUIRE(model->name() == "t30004_package"); REQUIRE(model->name() == "t30004_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("AAA")); REQUIRE_THAT(src, IsPackage("AAA"));
REQUIRE_THAT(puml, IsPackage("BBB")); REQUIRE_THAT(src, IsPackage("BBB"));
REQUIRE_THAT(puml, IsPackage("CCC")); REQUIRE_THAT(src, IsPackage("CCC"));
REQUIRE_THAT(puml, !IsPackage("DDD")); REQUIRE_THAT(src, !IsPackage("DDD"));
REQUIRE_THAT(puml, IsPackage("EEE")); REQUIRE_THAT(src, IsPackage("EEE"));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -60,8 +60,16 @@ TEST_CASE("t30004", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("AAA")));
REQUIRE_THAT(src, IsPackage(_A("BBB")));
REQUIRE_THAT(src, IsPackage(_A("CCC")));
REQUIRE_THAT(src, !IsPackage(_A("DDD")));
REQUIRE_THAT(src, IsPackage(_A("EEE")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,20 +29,20 @@ TEST_CASE("t30005", "[test-case][package]")
REQUIRE(model->name() == "t30005_package"); REQUIRE(model->name() == "t30005_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("AAA")); REQUIRE_THAT(src, IsPackage("AAA"));
REQUIRE_THAT(puml, IsPackage("BBB")); REQUIRE_THAT(src, IsPackage("BBB"));
REQUIRE_THAT(puml, IsPackage("CCC")); REQUIRE_THAT(src, IsPackage("CCC"));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("AAA"))); REQUIRE_THAT(src, IsDependency(_A("BBB"), _A("AAA")));
REQUIRE_THAT(puml, IsDependency(_A("CCC"), _A("AAA"))); REQUIRE_THAT(src, IsDependency(_A("CCC"), _A("AAA")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -67,8 +67,19 @@ TEST_CASE("t30005", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
REQUIRE_THAT(src, IsPackage(_A("AAA")));
REQUIRE_THAT(src, IsPackage(_A("BBB")));
REQUIRE_THAT(src, IsPackage(_A("CCC")));
REQUIRE_THAT(src, IsPackageDependency(_A("BBB"), _A("AAA")));
REQUIRE_THAT(src, IsPackageDependency(_A("CCC"), _A("AAA")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,20 +29,20 @@ TEST_CASE("t30006", "[test-case][package]")
REQUIRE(model->name() == "t30006_package"); REQUIRE(model->name() == "t30006_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("A")); REQUIRE_THAT(src, IsPackage("A"));
REQUIRE_THAT(puml, IsPackage("B")); REQUIRE_THAT(src, IsPackage("B"));
REQUIRE_THAT(puml, IsPackage("C")); REQUIRE_THAT(src, IsPackage("C"));
REQUIRE_THAT(puml, IsDependency(_A("A"), _A("B"))); REQUIRE_THAT(src, IsDependency(_A("A"), _A("B")));
REQUIRE_THAT(puml, IsDependency(_A("A"), _A("C"))); REQUIRE_THAT(src, IsDependency(_A("A"), _A("C")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -61,8 +61,18 @@ TEST_CASE("t30006", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("A")));
REQUIRE_THAT(src, IsPackage(_A("B")));
REQUIRE_THAT(src, IsPackage(_A("C")));
REQUIRE_THAT(src, IsPackageDependency(_A("A"), _A("B")));
REQUIRE_THAT(src, IsPackageDependency(_A("A"), _A("C")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,23 +29,23 @@ TEST_CASE("t30007", "[test-case][package]")
REQUIRE(model->name() == "t30007_package"); REQUIRE(model->name() == "t30007_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("A")); REQUIRE_THAT(src, IsPackage("A"));
REQUIRE_THAT(puml, IsPackage("B")); REQUIRE_THAT(src, IsPackage("B"));
REQUIRE_THAT(puml, IsPackage("C")); REQUIRE_THAT(src, IsPackage("C"));
REQUIRE_THAT(puml, IsDependency(_A("AA"), _A("B"))); REQUIRE_THAT(src, IsDependency(_A("AA"), _A("B")));
REQUIRE_THAT(puml, IsDependency(_A("AA"), _A("C"))); REQUIRE_THAT(src, IsDependency(_A("AA"), _A("C")));
REQUIRE_THAT(puml, IsLayoutHint(_A("C"), "up", _A("AA"))); REQUIRE_THAT(src, IsLayoutHint(_A("C"), "up", _A("AA")));
REQUIRE_THAT(puml, IsLayoutHint(_A("C"), "left", _A("B"))); REQUIRE_THAT(src, IsLayoutHint(_A("C"), "left", _A("B")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -65,8 +65,18 @@ TEST_CASE("t30007", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("A")));
REQUIRE_THAT(src, IsPackage(_A("B")));
REQUIRE_THAT(src, IsPackage(_A("C")));
REQUIRE_THAT(src, IsPackageDependency(_A("AA"), _A("B")));
REQUIRE_THAT(src, IsPackageDependency(_A("AA"), _A("C")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,29 +29,29 @@ TEST_CASE("t30008", "[test-case][package]")
REQUIRE(model->name() == "t30008_package"); REQUIRE(model->name() == "t30008_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("A")); REQUIRE_THAT(src, IsPackage("A"));
REQUIRE_THAT(puml, IsPackage("B")); REQUIRE_THAT(src, IsPackage("B"));
REQUIRE_THAT(puml, IsPackage("C")); REQUIRE_THAT(src, IsPackage("C"));
REQUIRE_THAT(puml, !IsPackage("X")); REQUIRE_THAT(src, !IsPackage("X"));
REQUIRE_THAT(puml, IsDependency(_A("B"), _A("A"))); REQUIRE_THAT(src, IsDependency(_A("B"), _A("A")));
REQUIRE_THAT(puml, IsDependency(_A("C"), _A("B"))); REQUIRE_THAT(src, IsDependency(_A("C"), _A("B")));
REQUIRE_THAT(puml, IsPackage("D")); REQUIRE_THAT(src, IsPackage("D"));
REQUIRE_THAT(puml, IsPackage("E")); REQUIRE_THAT(src, IsPackage("E"));
REQUIRE_THAT(puml, IsPackage("F")); REQUIRE_THAT(src, IsPackage("F"));
REQUIRE_THAT(puml, !IsPackage("Y")); REQUIRE_THAT(src, !IsPackage("Y"));
REQUIRE_THAT(puml, IsDependency(_A("E"), _A("D"))); REQUIRE_THAT(src, IsDependency(_A("E"), _A("D")));
REQUIRE_THAT(puml, IsDependency(_A("F"), _A("E"))); REQUIRE_THAT(src, IsDependency(_A("F"), _A("E")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -79,8 +79,27 @@ TEST_CASE("t30008", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("A")));
REQUIRE_THAT(src, IsPackage(_A("B")));
REQUIRE_THAT(src, IsPackage(_A("C")));
REQUIRE_THAT(src, !IsPackage(_A("X")));
REQUIRE_THAT(src, IsPackageDependency(_A("B"), _A("A")));
REQUIRE_THAT(src, IsPackageDependency(_A("C"), _A("B")));
REQUIRE_THAT(src, IsPackage(_A("D")));
REQUIRE_THAT(src, IsPackage(_A("E")));
REQUIRE_THAT(src, IsPackage(_A("F")));
REQUIRE_THAT(src, !IsPackage(_A("Y")));
REQUIRE_THAT(src, IsPackageDependency(_A("E"), _A("D")));
REQUIRE_THAT(src, IsPackageDependency(_A("F"), _A("E")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,21 +29,21 @@ TEST_CASE("t30009", "[test-case][package]")
REQUIRE(model->name() == "t30009_package"); REQUIRE(model->name() == "t30009_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
// Check if all packages exist // Check if all packages exist
REQUIRE_THAT(puml, IsPackage("One")); REQUIRE_THAT(src, IsPackage("One"));
REQUIRE_THAT(puml, IsPackage("Two")); REQUIRE_THAT(src, IsPackage("Two"));
REQUIRE_THAT(puml, IsPackage("A")); REQUIRE_THAT(src, IsPackage("A"));
REQUIRE_THAT(puml, IsPackage("B")); REQUIRE_THAT(src, IsPackage("B"));
REQUIRE_THAT(puml, IsPackage("C")); REQUIRE_THAT(src, IsPackage("C"));
REQUIRE_THAT(puml, IsPackage("D")); REQUIRE_THAT(src, IsPackage("D"));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -66,8 +66,17 @@ TEST_CASE("t30009", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("One")));
REQUIRE_THAT(src, IsPackage(_A("Two")));
REQUIRE_THAT(src, IsPackage(_A("A")));
REQUIRE_THAT(src, IsPackage(_A("B")));
REQUIRE_THAT(src, IsPackage(_A("C")));
REQUIRE_THAT(src, IsPackage(_A("D")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,25 +29,25 @@ TEST_CASE("t30010", "[test-case][package]")
REQUIRE(model->name() == "t30010_package"); REQUIRE(model->name() == "t30010_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("app")); REQUIRE_THAT(src, IsPackage("app"));
REQUIRE_THAT(puml, IsPackage("libraries")); REQUIRE_THAT(src, IsPackage("libraries"));
REQUIRE_THAT(puml, IsPackage("lib1")); REQUIRE_THAT(src, IsPackage("lib1"));
REQUIRE_THAT(puml, IsPackage("lib2")); REQUIRE_THAT(src, IsPackage("lib2"));
REQUIRE_THAT(puml, !IsPackage("library1")); REQUIRE_THAT(src, !IsPackage("library1"));
REQUIRE_THAT(puml, !IsPackage("library2")); REQUIRE_THAT(src, !IsPackage("library2"));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib1"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib1")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib2"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib2")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib3"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib3")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib4"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib4")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -59,8 +59,23 @@ TEST_CASE("t30010", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("app")));
REQUIRE_THAT(src, IsPackage(_A("libraries")));
REQUIRE_THAT(src, IsPackage(_A("lib1")));
REQUIRE_THAT(src, IsPackage(_A("lib2")));
REQUIRE_THAT(src, !IsPackage(_A("library1")));
REQUIRE_THAT(src, !IsPackage(_A("library2")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib1")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib2")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib3")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib4")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -29,25 +29,25 @@ TEST_CASE("t30011", "[test-case][package]")
REQUIRE(model->name() == "t30011_package"); REQUIRE(model->name() == "t30011_package");
{ {
auto puml = generate_package_puml(diagram, *model); auto src = generate_package_puml(diagram, *model);
AliasMatcher _A(puml); AliasMatcher _A(src);
REQUIRE_THAT(puml, StartsWith("@startuml")); REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(puml, EndsWith("@enduml\n")); REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(puml, IsPackage("app")); REQUIRE_THAT(src, IsPackage("app"));
REQUIRE_THAT(puml, IsPackage("libraries")); REQUIRE_THAT(src, IsPackage("libraries"));
REQUIRE_THAT(puml, IsPackage("lib1")); REQUIRE_THAT(src, IsPackage("lib1"));
REQUIRE_THAT(puml, IsPackage("lib2")); REQUIRE_THAT(src, IsPackage("lib2"));
REQUIRE_THAT(puml, !IsPackage("library1")); REQUIRE_THAT(src, !IsPackage("library1"));
REQUIRE_THAT(puml, !IsPackage("library2")); REQUIRE_THAT(src, !IsPackage("library2"));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib1"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib1")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib2"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib2")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib3"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib3")));
REQUIRE_THAT(puml, IsDependency(_A("app"), _A("lib4"))); REQUIRE_THAT(src, IsDependency(_A("app"), _A("lib4")));
save_puml(config.output_directory(), diagram->name + ".puml", puml); save_puml(config.output_directory(), diagram->name + ".puml", src);
} }
{ {
@@ -59,8 +59,23 @@ TEST_CASE("t30011", "[test-case][package]")
} }
{ {
auto mmd = generate_package_mermaid(diagram, *model); auto src = generate_package_mermaid(diagram, *model);
mermaid::AliasMatcher _A(src);
using mermaid::IsPackage;
using mermaid::IsPackageDependency;
save_mermaid(config.output_directory(), diagram->name + ".mmd", mmd); REQUIRE_THAT(src, IsPackage(_A("app")));
REQUIRE_THAT(src, IsPackage(_A("libraries")));
REQUIRE_THAT(src, IsPackage(_A("lib1")));
REQUIRE_THAT(src, IsPackage(_A("lib2")));
REQUIRE_THAT(src, !IsPackage(_A("library1")));
REQUIRE_THAT(src, !IsPackage(_A("library2")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib1")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib2")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib3")));
REQUIRE_THAT(src, IsPackageDependency(_A("app"), _A("lib4")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);
} }
} }

View File

@@ -428,6 +428,8 @@ struct AliasMatcher {
patterns.push_back( patterns.push_back(
std::regex{"class\\s" + alias_regex + "\\[\"" + name + "\"\\]"}); std::regex{"class\\s" + alias_regex + "\\[\"" + name + "\"\\]"});
patterns.push_back(
std::regex{"subgraph\\s" + alias_regex + "\\[" + name + "\\]"});
std::smatch base_match; std::smatch base_match;
@@ -729,6 +731,17 @@ ContainsMatcher IsDependency(std::string const &from, std::string const &to,
CasedString(fmt::format("{} ..> {}", from, to), caseSensitivity)); CasedString(fmt::format("{} ..> {}", from, to), caseSensitivity));
} }
namespace mermaid {
ContainsMatcher IsPackageDependency(std::string const &from,
std::string const &to,
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
{
return ContainsMatcher(
CasedString(fmt::format("{} -.-> {}", from, to), caseSensitivity));
}
}
ContainsMatcher IsConstraint(std::string const &from, std::string const &to, ContainsMatcher IsConstraint(std::string const &from, std::string const &to,
std::string const &label = {}, std::string const &label = {},
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
@@ -825,6 +838,13 @@ ContainsMatcher HasNote(std::string const &cls,
return ContainsMatcher( return ContainsMatcher(
CasedString(fmt::format("note for {}", cls), caseSensitivity)); CasedString(fmt::format("note for {}", cls), caseSensitivity));
} }
ContainsMatcher HasPackageNote(std::string const &cls,
std::string const &position = "", std::string const &note = "",
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
{
return ContainsMatcher(
CasedString(fmt::format("-.- {}", cls), caseSensitivity));
}
} }
ContainsMatcher HasMemberNote(std::string const &cls, std::string const &member, ContainsMatcher HasMemberNote(std::string const &cls, std::string const &member,
@@ -1063,6 +1083,14 @@ ContainsMatcher IsPackage(std::string const &str,
CasedString("package [" + str + "]", caseSensitivity)); CasedString("package [" + str + "]", caseSensitivity));
} }
namespace mermaid {
ContainsMatcher IsPackage(std::string const &str,
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
{
return ContainsMatcher(CasedString("subgraph " + str, caseSensitivity));
}
}
ContainsMatcher IsFolder(std::string const &str, ContainsMatcher IsFolder(std::string const &str,
CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes)
{ {