Added module_access diagram filter (#101)

This commit is contained in:
Bartek Kryza
2023-12-19 22:16:18 +01:00
parent c51ae5b6ee
commit f09edd8b47
16 changed files with 189 additions and 5 deletions

View File

@@ -9,4 +9,6 @@ diagrams:
exclude:
modules:
- t00070.lib2
module_access:
- private
using_namespace: clanguml::t00070

View File

@@ -8,4 +8,9 @@ template <typename T> class BB {
};
enum class BBB { bbb1, bbb2 };
}
module :private;
namespace clanguml::t00070 {
class BBBB { };
}

View File

@@ -1,3 +1,4 @@
import t00070;
import t00070.lib1;
import t00070.lib2;

View File

@@ -35,7 +35,7 @@ TEST_CASE("t00070", "[test-case][class]")
REQUIRE_THAT(src, StartsWith("@startuml"));
REQUIRE_THAT(src, EndsWith("@enduml\n"));
REQUIRE_THAT(src, !IsClass(_A("A")));
REQUIRE_THAT(src, IsClass(_A("A")));
REQUIRE_THAT(src, IsClass(_A("B")));
REQUIRE_THAT(src, !IsClass(_A("C")));
@@ -43,6 +43,7 @@ TEST_CASE("t00070", "[test-case][class]")
REQUIRE_THAT(src, !IsClassTemplate("CC", "T"));
REQUIRE_THAT(src, IsEnum(_A("BBB")));
REQUIRE_THAT(src, !IsClass(_A("BBBB")));
REQUIRE_THAT(src, !IsEnum(_A("CCC")));
save_puml(config.output_directory(), diagram->name + ".puml", src);
@@ -53,6 +54,15 @@ TEST_CASE("t00070", "[test-case][class]")
using namespace json;
REQUIRE(IsClass(j, "A"));
REQUIRE(IsClass(j, "B"));
REQUIRE(!IsClass(j, "C"));
REQUIRE(InPublicModule(j, "A", "t00070"));
REQUIRE(InPublicModule(j, "B", "t00070.lib1"));
REQUIRE(!IsClass(j, "BBBB"));
save_json(config.output_directory(), diagram->name + ".json", j);
}
@@ -63,7 +73,7 @@ TEST_CASE("t00070", "[test-case][class]")
using mermaid::IsClass;
using mermaid::IsEnum;
REQUIRE_THAT(src, !IsClass(_A("A")));
REQUIRE_THAT(src, IsClass(_A("A")));
REQUIRE_THAT(src, IsClass(_A("B")));
REQUIRE_THAT(src, !IsClass(_A("C")));
@@ -71,6 +81,7 @@ TEST_CASE("t00070", "[test-case][class]")
REQUIRE_THAT(src, !IsClass(_A("CC<T>")));
REQUIRE_THAT(src, IsEnum(_A("BBB")));
REQUIRE_THAT(src, !IsClass(_A("BBBB")));
REQUIRE_THAT(src, !IsEnum(_A("CCC")));
save_mermaid(config.output_directory(), diagram->name + ".mmd", src);

View File

@@ -1278,6 +1278,22 @@ bool IsClass(const nlohmann::json &j, const std::string &name)
return e && e->at("type") == "class";
}
bool InPublicModule(const nlohmann::json &j, const std::string &element,
const std::string &module)
{
auto e = get_element(j, expand_name(j, element));
return e && e->contains("module") && e->at("module")["name"] == module &&
!e->at("module")["is_private"];
}
bool InPrivateModule(const nlohmann::json &j, const std::string &element,
const std::string &module)
{
auto e = get_element(j, expand_name(j, element));
return e && e->contains("module") && e->at("module")["name"] == module &&
e->at("module")["is_private"];
}
bool IsAbstractClass(const nlohmann::json &j, const std::string &name)
{
auto e = get_element(j, expand_name(j, name));