diff --git a/ChangeLog.adoc b/ChangeLog.adoc index e52169737..605ee6ef2 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -123,6 +123,7 @@ Tests:: * irc: check tags in messages displayed by IRC plugin * irc: add tests on function irc_server_alloc_with_url * irc: add tests on message/notice/action/CTCP sent + * logger: add tests on tail functions * relay: add tests on "irc" protocol Build:: diff --git a/doc/en/weechat_dev.en.adoc b/doc/en/weechat_dev.en.adoc index 48c9cdf1b..3f9fc15a8 100644 --- a/doc/en/weechat_dev.en.adoc +++ b/doc/en/weechat_dev.en.adoc @@ -448,6 +448,7 @@ WeeChat "core" is located in following directories: |          logger/ | Root of unit tests for logger plugin. |             test-logger.cpp | Tests: logger. |             test-logger-backlog.cpp | Tests: logger backlog. +|             test-logger-tail.cpp | Tests: logger tail functions. |          trigger/ | Root of unit tests for trigger plugin. |             test-trigger.cpp | Tests: triggers. |             test-trigger-config.cpp | Tests: trigger configuration. diff --git a/doc/fr/weechat_dev.fr.adoc b/doc/fr/weechat_dev.fr.adoc index f1cec2445..e57a71f0d 100644 --- a/doc/fr/weechat_dev.fr.adoc +++ b/doc/fr/weechat_dev.fr.adoc @@ -450,6 +450,7 @@ Le cœur de WeeChat est situé dans les répertoires suivants : |          logger/ | Racine des tests unitaires pour l'extension logger. |             test-logger.cpp | Tests : logger. |             test-logger-backlog.cpp | Tests : backlog logger. +|             test-logger-tail.cpp | Tests : fonctions "tail". |          trigger/ | Racine des tests unitaires pour l'extension trigger. |             test-trigger.cpp | Tests : triggers. |             test-trigger-config.cpp | Tests : configuration trigger. diff --git a/doc/ja/weechat_dev.ja.adoc b/doc/ja/weechat_dev.ja.adoc index 49d37f349..37c58cad2 100644 --- a/doc/ja/weechat_dev.ja.adoc +++ b/doc/ja/weechat_dev.ja.adoc @@ -502,6 +502,8 @@ WeeChat "core" は以下のディレクトリに配置されています: // TRANSLATION MISSING |             test-logger-backlog.cpp | Tests: logger backlog. // TRANSLATION MISSING +|             test-logger-tail.cpp | Tests: logger tail functions. +// TRANSLATION MISSING |          trigger/ | Root of unit tests for trigger plugin. // TRANSLATION MISSING |             test-trigger.cpp | Tests: triggers. diff --git a/doc/sr/weechat_dev.sr.adoc b/doc/sr/weechat_dev.sr.adoc index dfad64971..c2ea1d935 100644 --- a/doc/sr/weechat_dev.sr.adoc +++ b/doc/sr/weechat_dev.sr.adoc @@ -450,6 +450,8 @@ WeeChat „језгро” се налази у следећим директо |          logger/ | Корен unit тестива за logger додатак. |             test-logger.cpp | Тестови: logger. |             test-logger-backlog.cpp | Тестови: logger заостатак. +// TRANSLATION MISSING +|             test-logger-tail.cpp | Tests: logger tail functions. |          trigger/ | Корен unit тестова за окидач додатак. |             test-trigger.cpp | Тестови: окидачи. |             test-trigger-config.cpp | Тестови: конфигурација окидача. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 092ef3a53..048c8a097 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -91,6 +91,7 @@ if(ENABLE_LOGGER) list(APPEND LIB_WEECHAT_UNIT_TESTS_PLUGINS_SRC unit/plugins/logger/test-logger.cpp unit/plugins/logger/test-logger-backlog.cpp + unit/plugins/logger/test-logger-tail.cpp ) endif() diff --git a/tests/unit/plugins/logger/test-logger-tail.cpp b/tests/unit/plugins/logger/test-logger-tail.cpp new file mode 100644 index 000000000..c4f35f378 --- /dev/null +++ b/tests/unit/plugins/logger/test-logger-tail.cpp @@ -0,0 +1,128 @@ +/* + * test-logger-tail.cpp - test logger tail functions + * + * Copyright (C) 2023 Sébastien Helleu + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see . + */ + +#include "CppUTest/TestHarness.h" + +#include "tests/tests.h" + +extern "C" +{ +#include +#include +#include "src/core/wee-arraylist.h" +#include "src/core/wee-string.h" +#include "src/plugins/logger/logger-tail.h" + +extern const char *logger_tail_last_eol (const char *string_start, + const char *string_ptr); +} + +TEST_GROUP(LoggerTail) +{ +}; + +/* + * Tests functions: + * logger_tail_last_eol + */ + +TEST(LoggerTail, LoggerTailLastEol) +{ + const char *str = "abc\ndef\rghi"; + + POINTERS_EQUAL(NULL, logger_tail_last_eol (NULL, NULL)); + POINTERS_EQUAL(NULL, logger_tail_last_eol (NULL, "")); + POINTERS_EQUAL(NULL, logger_tail_last_eol ("", NULL)); + POINTERS_EQUAL(NULL, logger_tail_last_eol ("", "")); + POINTERS_EQUAL(NULL, logger_tail_last_eol (str + 9, str)); + + POINTERS_EQUAL(NULL, logger_tail_last_eol (str, str)); + POINTERS_EQUAL(NULL, logger_tail_last_eol (str, str + 1)); + POINTERS_EQUAL(NULL, logger_tail_last_eol (str, str + 2)); + + POINTERS_EQUAL(str + 3, logger_tail_last_eol (str, str + 3)); + POINTERS_EQUAL(str + 3, logger_tail_last_eol (str, str + 4)); + POINTERS_EQUAL(str + 3, logger_tail_last_eol (str, str + 5)); + POINTERS_EQUAL(str + 3, logger_tail_last_eol (str, str + 6)); + + POINTERS_EQUAL(str + 7, logger_tail_last_eol (str, str + 7)); + POINTERS_EQUAL(str + 7, logger_tail_last_eol (str, str + 8)); + POINTERS_EQUAL(str + 7, logger_tail_last_eol (str, str + 9)); + POINTERS_EQUAL(str + 7, logger_tail_last_eol (str, str + 10)); +} + +/* + * Tests functions: + * logger_tail_file + * logger_tail_free + */ + +TEST(LoggerTail, LoggerTailFile) +{ + char *filename; + FILE *file; + const char *content = "line 1\nline 2\nline 3"; + struct t_arraylist *lines; + + /* write a test file */ + filename = string_eval_path_home ("${weechat_data_dir}/test_file.txt", + NULL, NULL, NULL); + file = fopen (filename, "w"); + fwrite (content, 1, strlen (content), file); + fflush (file); + fclose (file); + + POINTERS_EQUAL(NULL, logger_tail_file (NULL, 0)); + POINTERS_EQUAL(NULL, logger_tail_file (NULL, 1)); + POINTERS_EQUAL(NULL, logger_tail_file (filename, 0)); + + lines = logger_tail_file (filename, 1); + CHECK(lines); + LONGS_EQUAL(1, arraylist_size (lines)); + STRCMP_EQUAL("line 3", (const char *)arraylist_get (lines, 0)); + arraylist_free (lines); + + lines = logger_tail_file (filename, 2); + CHECK(lines); + LONGS_EQUAL(2, arraylist_size (lines)); + STRCMP_EQUAL("line 2", (const char *)arraylist_get (lines, 0)); + STRCMP_EQUAL("line 3", (const char *)arraylist_get (lines, 1)); + arraylist_free (lines); + + lines = logger_tail_file (filename, 3); + CHECK(lines); + LONGS_EQUAL(3, arraylist_size (lines)); + STRCMP_EQUAL("line 1", (const char *)arraylist_get (lines, 0)); + STRCMP_EQUAL("line 2", (const char *)arraylist_get (lines, 1)); + STRCMP_EQUAL("line 3", (const char *)arraylist_get (lines, 2)); + arraylist_free (lines); + + lines = logger_tail_file (filename, 4); + CHECK(lines); + LONGS_EQUAL(3, arraylist_size (lines)); + STRCMP_EQUAL("line 1", (const char *)arraylist_get (lines, 0)); + STRCMP_EQUAL("line 2", (const char *)arraylist_get (lines, 1)); + STRCMP_EQUAL("line 3", (const char *)arraylist_get (lines, 2)); + arraylist_free (lines); + + unlink (filename); + free (filename); +}