Added default diagram generation error for empty diagrams (#246)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
allow_empty_diagrams: true
|
||||
diagrams:
|
||||
t90000_class:
|
||||
type: class
|
||||
|
||||
24
tests/t90001/.clang-uml
Normal file
24
tests/t90001/.clang-uml
Normal 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
88
tests/t90001/t90001.cc
Normal 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
92
tests/t90001/test_case.h
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user