Added JSON package diagram generator test cases

This commit is contained in:
Bartek Kryza
2023-03-25 13:39:53 +01:00
parent c1bce60656
commit aa2d3099de
12 changed files with 345 additions and 130 deletions

View File

@@ -53,7 +53,7 @@ void generator::generate(const package &p, nlohmann::json &parent) const
LOG_DBG("Generating package {}", p.name());
nlohmann::json j;
j["id"] = p.id();
j["id"] = std::to_string(p.id());
j["name"] = p.name();
j["type"] = "namespace";
j["display_name"] = p.full_name(false);

View File

@@ -74,6 +74,17 @@ TEST_CASE("t30001", "[test-case][package]")
using namespace json;
REQUIRE(IsPackage(j, "A"));
REQUIRE(IsPackage(j, "A::AA"));
REQUIRE(IsPackage(j, "A::AA::AAA"));
REQUIRE(IsPackage(j, "A::AA::BBB"));
REQUIRE(IsPackage(j, "A::BB"));
REQUIRE(IsPackage(j, "B"));
REQUIRE(IsPackage(j, "B::AA"));
REQUIRE(IsPackage(j, "B::AA::AAA"));
REQUIRE(IsPackage(j, "B::AA::BBB"));
REQUIRE(IsPackage(j, "B::BB"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30002", "[test-case][package]")
REQUIRE(model->name() == "t30002_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -69,5 +70,54 @@ TEST_CASE("t30002", "[test-case][package]")
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A16")));
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("A17")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "A::AA"));
REQUIRE(IsPackage(j, "A::AA::A1"));
REQUIRE(IsPackage(j, "A::AA::A2"));
REQUIRE(IsPackage(j, "A::AA::A3"));
REQUIRE(IsPackage(j, "A::AA::A4"));
REQUIRE(IsPackage(j, "A::AA::A5"));
REQUIRE(IsPackage(j, "A::AA::A6"));
REQUIRE(IsPackage(j, "A::AA::A7"));
REQUIRE(IsPackage(j, "A::AA::A8"));
REQUIRE(IsPackage(j, "A::AA::A9"));
REQUIRE(IsPackage(j, "A::AA::A10"));
REQUIRE(IsPackage(j, "A::AA::A11"));
REQUIRE(IsPackage(j, "A::AA::A12"));
REQUIRE(IsPackage(j, "A::AA::A13"));
REQUIRE(IsPackage(j, "A::AA::A14"));
REQUIRE(IsPackage(j, "A::AA::A15"));
REQUIRE(IsPackage(j, "A::AA::A16"));
REQUIRE(IsPackage(j, "A::AA::A17"));
REQUIRE(IsPackage(j, "B::BB::BBB"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A1"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A2"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A3"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A4"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A5"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A6"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A7"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A8"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A9"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A10"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A11"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A12"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A13"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A14"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A15"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A16"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::A17"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -4,24 +4,24 @@ namespace t30003 {
namespace ns1 {
namespace ns2_v1_0_0 {
class A { };
}
} // namespace ns2_v1_0_0
namespace [[deprecated]] ns2_v0_9_0 {
class A { };
}
} // namespace ns2_v0_9_0
namespace {
class Anon final { };
}
}
} // namespace
} // namespace ns1
namespace [[deprecated]] ns3 {
namespace ns1::ns2 {
class Anon : public t30003::ns1::ns2_v1_0_0::A { };
}
} // namespace ns1::ns2
class B : public ns1::ns2::Anon { };
}
}
}
} // namespace ns3
} // namespace t30003
} // namespace clanguml

View File

