From c08693c5085c1d33ed6f80457c73101aeb36cb09 Mon Sep 17 00:00:00 2001 From: James Graham Date: Wed, 25 Feb 2026 18:25:55 +0000 Subject: [PATCH] Fix the parsing of the chat cache so the lists are no longer broken and add tests. --- autotests/CMakeLists.txt | 6 ++++ autotests/blockcachetest.cpp | 52 +++++++++++++++++++++++++++++++++++ src/libneochat/blockcache.cpp | 1 - 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 autotests/blockcachetest.cpp diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 919dc16a8..894e55fae 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -105,6 +105,12 @@ ecm_add_test( TEST_NAME modeltest ) +ecm_add_test( + blockcachetest.cpp + LINK_LIBRARIES neochat Qt::Test + TEST_NAME blockcachetest +) + macro(add_qml_tests) if (WIN32) set(_extra_args -platform offscreen) diff --git a/autotests/blockcachetest.cpp b/autotests/blockcachetest.cpp new file mode 100644 index 000000000..c96ff2ab4 --- /dev/null +++ b/autotests/blockcachetest.cpp @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2026 James Graham +// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + +#include +#include + +#include "blockcache.h" + +#include "enums/messagecomponenttype.h" + +using namespace Block; + +class BlockCacheTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void toStringTest_data(); + void toStringTest(); +}; + +void BlockCacheTest::toStringTest_data() +{ + QTest::addColumn("inputString"); + QTest::addColumn("itemType"); + QTest::addColumn("outputstring"); + + QTest::newRow("plainText") << u"test string"_s << MessageComponentType::Text << u"test string"_s; + QTest::newRow("list") << u"- list 1\n- list 2\n- list 3\n"_s << MessageComponentType::Text << u"- list 1\n- list 2\n- list 3"_s; + QTest::newRow("code") << u"for (some code) {\n\n do something\n\n}"_s << MessageComponentType::Code + << u"```\nfor (some code) {\n do something\n}\n```"_s; + QTest::newRow("quote") << u"\"this is a quote\""_s << MessageComponentType::Quote << u"> this is a quote"_s; + QTest::newRow("heading") << u"# heading\n\nnext line"_s << MessageComponentType::Text << u"# heading\n\nnext line"_s; +} + +void BlockCacheTest::toStringTest() +{ + QFETCH(QString, inputString); + QFETCH(MessageComponentType::Type, itemType); + QFETCH(QString, outputstring); + + Cache cache; + cache += CacheItem{ + .type = itemType, + .content = QTextDocumentFragment::fromMarkdown(inputString), + }; + + QCOMPARE(cache.toString(), outputstring); +} + +QTEST_MAIN(BlockCacheTest) +#include "blockcachetest.moc" diff --git a/src/libneochat/blockcache.cpp b/src/libneochat/blockcache.cpp index 13f7e5ec5..e5d3e3544 100644 --- a/src/libneochat/blockcache.cpp +++ b/src/libneochat/blockcache.cpp @@ -53,7 +53,6 @@ inline QString trim(QString string) QString CacheItem::toString() const { auto newText = trim(content.toMarkdown(QTextDocument::MarkdownDialectGitHub)); - newText.replace(QRegularExpression(u"(?