Improved test coverage (#287)
This commit is contained in:
@@ -4,6 +4,7 @@ comment_parser: clang
|
||||
add_compile_flags:
|
||||
- -fparse-all-comments
|
||||
- -Wno-deprecated-declarations
|
||||
- -Wno-ignored-optimization-argument
|
||||
remove_compile_flags:
|
||||
- -Wno-class-memaccess
|
||||
- -Wno-dangling-reference
|
||||
|
||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
||||
make check-formatting
|
||||
- name: Build and unit test
|
||||
run: |
|
||||
NUMPROC=2 CMAKE_CXX_FLAGS="--coverage -fno-inline" CMAKE_EXE_LINKER_FLAGS="-lgcov --coverage" LLVM_VERSION=15 make test
|
||||
NUMPROC=2 CODE_COVERAGE=ON LLVM_VERSION=15 make test
|
||||
- name: Run coverage
|
||||
run: |
|
||||
lcov -c -d debug -o coverage.info
|
||||
|
||||
@@ -61,6 +61,15 @@ setup_git_version()
|
||||
message(STATUS "clang-uml version: "
|
||||
"${GIT_VERSION_MAJOR}.${GIT_VERSION_MINOR}.${GIT_VERSION_PATCH}")
|
||||
|
||||
#
|
||||
# Setup coverage
|
||||
#
|
||||
option(CODE_COVERAGE "" OFF)
|
||||
if(CODE_COVERAGE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fno-inline")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov --coverage")
|
||||
endif(CODE_COVERAGE)
|
||||
|
||||
#
|
||||
# Setup LLVM
|
||||
#
|
||||
|
||||
4
Makefile
4
Makefile
@@ -37,6 +37,7 @@ CMAKE_PREFIX ?=
|
||||
CMAKE_CXX_FLAGS ?=
|
||||
CMAKE_EXE_LINKER_FLAGS ?=
|
||||
CMAKE_GENERATOR ?= Unix Makefiles
|
||||
CODE_COVERAGE ?= OFF
|
||||
|
||||
ENABLE_CXX_MODULES_TEST_CASES ?= OFF
|
||||
ENABLE_CUDA_TEST_CASES ?= OFF
|
||||
@@ -65,7 +66,8 @@ debug/CMakeLists.txt:
|
||||
-DLINK_LLVM_SHARED=${LLVM_SHARED} \
|
||||
-DCMAKE_PREFIX=${CMAKE_PREFIX} \
|
||||
-DENABLE_CUDA_TEST_CASES=$(ENABLE_CUDA_TEST_CASES) \
|
||||
-DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES)
|
||||
-DENABLE_CXX_MODULES_TEST_CASES=$(ENABLE_CXX_MODULES_TEST_CASES) \
|
||||
-DCODE_COVERAGE=$(CODE_COVERAGE)
|
||||
|
||||
release/CMakeLists.txt:
|
||||
cmake -S . -B release \
|
||||
|
||||
@@ -207,10 +207,6 @@ bool translation_unit_visitor::VisitClassTemplateSpecializationDecl(
|
||||
|
||||
auto &template_specialization = *template_specialization_ptr;
|
||||
|
||||
if (cls->hasBody()) {
|
||||
process_template_specialization_children(cls, template_specialization);
|
||||
}
|
||||
|
||||
if (cls->hasDefinition()) {
|
||||
// Process template specialization bases
|
||||
process_class_bases(cls, template_specialization);
|
||||
@@ -1005,75 +1001,6 @@ void translation_unit_visitor::process_class_bases(
|
||||
}
|
||||
}
|
||||
|
||||
void translation_unit_visitor::process_template_specialization_children(
|
||||
const clang::ClassTemplateSpecializationDecl *cls, class_ &c)
|
||||
{
|
||||
assert(cls != nullptr);
|
||||
|
||||
// Iterate over class methods (both regular and static)
|
||||
for (const auto *method : cls->methods()) {
|
||||
if (method != nullptr) {
|
||||
process_method(*method, c);
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate over class template methods
|
||||
if (const auto *cls_decl_context =
|
||||
clang::dyn_cast_or_null<clang::DeclContext>(cls);
|
||||
cls_decl_context != nullptr) {
|
||||
for (auto const *decl_iterator :
|
||||
clang::dyn_cast_or_null<clang::DeclContext>(cls)->decls()) {
|
||||
auto const *method_template =
|
||||
llvm::dyn_cast_or_null<clang::FunctionTemplateDecl>(
|
||||
decl_iterator);
|
||||
if (method_template == nullptr)
|
||||
continue;
|
||||
|
||||
process_template_method(*method_template, c);
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate over regular class fields
|
||||
for (const auto *field : cls->fields()) {
|
||||
if (field != nullptr)
|
||||
process_field(*field, c);
|
||||
}
|
||||
|
||||
// Static fields have to be processed by iterating over variable
|
||||
// declarations
|
||||
for (const auto *decl : cls->decls()) {
|
||||
if (decl->getKind() == clang::Decl::Var) {
|
||||
const clang::VarDecl *variable_declaration{
|
||||
dynamic_cast<const clang::VarDecl *>(decl)};
|
||||
if ((variable_declaration != nullptr) &&
|
||||
variable_declaration->isStaticDataMember()) {
|
||||
process_static_field(*variable_declaration, c);
|
||||
}
|
||||
}
|
||||
else if (decl->getKind() == clang::Decl::Enum) {
|
||||
const auto *enum_decl =
|
||||
clang::dyn_cast_or_null<clang::EnumDecl>(decl);
|
||||
if (enum_decl == nullptr)
|
||||
continue;
|
||||
|
||||
if (enum_decl->getNameAsString().empty()) {
|
||||
for (const auto *enum_const : enum_decl->enumerators()) {
|
||||
class_member m{common::access_specifier_to_access_t(
|
||||
enum_decl->getAccess()),
|
||||
enum_const->getNameAsString(), "enum"};
|
||||
c.add_member(std::move(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cls->hasFriends()) {
|
||||
for (const auto *friend_declaration : cls->friends()) {
|
||||
process_friend(*friend_declaration, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void translation_unit_visitor::process_record_members(
|
||||
const clang::RecordDecl *cls, class_ &c)
|
||||
{
|
||||
|
||||
@@ -224,7 +224,7 @@ private:
|
||||
clang::ClassTemplateSpecializationDecl *cls);
|
||||
|
||||
/**
|
||||
* @brief Process template specialiaztion children (members and methods)
|
||||
* @brief Process template specialization children (members and methods)
|
||||
* @param cls Class template specialization declaration
|
||||
* @param c Class diagram element model
|
||||
*/
|
||||
|
||||
@@ -1086,7 +1086,7 @@ void diagram_filter::init_filters(const config::diagram &c)
|
||||
element_filters.emplace_back(
|
||||
std::make_unique<source_file_dependency_filter_t>(
|
||||
filter_t::kInclusive, relationship_t::kAssociation,
|
||||
dependants));
|
||||
dependants, false));
|
||||
|
||||
element_filters.emplace_back(
|
||||
std::make_unique<source_file_dependency_filter_t>(
|
||||
@@ -1149,26 +1149,29 @@ void diagram_filter::init_filters(const config::diagram &c)
|
||||
std::make_unique<specializations_filter_t>(filter_t::kExclusive,
|
||||
relationship_t::kInstantiation, c.exclude().specializations));
|
||||
|
||||
add_exclusive_filter(
|
||||
std::make_unique<class_dependants_filter_t>(filter_t::kExclusive,
|
||||
relationship_t::kDependency, c.exclude().dependants));
|
||||
if (c.type() == diagram_t::kClass) {
|
||||
add_exclusive_filter(std::make_unique<class_dependants_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kDependency,
|
||||
c.exclude().dependants));
|
||||
|
||||
add_exclusive_filter(
|
||||
std::make_unique<package_dependants_filter_t>(filter_t::kExclusive,
|
||||
relationship_t::kDependency, c.exclude().dependants));
|
||||
|
||||
add_exclusive_filter(
|
||||
std::make_unique<class_dependencies_filter_t>(filter_t::kExclusive,
|
||||
relationship_t::kDependency, c.exclude().dependencies, true));
|
||||
|
||||
add_exclusive_filter(std::make_unique<package_dependencies_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kDependency,
|
||||
c.exclude().dependencies, true));
|
||||
|
||||
if (c.type() == diagram_t::kSequence) {
|
||||
add_exclusive_filter(std::make_unique<class_dependencies_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kDependency,
|
||||
c.exclude().dependencies, true));
|
||||
}
|
||||
else if (c.type() == diagram_t::kSequence) {
|
||||
add_exclusive_filter(std::make_unique<callee_filter>(
|
||||
filter_t::kExclusive, c.exclude().callee_types));
|
||||
}
|
||||
else if (c.type() == diagram_t::kPackage) {
|
||||
add_exclusive_filter(
|
||||
std::make_unique<package_dependencies_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kDependency,
|
||||
c.exclude().dependencies, true));
|
||||
|
||||
add_exclusive_filter(std::make_unique<package_dependants_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kDependency,
|
||||
c.exclude().dependants));
|
||||
}
|
||||
else if (c.type() == diagram_t::kInclude) {
|
||||
std::vector<std::string> dependants;
|
||||
std::vector<std::string> dependencies;
|
||||
@@ -1176,10 +1179,6 @@ void diagram_filter::init_filters(const config::diagram &c)
|
||||
for (auto &&path : c.exclude().dependants) {
|
||||
if (auto p = path.get<std::string>(); p.has_value()) {
|
||||
std::filesystem::path dep_path{*p};
|
||||
if (dep_path.is_relative()) {
|
||||
dep_path = relative(*p, c.root_directory());
|
||||
}
|
||||
|
||||
dependants.emplace_back(
|
||||
dep_path.lexically_normal().string());
|
||||
}
|
||||
@@ -1188,24 +1187,20 @@ void diagram_filter::init_filters(const config::diagram &c)
|
||||
for (auto &&path : c.exclude().dependencies) {
|
||||
if (auto p = path.get<std::string>(); p.has_value()) {
|
||||
std::filesystem::path dep_path{*p};
|
||||
if (dep_path.is_relative()) {
|
||||
dep_path = relative(*p, c.root_directory());
|
||||
}
|
||||
|
||||
dependencies.emplace_back(
|
||||
dep_path.lexically_normal().string());
|
||||
}
|
||||
}
|
||||
|
||||
add_exclusive_filter(std::make_unique<
|
||||
edge_traversal_filter<include_diagram::model::diagram,
|
||||
common::model::source_file>>(filter_t::kExclusive,
|
||||
relationship_t::kAssociation, dependencies, true));
|
||||
add_exclusive_filter(
|
||||
std::make_unique<source_file_dependency_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kAssociation,
|
||||
dependants, false));
|
||||
|
||||
add_exclusive_filter(std::make_unique<
|
||||
edge_traversal_filter<include_diagram::model::diagram,
|
||||
common::model::source_file>>(filter_t::kExclusive,
|
||||
relationship_t::kAssociation, dependants));
|
||||
add_exclusive_filter(
|
||||
std::make_unique<source_file_dependency_filter_t>(
|
||||
filter_t::kExclusive, relationship_t::kAssociation,
|
||||
dependencies, true));
|
||||
}
|
||||
|
||||
add_exclusive_filter(std::make_unique<context_filter>(
|
||||
|
||||
@@ -319,7 +319,13 @@ struct edge_traversal_filter : public filter_visitor {
|
||||
// Now check if the e element is contained in the calculated set
|
||||
return std::any_of(matching_elements_.begin(), matching_elements_.end(),
|
||||
[&e](const auto &te) {
|
||||
return te.get().full_name(false) == e.full_name(false);
|
||||
std::string tes = te.get().full_name(false);
|
||||
std::string es = e.full_name(false);
|
||||
|
||||
if (tes == es)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -397,9 +403,7 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
assert(roots_.empty() == matching_elements_.empty());
|
||||
|
||||
bool keep_looking{true};
|
||||
bool keep_looking{!matching_elements_.empty()};
|
||||
while (keep_looking) {
|
||||
keep_looking = false;
|
||||
if (forward_) {
|
||||
@@ -647,14 +651,22 @@ public:
|
||||
*/
|
||||
template <typename T> bool should_include(const T &e) const
|
||||
{
|
||||
auto exc = tvl::any_of(exclusive_.begin(), exclusive_.end(),
|
||||
[this, &e](const auto &ex) { return ex->match(diagram_, e); });
|
||||
auto exc = tvl::any_of(
|
||||
exclusive_.begin(), exclusive_.end(), [this, &e](const auto &ex) {
|
||||
assert(ex.get() != nullptr);
|
||||
|
||||
return ex->match(diagram_, e);
|
||||
});
|
||||
|
||||
if (tvl::is_true(exc))
|
||||
return false;
|
||||
|
||||
auto inc = tvl::all_of(inclusive_.begin(), inclusive_.end(),
|
||||
[this, &e](const auto &in) { return in->match(diagram_, e); });
|
||||
auto inc = tvl::all_of(
|
||||
inclusive_.begin(), inclusive_.end(), [this, &e](const auto &in) {
|
||||
assert(in.get() != nullptr);
|
||||
|
||||
return in->match(diagram_, e);
|
||||
});
|
||||
|
||||
return static_cast<bool>(tvl::is_undefined(inc) || tvl::is_true(inc));
|
||||
}
|
||||
|
||||
@@ -332,34 +332,6 @@ template_parameter::template_params() const
|
||||
return template_params_;
|
||||
}
|
||||
|
||||
bool operator==(const template_parameter &l, const template_parameter &r)
|
||||
{
|
||||
bool res{false};
|
||||
|
||||
if (l.is_template_parameter() != r.is_template_parameter())
|
||||
return res;
|
||||
|
||||
if (l.is_function_template() != r.is_function_template())
|
||||
return res;
|
||||
|
||||
if (l.is_template_parameter()) {
|
||||
// If this is a template parameter (e.g. 'typename T' or 'typename U'
|
||||
// we don't actually care what it is called
|
||||
res = (l.is_variadic() == r.is_variadic()) &&
|
||||
(l.default_value() == r.default_value());
|
||||
}
|
||||
else
|
||||
res = (l.name() == r.name()) && (l.type() == r.type()) &&
|
||||
(l.default_value() == r.default_value());
|
||||
|
||||
return res && (l.template_params_ == r.template_params_);
|
||||
}
|
||||
|
||||
bool operator!=(const template_parameter &l, const template_parameter &r)
|
||||
{
|
||||
return !(l == r);
|
||||
}
|
||||
|
||||
std::string template_parameter::deduced_context_str() const
|
||||
{
|
||||
std::vector<std::string> deduced_contexts;
|
||||
|
||||
@@ -143,12 +143,6 @@ public:
|
||||
static template_parameter make_unexposed_argument(const std::string &type,
|
||||
const std::optional<std::string> &default_value = {});
|
||||
|
||||
friend bool operator==(
|
||||
const template_parameter &l, const template_parameter &r);
|
||||
|
||||
friend bool operator!=(
|
||||
const template_parameter &l, const template_parameter &r);
|
||||
|
||||
/**
|
||||
* Set the type of template argument
|
||||
*
|
||||
|
||||
@@ -756,6 +756,8 @@ struct config : public inheritable_diagram_options {
|
||||
void inherit();
|
||||
};
|
||||
|
||||
using config_ptr = std::unique_ptr<config>;
|
||||
|
||||
/**
|
||||
* @brief Load and parse `.clang-uml` configuration file
|
||||
*
|
||||
|
||||
@@ -31,7 +31,7 @@ TEST_CASE("t00002")
|
||||
REQUIRE(!model->should_include({"std"}, "vector"));
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
// Common test case for all diagram types
|
||||
[](const auto &src) {
|
||||
REQUIRE(HasTitle(src, "Basic class diagram example"));
|
||||
|
||||
@@ -27,7 +27,7 @@ TEST_CASE("t00003")
|
||||
REQUIRE(diagram->include().namespaces.size() == 1);
|
||||
REQUIRE(diagram->exclude().namespaces.size() == 0);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
REQUIRE(!IsDependency(src, "A", "A"));
|
||||
|
||||
@@ -26,7 +26,7 @@ TEST_CASE("t00004")
|
||||
REQUIRE(diagram->include().namespaces.size() == 1);
|
||||
REQUIRE(diagram->exclude().namespaces.size() == 0);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "A::AA"));
|
||||
REQUIRE(IsClass(src, "A::AA::AAA"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00005")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00005", "t00005_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00006")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00006", "t00006_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00007")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00007", "t00007_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00008")
|
||||
CHECK_CLASS_MODEL("t00008", "t00008_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
// TODO: add option to resolve using declared types
|
||||
// REQUIRE(IsClassTemplate(src, "A<T,P,bool (*)(int, int),int N>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00009")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00009", "t00009_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<T>"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00010")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00010", "t00010_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<T,P>"));
|
||||
REQUIRE(IsClassTemplate(src, "B<T>"));
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00011")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00011", "t00011_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(!IsClass(src, "external::C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00012")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00012", "t00012_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<T,Ts...>"));
|
||||
REQUIRE(IsClassTemplate(src, "B<int... Is>"));
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00013")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00013", "t00013_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00014")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00014", "t00014_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!src.contains("type-parameter-"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "A<T,P>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00015")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00015", "t00015_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "ns1::A"));
|
||||
REQUIRE(IsClass(src, "ns1::ns2_v0_9_0::A"));
|
||||
REQUIRE(IsClass(src, "ns1::Anon"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00016")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00016", "t00016_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "is_numeric<typename>"));
|
||||
REQUIRE(IsClassTemplate(src, "is_numeric<int>"));
|
||||
REQUIRE(IsClassTemplate(src, "is_numeric<bool>"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00017")
|
||||
CHECK_CLASS_MODEL("t00017", "t00017_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00018")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00018", "t00018_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "widget"));
|
||||
REQUIRE(IsClass(src, "impl::widget"));
|
||||
REQUIRE(IsDependency(src, "impl::widget", "widget"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00019")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00019", "t00019_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "Base"));
|
||||
REQUIRE(IsClassTemplate(src, "Layer1<LowerLayer>"));
|
||||
REQUIRE(IsClassTemplate(src, "Layer2<LowerLayer>"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00020")
|
||||
CHECK_CLASS_MODEL("t00020", "t00020_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsAbstractClass(src, "AbstractFactory"));
|
||||
REQUIRE(IsAbstractClass(src, "ProductA"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00021")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00021", "t00021_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsAbstractClass(src, "Item"));
|
||||
REQUIRE(IsAbstractClass(src, "Visitor"));
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00022")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00022", "t00022_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A1"));
|
||||
REQUIRE(IsClass(src, "A2"));
|
||||
REQUIRE(IsAbstractClass(src, "A"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00023")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00023", "t00023_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsAbstractClass(src, "Strategy"));
|
||||
REQUIRE(IsClass(src, "StrategyA"));
|
||||
REQUIRE(IsClass(src, "StrategyB"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00024")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00024", "t00024_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "Target1"));
|
||||
REQUIRE(IsClass(src, "Target2"));
|
||||
REQUIRE(IsClass(src, "Proxy"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00025")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00025", "t00025_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "Target1"));
|
||||
REQUIRE(IsClass(src, "Target2"));
|
||||
REQUIRE(IsClassTemplate(src, "Proxy<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00026")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00026", "t00026_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "Memento<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "Originator<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "Caretaker<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00027")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00027", "t00027_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsAbstractClass(src, "Shape"));
|
||||
REQUIRE(IsAbstractClass(src, "ShapeDecorator"));
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00028")
|
||||
CHECK_CLASS_MODEL("t00028", "t00028_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST_CASE("t00029")
|
||||
|
||||
REQUIRE(model->name() == "t00029_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(!IsClass(src, "B"));
|
||||
REQUIRE(IsClassTemplate(src, "C<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00030")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00030", "t00030_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00031")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00031", "t00031_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsEnum(src, "B"));
|
||||
REQUIRE(IsClass(src, "D"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00032")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00032", "t00032_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "Base"));
|
||||
REQUIRE(IsClass(src, "TBase"));
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00033")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00033", "t00033_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "B<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "C<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00034")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00034", "t00034_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "lift_void<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "drop_void<T>"));
|
||||
REQUIRE(IsClass(src, "Void"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00035")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00035", "t00035_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "Top"));
|
||||
REQUIRE(IsClass(src, "Bottom"));
|
||||
REQUIRE(IsClass(src, "Center"));
|
||||
|
||||
@@ -26,7 +26,7 @@ TEST_CASE("t00036")
|
||||
|
||||
REQUIRE(diagram->generate_packages() == true);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, {"ns1::ns11", "A<T>"}));
|
||||
REQUIRE(IsClassTemplate(src, {"ns1::ns11", "A<int>"}));
|
||||
REQUIRE(IsClass(src, {"ns1::ns11::ns111", "B"}));
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST_CASE("t00037")
|
||||
|
||||
REQUIRE(diagram->generate_packages() == true);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "ST"));
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "ST::(units)"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00038")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00038", "t00038_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00039")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00039", "t00039_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, "AAA"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00040")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00040", "t00040_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, "AAA"));
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST_CASE("t00041")
|
||||
|
||||
REQUIRE(diagram->generate_packages() == false);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!IsClass(src, "A"));
|
||||
REQUIRE(!IsClass(src, "AA"));
|
||||
REQUIRE(!IsClass(src, "AAA"));
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST_CASE("t00042")
|
||||
|
||||
REQUIRE(diagram->generate_packages() == false);
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<T>"));
|
||||
REQUIRE(IsClassTemplate(src, "B<T,K>"));
|
||||
REQUIRE(!IsClassTemplate(src, "C<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00043")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00043", "t00043_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, {"dependants", "A"}));
|
||||
REQUIRE(IsClass(src, {"dependants", "B"}));
|
||||
REQUIRE(IsClass(src, {"dependants", "C"}));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00044")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00044", "t00044_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!src.contains("type-parameter-"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "sink<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00045")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00045", "t00045_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, {"ns1", "A"}));
|
||||
REQUIRE(IsClass(src, {"ns1::ns2", "A"}));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00046")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00046", "t00046_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, {"ns1::ns2", "B"}));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00047")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00047", "t00047_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "conditional_t<Ts...>"));
|
||||
REQUIRE(IsClass(src, "conditional_t<Else>"));
|
||||
REQUIRE(IsClass(src, "conditional_t<std::true_type,Result,Tail...>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00048")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00048", "t00048_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
// Check if all classes exist
|
||||
REQUIRE(IsAbstractClass(src, "Base"));
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00049")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00049", "t00049_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "R"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "A<T>"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00050")
|
||||
CHECK_CLASS_MODEL("t00050", "t00050_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00051")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00051", "t00051_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsInnerClass(src, "A", "A::custom_thread1"));
|
||||
REQUIRE(IsInnerClass(src, "A", "A::custom_thread2"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00052")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00052", "t00052_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "B<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00053")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00053", "t00053_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "a"));
|
||||
REQUIRE(IsClass(src, "b"));
|
||||
REQUIRE(IsClass(src, "c"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00054")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00054", "t00054_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "a"));
|
||||
REQUIRE(IsClass(src, "b"));
|
||||
REQUIRE(IsClass(src, {"detail", "c"}));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00055")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00055", "t00055_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00056")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00056", "t00056_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsConcept(src, "greater_than_simple<T,L>"));
|
||||
REQUIRE(IsConcept(src, "greater_than_with_requires<T,P>"));
|
||||
REQUIRE(IsConcept(src, "max_four_bytes<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00057")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00057", "t00057_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "t00057_A"));
|
||||
REQUIRE(IsClass(src, "t00057_B"));
|
||||
REQUIRE(IsClass(src, "t00057_C"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00058")
|
||||
CHECK_CLASS_MODEL("t00058", "t00058_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsClassTemplate(src, "A<int,int,double,std::string>"));
|
||||
REQUIRE(IsClassTemplate(
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00059")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00059", "t00059_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsConcept(src, "fruit_c<T>"));
|
||||
REQUIRE(IsConcept(src, "apple_c<T>"));
|
||||
REQUIRE(IsConcept(src, "orange_c<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00060")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00060", "t00060_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00061")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00061", "t00061_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(!IsClass(src, "B"));
|
||||
REQUIRE(!IsClass(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00062")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00062", "t00062_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!src.contains("type-parameter-"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "A<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00063")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00063", "t00063_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(!IsEnum(src, "B"));
|
||||
REQUIRE(!IsEnum(src, "C"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00064")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00064", "t00064_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!src.contains("type-parameter-"));
|
||||
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00065")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00065", "t00065_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "R"));
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, {"detail", "AImpl"}));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00066")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00066", "t00066_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
REQUIRE(!IsDependency(src, "A", "A"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00067")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00067", "t00067_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!IsMethod<Public, Default>(src, "A", "A"));
|
||||
REQUIRE(!IsMethod<Public, Default>(src, "A", "void", "A &&"));
|
||||
REQUIRE(!IsMethod<Public, Deleted>(src, "A", "void", "const A &"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00068_r0")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00068", "t00068_r0_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!IsClass(src, "A"));
|
||||
REQUIRE(!IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, "AAA"));
|
||||
@@ -45,7 +45,7 @@ TEST_CASE("t00068_r1")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00068", "t00068_r1_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(!IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, "AAA"));
|
||||
@@ -67,7 +67,7 @@ TEST_CASE("t00068_r2")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00068", "t00068_r2_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "AA"));
|
||||
REQUIRE(IsClass(src, "AAA"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00069")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00069", "t00069_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
|
||||
REQUIRE(IsClassTemplate(src, "generator<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00070")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00070", "t00070_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(!IsClass(src, "C"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00071")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00071", "t00071_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "R"));
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00072")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00072", "t00072_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsModulePackage(src, "app"s));
|
||||
REQUIRE(IsModulePackage(src, "app"s, ":lib1"s));
|
||||
REQUIRE(IsModulePackage(src, "app"s, ":lib1"s, "mod1"s));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00073")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00073", "t00073_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, "A"));
|
||||
REQUIRE(IsClass(src, "B"));
|
||||
REQUIRE(IsClass(src, "AHandler"));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t00074")
|
||||
CHECK_CLASS_MODEL("t00074", "t00074_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(IsConcept(src, "fruit_c<T>"));
|
||||
REQUIRE(IsConcept(src, "apple_c<T>"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t00075")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_CLASS_MODEL("t00075", "t00075_class");
|
||||
|
||||
CHECK_CLASS_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_CLASS_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsClass(src, {"ns1::ns2", "A"}));
|
||||
REQUIRE(IsClass(src, {"ns1::ns2", "B"}));
|
||||
REQUIRE(IsClass(src, {"ns1::ns2", "ABE<ns1::ns2::C T>"}));
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST_CASE("t20001")
|
||||
CHECK_SEQUENCE_MODEL("t20001", "t20001_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(
|
||||
config, diagram, *model,
|
||||
*config, diagram, *model,
|
||||
[](const auto &src) {
|
||||
REQUIRE(HasTitle(src, "Basic sequence diagram example"));
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20002")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20002", "t20002_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsFunctionParticipant(src, "m1()"));
|
||||
REQUIRE(IsFunctionParticipant(src, "m2()"));
|
||||
REQUIRE(IsFunctionParticipant(src, "m3()"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20003")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20003", "t20003_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(IsFunctionTemplateParticipant(src, "m1<T>(T)"));
|
||||
REQUIRE(IsFunctionTemplateParticipant(src, "m2<T>(T)"));
|
||||
REQUIRE(IsFunctionTemplateParticipant(src, "m3<T>(T)"));
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20004")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20004", "t20004_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20005")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20005", "t20005_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20006")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20006", "t20006_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20007")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20007", "t20007_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
{"tmain()", "Adder<int,int>", "add(int &&,int &&)"}, //
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20008")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20008", "t20008_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20009")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20009", "t20009_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20010")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20010", "t20010_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
{"tmain()", "B<int>", "b1()"}, //
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20011")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20011", "t20011_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20012")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20012", "t20012_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
{"tmain()", "tmain()::(lambda t20012.cc:67:20)",
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20013")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20013", "t20013_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20014")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20014", "t20014_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@ TEST_CASE("t20015")
|
||||
auto [config, db, diagram, model] =
|
||||
CHECK_SEQUENCE_MODEL("t20015", "t20015_sequence");
|
||||
|
||||
CHECK_SEQUENCE_DIAGRAM(config, diagram, *model, [](const auto &src) {
|
||||
CHECK_SEQUENCE_DIAGRAM(*config, diagram, *model, [](const auto &src) {
|
||||
REQUIRE(MessageOrder(src,
|
||||
{
|
||||
{"tmain()", "B", "setup_a(std::shared_ptr<detail::A> &)"} //
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user