Improved unexposed template parameter tokenization

This commit is contained in:
Bartek Kryza
2023-04-23 19:29:02 +02:00
parent 7f9d698afc
commit 0aa4eb732d
11 changed files with 530 additions and 155 deletions

View File

@@ -301,6 +301,7 @@ using namespace clanguml::test::matchers;
#endif
#include "t00060/test_case.h"
#include "t00061/test_case.h"
#include "t00062/test_case.h"
///
/// Sequence diagram tests

View File

@@ -286,4 +286,38 @@ TEST_CASE(
CHECK(sink_s.calculate_specialization_match(sink_t));
}
{
auto tp1 = template_parameter::make_template_type({});
tp1.set_method_template(true);
tp1.add_template_param(template_parameter::make_template_type("Ret"));
tp1.add_template_param(template_parameter::make_template_type("C"));
tp1.add_template_param(
template_parameter::make_template_type("Arg0"));
auto tp2 = template_parameter::make_template_type({});
tp2.set_method_template(true);
tp2.add_template_param(template_parameter::make_argument("char"));
tp2.add_template_param(template_parameter::make_template_type("C"));
tp2.add_template_param(template_parameter::make_argument("double"));
CHECK(tp2.calculate_specialization_match(tp1));
}
{
auto tp1 = template_parameter::make_template_type({});
tp1.set_method_template(true);
tp1.add_template_param(template_parameter::make_template_type("Ret"));
tp1.add_template_param(template_parameter::make_template_type("C"));
tp1.add_template_param(
template_parameter::make_template_type("Arg0"));
auto tp2 = template_parameter::make_template_type({});
tp2.set_method_template(true);
tp2.add_template_param(template_parameter::make_argument("char"));
tp2.add_template_param(template_parameter::make_template_type("C"));
tp2.add_template_param(template_parameter::make_argument("double"));
CHECK(tp2.calculate_specialization_match(tp1));
}
}

View File

@@ -285,3 +285,107 @@ TEST_CASE("Test hash_seed", "[unit-test]")
CHECK(hash_seed(1) == hash_seed(1));
CHECK(hash_seed(1) != hash_seed(2));
}
TEST_CASE("Test tokenize_unexposed_template_parameter", "[unit-test]")
{
using namespace clanguml::common;
{
auto r = tokenize_unexposed_template_parameter("type-parameter-0-1");
CHECK(r[0] == "type-parameter-0-1");
}
{
int i = 0;
auto r =
tokenize_unexposed_template_parameter("const type-parameter-0-1 &");
CHECK(r[i++] == "const");
CHECK(r[i++] == "type-parameter-0-1");
CHECK(r[i++] == "&");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"const type-parameter-0-0 type-parameter-0-1::* &&");
CHECK(r[i++] == "const");
CHECK(r[i++] == "type-parameter-0-0");
CHECK(r[i++] == "type-parameter-0-1");
CHECK(r[i++] == "::");
CHECK(r[i++] == "*");
CHECK(r[i++] == "&&");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"type-parameter-0-0 [type-parameter-0-1]");
CHECK(r[i++] == "type-parameter-0-0");
CHECK(r[i++] == "[");
CHECK(r[i++] == "type-parameter-0-1");
CHECK(r[i++] == "]");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"type-parameter-0-0 (type-parameter-0-1::*)(type-parameter-0-2, "
"type-parameter-0-3, type-parameter-0-4)");
CHECK(r[i++] == "type-parameter-0-0");
CHECK(r[i++] == "(");
CHECK(r[i++] == "type-parameter-0-1");
CHECK(r[i++] == "::");
CHECK(r[i++] == "*");
CHECK(r[i++] == ")");
CHECK(r[i++] == "(");
CHECK(r[i++] == "type-parameter-0-2");
CHECK(r[i++] == ",");
CHECK(r[i++] == "type-parameter-0-3");
CHECK(r[i++] == ",");
CHECK(r[i++] == "type-parameter-0-4");
CHECK(r[i++] == ")");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"const ns1::ns2::A &");
CHECK(r[i++] == "const");
CHECK(r[i++] == "ns1::ns2::A");
CHECK(r[i++] == "&");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"class ns1::ns2::A &");
CHECK(r[i++] == "ns1::ns2::A");
CHECK(r[i++] == "&");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"ns1::ns2::A C::* &&");
CHECK(r[i++] == "ns1::ns2::A");
CHECK(r[i++] == "C");
CHECK(r[i++] == "::");
CHECK(r[i++] == "*");
CHECK(r[i++] == "&&");
}
{
int i = 0;
auto r = tokenize_unexposed_template_parameter(
"unsigned int");
CHECK(r[i++] == "unsigned");
CHECK(r[i++] == "int");
}
}