summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Willers <M.Willers@gmx.net>2021-05-31 07:45:48 +0200
committerGitHub <noreply@github.com>2021-05-31 14:45:48 +0900
commit3bb7eb24092ff771ccfd1119f8c1088f3f78f981 (patch)
tree58ef9ed71736b72f929eaa508c088184654e4701
parentd40ecef57050a48ca2abf9c307793d183972658e (diff)
downloadDLT-daemon-3bb7eb24092ff771ccfd1119f8c1088f3f78f981.tar.gz
Add missing string functions (#309)
Signed-off-by: Martin Willers <M.Willers@gmx.net>
-rw-r--r--doc/dlt_for_developers.md4
-rw-r--r--include/dlt/dlt_user.h.in64
-rw-r--r--include/dlt/dlt_user_macros.h38
-rw-r--r--src/lib/dlt_user.c24
-rw-r--r--tests/gtest_dlt_user.cpp209
5 files changed, 333 insertions, 6 deletions
diff --git a/doc/dlt_for_developers.md b/doc/dlt_for_developers.md
index 1c4ef53..10351b9 100644
--- a/doc/dlt_for_developers.md
+++ b/doc/dlt_for_developers.md
@@ -665,9 +665,9 @@ std::string_view key = line.substr(0, 4);
std::string_view value = line.substr(6);
if (dlt_user_log_write_start_id(&ctx, &ctxdata, DLT_LOG_INFO, 42) > 0) {
- dlt_user_log_write_constant_string(&myctxdata, "key");
+ dlt_user_log_write_constant_utf8_string(&myctxdata, "key");
dlt_user_log_write_sized_utf8_string(&myctxdata, key.data(), key.size());
- dlt_user_log_write_constant_string(&myctxdata, "value");
+ dlt_user_log_write_constant_utf8_string(&myctxdata, "value");
dlt_user_log_write_sized_utf8_string(&myctxdata, value.data(), value.size());
dlt_user_log_write_finish(&myctxdata);
}
diff --git a/include/dlt/dlt_user.h.in b/include/dlt/dlt_user.h.in
index e4a1f06..960b9f0 100644
--- a/include/dlt/dlt_user.h.in
+++ b/include/dlt/dlt_user.h.in
@@ -496,7 +496,7 @@ DltReturnValue dlt_user_log_write_sized_string(DltContextData *log, const char *
/**
* Write a constant null terminated ASCII string into a DLT log message.
- * In non verbose mode DLT parameter will not be send at all.
+ * In non verbose mode DLT parameter will not be sent at all.
* dlt_user_log_write_start has to be called before adding any attributes to the log message.
* Finish sending log message by calling dlt_user_log_write_finish.
* @param log pointer to an object containing information about logging context data
@@ -507,11 +507,11 @@ DltReturnValue dlt_user_log_write_constant_string(DltContextData *log, const cha
/**
* Write a constant, potentially non-null-terminated ASCII string into a DLT log message.
- * In non verbose mode DLT parameter will not be send at all.
+ * In non verbose mode DLT parameter will not be sent at all.
* dlt_user_log_write_start has to be called before adding any attributes to the log message.
* Finish sending log message by calling dlt_user_log_write_finish.
* @param log pointer to an object containing information about logging context data
- * @param text pointer to the parameter written into log message containing null termination.
+ * @param text pointer to the parameter written into log message
* @param length length in bytes of @a text (without any termination character)
* @return Value from DltReturnValue enum
*/
@@ -539,6 +539,29 @@ DltReturnValue dlt_user_log_write_utf8_string(DltContextData *log, const char *t
DltReturnValue dlt_user_log_write_sized_utf8_string(DltContextData *log, const char *text, uint16_t length);
/**
+ * Write a constant null terminated UTF8 string into a DLT log message.
+ * In non verbose mode DLT parameter will not be sent at all.
+ * dlt_user_log_write_start has to be called before adding any attributes to the log message.
+ * Finish sending log message by calling dlt_user_log_write_finish.
+ * @param log pointer to an object containing information about logging context data
+ * @param text pointer to the parameter written into log message containing null termination.
+ * @return Value from DltReturnValue enum
+ */
+DltReturnValue dlt_user_log_write_constant_utf8_string(DltContextData *log, const char *text);
+
+/**
+ * Write a constant, potentially non-null-terminated UTF8 string into a DLT log message.
+ * In non verbose mode DLT parameter will not be sent at all.
+ * dlt_user_log_write_start has to be called before adding any attributes to the log message.
+ * Finish sending log message by calling dlt_user_log_write_finish.
+ * @param log pointer to an object containing information about logging context data
+ * @param text pointer to the parameter written into log message
+ * @param length length in bytes of @a text (without any termination character)
+ * @return Value from DltReturnValue enum
+ */
+DltReturnValue dlt_user_log_write_sized_constant_utf8_string(DltContextData *log, const char *text, uint16_t length);
+
+/**
* Write a null-terminated ASCII string with "name" attribute into a DLT log message.
* dlt_user_log_write_start has to be called before adding any parameters to the log message.
* Finish building a log message by calling dlt_user_log_write_finish.
@@ -595,7 +618,7 @@ DltReturnValue dlt_user_log_write_constant_string_attr(DltContextData *log, cons
* and no content to the message.
*
* @param log pointer to an object containing information about logging context data
- * @param text pointer to the parameter written into log message containing null termination
+ * @param text pointer to the parameter written into log message
* @param length length in bytes of @a text (without any termination character)
* @param name the "name" attribute (or NULL)
* @return value from DltReturnValue enum
@@ -634,6 +657,39 @@ DltReturnValue dlt_user_log_write_utf8_string_attr(DltContextData *log, const ch
DltReturnValue dlt_user_log_write_sized_utf8_string_attr(DltContextData *log, const char *text, uint16_t length, const char *name);
/**
+ * Write a constant, null-terminated UTF8 string with "name" attribute into a DLT log message.
+ * In non-verbose mode, this parameter will not be sent at all.
+ * dlt_user_log_write_start has to be called before adding any parameters to the log message.
+ * Finish building a log message by calling dlt_user_log_write_finish.
+ *
+ * If @a name is NULL, this function will add an attribute field with length 0
+ * and no content to the message.
+ *
+ * @param log pointer to an object containing information about logging context data
+ * @param text pointer to the parameter written into log message containing null termination
+ * @param name the "name" attribute (or NULL)
+ * @return value from DltReturnValue enum
+ */
+DltReturnValue dlt_user_log_write_constant_utf8_string_attr(DltContextData *log, const char *text, const char *name);
+
+/**
+ * Write a constant, potentially non-null-terminated UTF8 string with "name" attribute into a DLT log message.
+ * In non-verbose mode, this parameter will not be sent at all.
+ * dlt_user_log_write_start has to be called before adding any parameters to the log message.
+ * Finish building a log message by calling dlt_user_log_write_finish.
+ *
+ * If @a name is NULL, this function will add an attribute field with length 0
+ * and no content to the message.
+ *
+ * @param log pointer to an object containing information about logging context data
+ * @param text pointer to the parameter written into log message
+ * @param length length in bytes of @a text (without any termination character)
+ * @param name the "name" attribute (or NULL)
+ * @return value from DltReturnValue enum
+ */
+DltReturnValue dlt_user_log_write_sized_constant_utf8_string_attr(DltContextData *log, const char *text, uint16_t length, const char *name);
+
+/**
* Write a binary memory block into a DLT log message.
* dlt_user_log_write_start has to be called before adding any attributes to the log message.
* Finish sending log message by calling dlt_user_log_write_finish.
diff --git a/include/dlt/dlt_user_macros.h b/include/dlt/dlt_user_macros.h
index 24b7b7a..f7d8033 100644
--- a/include/dlt/dlt_user_macros.h
+++ b/include/dlt/dlt_user_macros.h
@@ -369,6 +369,24 @@
(void)dlt_user_log_write_sized_utf8_string(&log_local, TEXT, LEN)
/**
+ * Add constant utf8-encoded string parameter to the log messsage.
+ * @param TEXT Constant UTF8-encoded string
+ */
+#define DLT_CUTF8(TEXT) \
+ (void)dlt_user_log_write_constant_utf8_string(&log_local, TEXT)
+
+/**
+ * Add constant utf8-encoded string parameter with given length to the log messsage.
+ * The string in @a TEXT does not need to be null-terminated, but
+ * the copied string will be null-terminated at its destination
+ * in the message buffer.
+ * @param TEXT Constant UTF8-encoded string
+ * @param LEN length in bytes to take from @a TEXT
+ */
+#define DLT_SIZED_CUTF8(TEXT, LEN) \
+ (void)dlt_user_log_write_sized_constant_utf8_string(&log_local, TEXT, LEN)
+
+/**
* Add string parameter with "name" attribute to the log messsage.
* @param TEXT ASCII string
* @param NAME "name" attribute
@@ -429,6 +447,26 @@
(void)dlt_user_log_write_sized_utf8_string_attr(&log_local, TEXT, LEN, ATTR)
/**
+ * Add constant utf8-encoded string parameter with "name" attribute to the log messsage.
+ * @param TEXT Constant UTF8-encoded string
+ * @param NAME "name" attribute
+ */
+#define DLT_CUTF8_ATTR(TEXT, NAME) \
+ (void)dlt_user_log_write_constant_utf8_string_attr(&log_local, TEXT, NAME)
+
+/**
+ * Add constant utf8-encoded string parameter with given length and "name" attribute to the log messsage.
+ * The string in @a TEXT does not need to be null-terminated, but
+ * the copied string will be null-terminated at its destination
+ * in the message buffer.
+ * @param TEXT Constant UTF8-encoded string
+ * @param LEN length in bytes to take from @a TEXT
+ * @param NAME "name" attribute
+ */
+#define DLT_SIZED_CUTF8_ATTR(TEXT, LEN, NAME) \
+ (void)dlt_user_log_write_sized_constant_utf8_string_attr(&log_local, TEXT, LEN, NAME)
+
+/**
* Add boolean parameter to the log messsage.
* @param BOOL_VAR Boolean value (mapped to uint8)
*/
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 98c896e..20392a6 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -2367,6 +2367,30 @@ DltReturnValue dlt_user_log_write_sized_utf8_string_attr(DltContextData *log, co
return dlt_user_log_write_sized_string_utils_attr(log, text, length, UTF8_STRING, name, true);
}
+DltReturnValue dlt_user_log_write_constant_utf8_string(DltContextData *log, const char *text)
+{
+ /* Send parameter only in verbose mode */
+ return is_verbose_mode(dlt_user.verbose_mode, log) ? dlt_user_log_write_utf8_string(log, text) : DLT_RETURN_OK;
+}
+
+DltReturnValue dlt_user_log_write_constant_utf8_string_attr(DltContextData *log, const char *text, const char *name)
+{
+ /* Send parameter only in verbose mode */
+ return is_verbose_mode(dlt_user.verbose_mode, log) ? dlt_user_log_write_utf8_string_attr(log, text, name) : DLT_RETURN_OK;
+}
+
+DltReturnValue dlt_user_log_write_sized_constant_utf8_string(DltContextData *log, const char *text, uint16_t length)
+{
+ /* Send parameter only in verbose mode */
+ return is_verbose_mode(dlt_user.verbose_mode, log) ? dlt_user_log_write_sized_utf8_string(log, text, length) : DLT_RETURN_OK;
+}
+
+DltReturnValue dlt_user_log_write_sized_constant_utf8_string_attr(DltContextData *log, const char *text, uint16_t length, const char *name)
+{
+ /* Send parameter only in verbose mode */
+ return is_verbose_mode(dlt_user.verbose_mode, log) ? dlt_user_log_write_sized_utf8_string_attr(log, text, length, name) : DLT_RETURN_OK;
+}
+
static DltReturnValue dlt_user_log_write_sized_string_utils_attr(DltContextData *log, const char *text, uint16_t length, const enum StringType type, const char *name, bool with_var_info)
{
if ((log == NULL) || (text == NULL))
diff --git a/tests/gtest_dlt_user.cpp b/tests/gtest_dlt_user.cpp
index a66f7a4..918af11 100644
--- a/tests/gtest_dlt_user.cpp
+++ b/tests/gtest_dlt_user.cpp
@@ -89,6 +89,10 @@ extern "C" {
* int dlt_user_log_write_utf8_string_attr(DltContextData *log, const char *text, const char *name);
* int dlt_user_log_write_sized_utf8_string(DltContextData *log, const char *text, uint16_t length);
* int dlt_user_log_write_sized_utf8_string_attr(DltContextData *log, const char *text, uint16_t length, const char *name);
+ * int dlt_user_log_write_constant_utf8_string(DltContextData *log, const char *text);
+ * int dlt_user_log_write_constant_utf8_string_attr(DltContextData *log, const char *text, const char *name);
+ * int dlt_user_log_write_sized_constant_utf8_string(DltContextData *log, const char *text);
+ * int dlt_user_log_write_sized_constant_utf8_string_attr(DltContextData *log, const char *text, const char *name);
* int dlt_user_log_write_raw(DltContextData *log,void *data,uint16_t length);
* int dlt_user_log_write_raw_attr(DltContextData *log,void *data,uint16_t length, const char *name);
* int dlt_user_log_write_raw_formatted(DltContextData *log,void *data,uint16_t length,DltFormatType type);
@@ -3338,6 +3342,131 @@ TEST(t_dlt_user_log_write_sized_utf8_string, nullpointer)
}
/*/////////////////////////////////////// */
+/* t_dlt_user_log_write_constant_utf8_string*/
+TEST(t_dlt_user_log_write_constant_utf8_string, verbose)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_utf8_string verbose"));
+
+ const char *text1 = "test1";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string(&contextData, text1));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_constant_utf8_string, nullpointer)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_utf8_string nullpointer"));
+
+ const char *text1 = "test1";
+ EXPECT_LE(DLT_RETURN_TRUE, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string(NULL, text1));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string(NULL, NULL));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string(&contextData, NULL));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_constant_utf8_string, nonverbose)
+{
+ dlt_nonverbose_mode();
+
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_utf8_string nonverbose"));
+
+ const char *text2 = "test2";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, 42));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string(&contextData, text2));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+
+ dlt_verbose_mode();
+}
+
+/*/////////////////////////////////////// */
+/* t_dlt_user_log_write_sized_constant_utf8_string */
+TEST(t_dlt_user_log_write_sized_constant_utf8_string, verbose)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_utf8_string verbose"));
+
+ const char *text1 = "test1text";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string(&contextData, text1, 5));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_sized_constant_utf8_string, nullpointer)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_utf8_string nullpointer"));
+
+ const char *text1 = "test1text";
+ EXPECT_LE(DLT_RETURN_TRUE, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string(NULL, text1, 5));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string(NULL, NULL, 5));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string(&contextData, NULL, 5));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_sized_constant_utf8_string, nonverbose)
+{
+ dlt_nonverbose_mode();
+
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_utf8_string nonverbose"));
+
+ const char *text2 = "test2text";
+ size_t text2len = 5; // only use a (non-null-terminated) substring
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start_id(&context, &contextData, DLT_LOG_DEFAULT, 42));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string(&contextData, text2, text2len));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+
+ dlt_verbose_mode();
+}
+
+/*/////////////////////////////////////// */
/* t_dlt_user_log_write_string_attr */
TEST(t_dlt_user_log_write_string_attr, normal)
{
@@ -3464,6 +3593,86 @@ TEST(t_dlt_user_log_write_sized_utf8_string_attr, normal)
}
/*/////////////////////////////////////// */
+/* t_dlt_user_log_write_constant_utf8_string_attr */
+TEST(t_dlt_user_log_write_constant_utf8_string_attr, normal)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_utf8_string_attr normal"));
+
+ const char *text1 = "test1";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string_attr(&contextData, text1, "name"));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_constant_utf8_string_attr, nullpointer)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_constant_utf8_string_attr nullpointer"));
+
+ const char *text1 = "test1";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string_attr(NULL, text1, "name"));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string_attr(NULL, NULL, "name"));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_constant_utf8_string_attr(&contextData, NULL, "name"));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+/*/////////////////////////////////////// */
+/* t_dlt_user_log_write_sized_constant_utf8_string_attr */
+TEST(t_dlt_user_log_write_sized_constant_utf8_string_attr, normal)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_utf8_string_attr normal"));
+
+ const char *text1 = "test1text";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string_attr(&contextData, text1, 5, "name"));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+TEST(t_dlt_user_log_write_sized_constant_utf8_string_attr, nullpointer)
+{
+ DltContext context;
+ DltContextData contextData;
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_register_app("TUSR", "dlt_user.c tests"));
+ EXPECT_LE(DLT_RETURN_OK,
+ dlt_register_context(&context, "TEST", "dlt_user.c t_dlt_user_log_write_sized_constant_utf8_string_attr nullpointer"));
+
+ const char *text1 = "test1text";
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_start(&context, &contextData, DLT_LOG_DEFAULT));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string_attr(NULL, text1, 5, "name"));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string_attr(NULL, NULL, 5, "name"));
+ EXPECT_GT(DLT_RETURN_OK, dlt_user_log_write_sized_constant_utf8_string_attr(&contextData, NULL, 5, "name"));
+ EXPECT_LE(DLT_RETURN_OK, dlt_user_log_write_finish(&contextData));
+
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_context(&context));
+ EXPECT_LE(DLT_RETURN_OK, dlt_unregister_app());
+}
+
+/*/////////////////////////////////////// */
/* t_dlt_user_log_write_raw */
TEST(t_dlt_user_log_write_raw, normal)
{