Added default diagram generation error for empty diagrams (#246)

This commit is contained in:
Bartek Kryza
2024-03-04 19:55:55 +01:00
parent cb44c3ded4
commit baef768f6c
27 changed files with 315 additions and 10 deletions

View File

@@ -1,3 +1,4 @@
allow_empty_diagrams: true
diagrams:
t90000_class:
type: class

24
tests/t90001/.clang-uml Normal file
View File

@@ -0,0 +1,24 @@
diagrams:
t90001_class:
type: class
include:
namespaces:
- no_such_namespace
t90001_sequence:
type: sequence
include:
namespaces:
- no_such_namespace
from:
- function: "nowhere"
t90001_include:
type: include
include:
namespaces:
- no_such_namespace
t90001_package:
type: package
include:
namespaces:
- no_such_namespace

88
tests/t90001/t90001.cc Normal file
View File

@@ -0,0 +1,88 @@
#include <vector>
namespace clanguml {
namespace t90001 {
namespace ns1 {
/// \brief This is class A
class A {
public:
/// Abstract foo_a
virtual void foo_a() = 0;
/// Abstract foo_c
virtual void foo_c() = 0;
};
/// \brief This is class B
class B : public A {
public:
virtual void foo_a() override { }
};
/// @brief This is class C - class C has a long comment
///
/// Vivamus integer non suscipit taciti mus etiam at primis tempor sagittis sit,
/// euismod libero facilisi aptent elementum felis blandit cursus gravida sociis
/// erat ante, eleifend lectus nullam dapibus netus feugiat curae curabitur est
/// ad.
class C : public A {
public:
/// Do nothing unless override is provided
virtual void foo_c() override { }
};
/// This is class D
/// which is a little like B
/// and a little like C
class D : public B, public C {
public:
/**
* Forward foo_a
*/
void foo_a() override
{
for (auto a : as)
a->foo_a();
}
/**
* Forward foo_c
*/
void foo_c() override
{
for (auto a : as)
a->foo_c();
}
private:
/// All the A pointers
std::vector<A *> as;
};
class E : virtual public B, public virtual C {
public:
///
/// Forward foo_a
///
void foo_a() override
{
for (auto a : as)
a->foo_a();
}
///
/// Forward foo_c
///
void foo_c() override
{
for (auto a : as)
a->foo_c();
}
private:
/// All the A pointers
std::vector<A *> as;
};
} // namespace ns1
} // namespace t90001
} // namespace clanguml

92
tests/t90001/test_case.h Normal file
View File

@@ -0,0 +1,92 @@
/**
* tests/t90001/test_case.cc
*
* 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("t90001", "[test-case][config]")
{
using clanguml::error::empty_diagram_error;
auto [config, db] = load_config("t90001");
{
auto diagram = config.diagrams["t90001_class"];
auto model = generate_class_diagram(*db, diagram);
REQUIRE(model->is_empty());
REQUIRE(model->name() == "t90001_class");
REQUIRE_THROWS_AS(
generate_class_puml(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_class_json(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_class_mermaid(diagram, *model), empty_diagram_error);
}
{
auto diagram = config.diagrams["t90001_sequence"];
auto model = generate_sequence_diagram(*db, diagram);
REQUIRE(model->is_empty());
REQUIRE(model->name() == "t90001_sequence");
REQUIRE_THROWS_AS(
generate_sequence_puml(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_sequence_json(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_sequence_mermaid(diagram, *model), empty_diagram_error);
}
{
auto diagram = config.diagrams["t90001_package"];
auto model = generate_package_diagram(*db, diagram);
REQUIRE(model->is_empty());
REQUIRE(model->name() == "t90001_package");
REQUIRE_THROWS_AS(
generate_package_puml(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_package_json(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_package_mermaid(diagram, *model), empty_diagram_error);
}
{
auto diagram = config.diagrams["t90001_include"];
auto model = generate_include_diagram(*db, diagram);
REQUIRE(model->is_empty());
REQUIRE(model->name() == "t90001_include");
REQUIRE_THROWS_AS(
generate_include_puml(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_include_json(diagram, *model), empty_diagram_error);
REQUIRE_THROWS_AS(
generate_include_mermaid(diagram, *model), empty_diagram_error);
}
}

View File

@@ -501,6 +501,7 @@ using namespace clanguml::test::matchers;
/// Other tests (e.g. configuration file)
///
#include "t90000/test_case.h"
#include "t90001/test_case.h"
///
/// Main test function