Added automatic call tracing through lambdas passed to functions as params
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <utility>
|
||||
|
||||
@@ -27,6 +28,10 @@ struct C {
|
||||
void ccc() { }
|
||||
};
|
||||
|
||||
struct D {
|
||||
int add5(int arg) const { return arg + 5; }
|
||||
};
|
||||
|
||||
template <typename F> struct R {
|
||||
R(F &&f)
|
||||
: f_{std::move(f)}
|
||||
@@ -68,6 +73,12 @@ void tmain()
|
||||
R r{[&c]() { c.c(); }};
|
||||
|
||||
r.r();
|
||||
|
||||
D d;
|
||||
|
||||
std::vector<int> ints{0, 1, 2, 3, 4};
|
||||
std::transform(ints.begin(), ints.end(), ints.begin(),
|
||||
[&d](auto i) { return d.add5(i); });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,35 +36,37 @@ TEST_CASE("t20012", "[test-case][sequence]")
|
||||
|
||||
// Check if all calls exist
|
||||
REQUIRE_THAT(puml,
|
||||
HasCall(_A("tmain()"), _A("tmain()::(lambda t20012.cc:49:20)"),
|
||||
HasCall(_A("tmain()"), _A("tmain()::(lambda t20012.cc:54:20)"),
|
||||
"operator()()"));
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("A"), "a()"));
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:54:20)"), _A("A"), "a()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aa()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("A"), _A("A"), "aaa()"));
|
||||
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:49:20)"), _A("B"), "b()"));
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:54:20)"), _A("B"), "b()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bb()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("B"), _A("B"), "bbb()"));
|
||||
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:62:20)"), _A("C"), "c()"));
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:67:20)"), _A("C"), "c()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "cc()"));
|
||||
REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc()"));
|
||||
REQUIRE_THAT(puml,
|
||||
HasCall(_A("tmain()::(lambda t20012.cc:62:20)"),
|
||||
_A("tmain()::(lambda t20012.cc:49:20)"), "operator()()"));
|
||||
HasCall(_A("tmain()::(lambda t20012.cc:67:20)"),
|
||||
_A("tmain()::(lambda t20012.cc:54:20)"), "operator()()"));
|
||||
|
||||
REQUIRE_THAT(puml, HasCall(_A("C"), _A("C"), "ccc()"));
|
||||
|
||||
REQUIRE_THAT(puml,
|
||||
HasCall(_A("tmain()"), _A("R<R::(lambda t20012.cc:68:9)>"), "r()"));
|
||||
HasCall(_A("tmain()"), _A("R<R::(lambda t20012.cc:73:9)>"), "r()"));
|
||||
REQUIRE_THAT(puml,
|
||||
HasCall(_A("R<R::(lambda t20012.cc:68:9)>"),
|
||||
_A("tmain()::(lambda t20012.cc:68:9)"), "operator()()"));
|
||||
HasCall(_A("R<R::(lambda t20012.cc:73:9)>"),
|
||||
_A("tmain()::(lambda t20012.cc:73:9)"), "operator()()"));
|
||||
REQUIRE_THAT(
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:68:9)"), _A("C"), "c()"));
|
||||
puml, HasCall(_A("tmain()::(lambda t20012.cc:73:9)"), _A("C"), "c()"));
|
||||
|
||||
REQUIRE_THAT(puml, HasCall(_A("tmain()"), _A("D"), "add5(int)"));
|
||||
|
||||
save_puml(
|
||||
"./" + config.output_directory() + "/" + diagram->name + ".puml", puml);
|
||||
|
||||
@@ -3,15 +3,5 @@
|
||||
namespace clanguml {
|
||||
namespace t20014 {
|
||||
|
||||
//template <typename T, typename F> F C<T, F>::c1(F i, F j)
|
||||
//{
|
||||
// return c_.b1(i, j);
|
||||
//}
|
||||
//
|
||||
//template <typename T, typename F> F C<T, F>::c2(F i, F j)
|
||||
//{
|
||||
// return c_.b2(i, j);
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user