@@ -27,7 +27,7 @@ TEST_CASE("t30003", "[test-case][package]")
auto model = generate_package_diagram(*db, diagram);
REQUIRE(model->name() == "t30003_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -43,5 +43,25 @@ TEST_CASE("t30003", "[test-case][package]")
REQUIRE_THAT(puml, IsDeprecated(_A("ns2_v0_9_0")));
REQUIRE_THAT(puml, IsDeprecated(_A("ns3")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "ns1"));
REQUIRE(IsPackage(j, "ns1::ns2_v1_0_0"));
REQUIRE(IsPackage(j, "ns1::ns2_v0_9_0"));
REQUIRE(IsPackage(j, "ns3"));
REQUIRE(IsPackage(j, "ns3::ns1"));
REQUIRE(IsPackage(j, "ns3::ns1::ns2"));
REQUIRE(IsDeprecated(j, "ns1::ns2_v0_9_0"));
REQUIRE(IsDeprecated(j, "ns3"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30004", "[test-case][package]")
REQUIRE(model->name() == "t30004_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -40,5 +41,22 @@ TEST_CASE("t30004", "[test-case][package]")
REQUIRE_THAT(puml, !IsPackage("DDD"));
REQUIRE_THAT(puml, IsPackage("EEE"));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "A"));
REQUIRE(IsPackage(j, "A::AAA"));
REQUIRE(IsPackage(j, "A::BBB"));
REQUIRE(IsPackage(j, "A::CCC"));
REQUIRE(!IsPackage(j, "A::DDD"));
REQUIRE(IsPackage(j, "A::EEE"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30005", "[test-case][package]")
REQUIRE(model->name() == "t30005_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -41,5 +42,28 @@ TEST_CASE("t30005", "[test-case][package]")
REQUIRE_THAT(puml, IsDependency(_A("BBB"), _A("AAA")));
REQUIRE_THAT(puml, IsDependency(_A("CCC"), _A("AAA")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "A"));
REQUIRE(IsPackage(j, "A::AA"));
REQUIRE(IsPackage(j, "A::AA::AAA"));
REQUIRE(IsPackage(j, "B"));
REQUIRE(IsPackage(j, "B::BB"));
REQUIRE(IsPackage(j, "B::BB::BBB"));
REQUIRE(IsPackage(j, "C"));
REQUIRE(IsPackage(j, "C::CC"));
REQUIRE(IsPackage(j, "C::CC::CCC"));
REQUIRE(IsDependency(j, "B::BB::BBB", "A::AA::AAA"));
REQUIRE(IsDependency(j, "C::CC::CCC", "A::AA::AAA"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30006", "[test-case][package]")
REQUIRE(model->name() == "t30006_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -41,5 +42,22 @@ TEST_CASE("t30006", "[test-case][package]")
REQUIRE_THAT(puml, IsDependency(_A("A"), _A("B")));
REQUIRE_THAT(puml, IsDependency(_A("A"), _A("C")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "A"));
REQUIRE(IsPackage(j, "B"));
REQUIRE(IsPackage(j, "C"));
REQUIRE(IsDependency(j, "A", "B"));
REQUIRE(IsDependency(j, "A", "C"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30007", "[test-case][package]")
REQUIRE(model->name() == "t30007_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -44,5 +45,23 @@ TEST_CASE("t30007", "[test-case][package]")
REQUIRE_THAT(puml, IsLayoutHint(_A("C"), "up", _A("AA")));
REQUIRE_THAT(puml, IsLayoutHint(_A("C"), "left", _A("B")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "A"));
REQUIRE(IsPackage(j, "A::AA"));
REQUIRE(IsPackage(j, "B"));
REQUIRE(IsPackage(j, "C"));
REQUIRE(IsDependency(j, "A::AA", "B"));
REQUIRE(IsDependency(j, "A::AA", "C"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30008", "[test-case][package]")
REQUIRE(model->name() == "t30008_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -50,5 +51,31 @@ TEST_CASE("t30008", "[test-case][package]")
REQUIRE_THAT(puml, IsDependency(_A("E"), _A("D")));
REQUIRE_THAT(puml, IsDependency(_A("F"), _A("E")));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "dependants::A"));
REQUIRE(IsPackage(j, "dependants::B"));
REQUIRE(IsPackage(j, "dependants::C"));
REQUIRE(!IsPackage(j, "dependants::X"));
REQUIRE(IsDependency(j, "dependants::B", "dependants::A"));
REQUIRE(IsDependency(j, "dependants::C", "dependants::B"));
REQUIRE(IsPackage(j, "dependencies::D"));
REQUIRE(IsPackage(j, "dependencies::E"));
REQUIRE(IsPackage(j, "dependencies::F"));
REQUIRE(!IsPackage(j, "dependencies::Y"));
REQUIRE(IsDependency(j, "dependencies::E", "dependencies::D"));
REQUIRE(IsDependency(j, "dependencies::F", "dependencies::E"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -28,6 +28,7 @@ TEST_CASE("t30009", "[test-case][package]")
REQUIRE(model->name() == "t30009_package");
{
auto puml = generate_package_puml(diagram, *model);
AliasMatcher _A(puml);
@@ -42,5 +43,26 @@ TEST_CASE("t30009", "[test-case][package]")
REQUIRE_THAT(puml, IsPackage("C"));
REQUIRE_THAT(puml, IsPackage("D"));
save_puml(config.output_directory() + "/" + diagram->name + ".puml", puml);
save_puml(
config.output_directory() + "/" + diagram->name + ".puml", puml);
}
{
auto j = generate_package_json(diagram, *model);
using namespace json;
REQUIRE(IsPackage(j, "One"));
REQUIRE(IsPackage(j, "Two"));
REQUIRE(IsPackage(j, "One::A"));
REQUIRE(IsPackage(j, "One::B"));
REQUIRE(IsPackage(j, "One::C"));
REQUIRE(IsPackage(j, "One::D"));
REQUIRE(IsPackage(j, "Two::A"));
REQUIRE(IsPackage(j, "Two::B"));
REQUIRE(IsPackage(j, "Two::C"));
REQUIRE(IsPackage(j, "Two::D"));
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
}

View File

@@ -714,6 +714,12 @@ bool IsPackage(const nlohmann::json &j, const std::string &name)
return e && e->at("type") == "namespace";
}
bool IsDeprecated(const nlohmann::json &j, const std::string &name)
{
auto e = get_element(j, expand_name(j, name));
return e && e->at("is_deprecated") == true;
}
bool IsBaseClass(const nlohmann::json &j, const std::string &base,
const std::string &subclass)
{