Added support for constructors and operators in sequence diagrams
This commit is contained in:
15
tests/t20030/.clang-uml
Normal file
15
tests/t20030/.clang-uml
Normal file
@@ -0,0 +1,15 @@
|
||||
compilation_database_dir: ..
|
||||
output_directory: puml
|
||||
diagrams:
|
||||
t20030_sequence:
|
||||
type: sequence
|
||||
glob:
|
||||
- ../../tests/t20030/t20030.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::t20030
|
||||
using_namespace:
|
||||
- clanguml::t20030
|
||||
start_from:
|
||||
- function: "clanguml::t20030::tmain(int)"
|
||||
- function: "clanguml::t20030::tmain(bool,int)"
|
||||
51
tests/t20030/t20030.cc
Normal file
51
tests/t20030/t20030.cc
Normal file
@@ -0,0 +1,51 @@
|
||||
namespace clanguml {
|
||||
namespace t20030 {
|
||||
|
||||
int magic() { return 42; }
|
||||
|
||||
class A {
|
||||
public:
|
||||
A() { create(); }
|
||||
|
||||
A(int v) { a_ = v; }
|
||||
|
||||
A &operator=(const A &a)
|
||||
{
|
||||
set(a.a_);
|
||||
return *this;
|
||||
}
|
||||
|
||||
A &operator+=(int a)
|
||||
{
|
||||
add(a);
|
||||
return *this;
|
||||
}
|
||||
|
||||
int value() const { return a_; }
|
||||
|
||||
private:
|
||||
void create() { a_ = 0; }
|
||||
|
||||
void add(int a) { a_ += a; }
|
||||
void set(int a) { a_ = a; }
|
||||
|
||||
int a_;
|
||||
};
|
||||
|
||||
void tmain(int a)
|
||||
{
|
||||
A an_a{magic()};
|
||||
an_a += 1;
|
||||
}
|
||||
|
||||
int tmain(bool f, int a)
|
||||
{
|
||||
auto an_a = A();
|
||||
auto an_b = A();
|
||||
an_a += 2;
|
||||
an_b = an_a;
|
||||
return an_b.value();
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
66
tests/t20030/test_case.h
Normal file
66
tests/t20030/test_case.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* tests/t20030/test_case.h
|
||||
*
|
||||
* Copyright (c) 2021-2023 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("t20030", "[test-case][sequence]")
|
||||
{
|
||||
auto [config, db] = load_config("t20030");
|
||||
|
||||
auto diagram = config.diagrams["t20030_sequence"];
|
||||
|
||||
REQUIRE(diagram->name == "t20030_sequence");
|
||||
|
||||
auto model = generate_sequence_diagram(*db, diagram);
|
||||
|
||||
REQUIRE(model->name() == "t20030_sequence");
|
||||
|
||||
{
|
||||
auto puml = generate_sequence_puml(diagram, *model);
|
||||
AliasMatcher _A(puml);
|
||||
|
||||
REQUIRE_THAT(puml, StartsWith("@startuml"));
|
||||
REQUIRE_THAT(puml, EndsWith("@enduml\n"));
|
||||
|
||||
// Check if all calls exist
|
||||
REQUIRE_THAT(puml, HasCall(_A("tmain(int)"), _A("magic()"), ""));
|
||||
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "create()"));
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain(int)"), _A("A"), "operator+=(int)"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "add(int)"));
|
||||
|
||||
REQUIRE_THAT(puml, HasCall(_A("tmain(bool,int)"), _A("A"), "A()"));
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain(bool,int)"), _A("A"), "operator+=(int)"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "add(int)"));
|
||||
REQUIRE_THAT(puml,
|
||||
HasCall(_A("tmain(bool,int)"), _A("A"), "operator=(const A &)"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "set(int)"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("tmain(bool,int)"), _A("A"), "value()"));
|
||||
|
||||
save_puml(
|
||||
config.output_directory() + "/" + diagram->name + ".puml", puml);
|
||||
}
|
||||
|
||||
{
|
||||
auto j = generate_sequence_json(diagram, *model);
|
||||
|
||||
using namespace json;
|
||||
|
||||
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
|
||||
}
|
||||
}
|
||||
@@ -343,6 +343,7 @@ using namespace clanguml::test::matchers;
|
||||
#include "t20027/test_case.h"
|
||||
#include "t20028/test_case.h"
|
||||
#include "t20029/test_case.h"
|
||||
#include "t20030/test_case.h"
|
||||
|
||||
///
|
||||
/// Package diagram tests
|
||||
|
||||
@@ -146,6 +146,7 @@ public:
|
||||
util::replace_all(m_message, "*", "\\*");
|
||||
util::replace_all(m_message, "[", "\\[");
|
||||
util::replace_all(m_message, "]", "\\]");
|
||||
util::replace_all(m_message, "+", "\\+");
|
||||
}
|
||||
|
||||
bool match(T const &in) const override
|
||||
|
||||
@@ -286,6 +286,9 @@ test_cases:
|
||||
- name: t20029
|
||||
title: Combined feature sequence diagram test case
|
||||
description:
|
||||
- name: t20030
|
||||
title: Constructor and operator call test case
|
||||
description:
|
||||
Package diagrams:
|
||||
- name: t30001
|
||||
title: Basic package diagram test case
|
||||
|
||||
Reference in New Issue
Block a user