mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-07-24 12:11:04 -04:00
222 lines
7.5 KiB
C++
222 lines
7.5 KiB
C++
// Copyright (C) 2026 Petr Mironychev
|
|
// Copyright (C) 2025 Povilas Kanapickas <povilas@radix.lt>
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Additional attribution terms under GPLv3 §7(b) apply — see LICENSE
|
|
|
|
#include "CodeHandlerTest.hpp"
|
|
|
|
#include <QTest>
|
|
|
|
#include "completion/CodeHandler.hpp"
|
|
|
|
namespace QodeAssist {
|
|
|
|
void CodeHandlerTest::testProcessTextEmpty()
|
|
{
|
|
QCOMPARE(CodeHandler::processText("", "/file.py"), QString("\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextCommentsAroundCodeBlock()
|
|
{
|
|
const QString input = "This is a comment\n"
|
|
"```python\nprint('Hello, world!')\n```\n"
|
|
"Another comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString("# This is a comment\n\nprint('Hello, world!')\n# Another comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithPlainCodeBlockNoNewline()
|
|
{
|
|
const QString input = "This is a comment\n"
|
|
"```print('Hello, world!')\n```\n"
|
|
"Another comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString("# This is a comment\n\nprint('Hello, world!')\n# Another comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithPlainCodeBlockWithNewline()
|
|
{
|
|
const QString input = "This is a comment\n"
|
|
"```\nprint('Hello, world!')\n```\n"
|
|
"Another comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString("# This is a comment\n\n\nprint('Hello, world!')\n# Another comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextNoCommentsWithLanguageCodeBlock()
|
|
{
|
|
const QString input = "```python\nprint('Hello, world!')\n```";
|
|
|
|
QCOMPARE(CodeHandler::processText(input, "/file.py"), QString("print('Hello, world!')\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextNoCommentsWithPlainCodeBlockNoNewline()
|
|
{
|
|
const QString input = "```print('Hello, world!')\n```";
|
|
|
|
QCOMPARE(CodeHandler::processText(input, "/file.py"), QString("print('Hello, world!')\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextNoCommentsWithPlainCodeBlockWithNewline()
|
|
{
|
|
const QString input = "```\nprint('Hello, world!')\n```";
|
|
|
|
QCOMPARE(CodeHandler::processText(input, "/file.py"), QString("\nprint('Hello, world!')\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithMultipleCodeBlocksDifferentLanguages()
|
|
{
|
|
const QString input = "First comment\n```python\nprint('Block 1')\n"
|
|
"```\nMiddle comment\n"
|
|
"```cpp\ncout << \"Block 2\";\n```\n"
|
|
"Last comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# First comment\n\n"
|
|
"print('Block 1')\n"
|
|
"// Middle comment\n\n"
|
|
"cout << \"Block 2\";\n"
|
|
"// Last comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithMultipleCodeBlocksSameLanguage()
|
|
{
|
|
const QString input = "First comment\n```python\nprint('Block 1')\n"
|
|
"```\nMiddle comment\n"
|
|
"```python\nprint('Block 2')\n```\n"
|
|
"Last comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# First comment\n\n"
|
|
"print('Block 1')\n"
|
|
"# Middle comment\n\n"
|
|
"print('Block 2')\n"
|
|
"# Last comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithMultiplePlainCodeBlocksWithNewline()
|
|
{
|
|
const QString input = "First comment\n```\nprint('Block 1')\n"
|
|
"```\nMiddle comment\n"
|
|
"```\ncout << \"Block 2\";\n```\n"
|
|
"Last comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# First comment\n\n\n"
|
|
"print('Block 1')\n"
|
|
"# Middle comment\n\n\n"
|
|
"cout << \"Block 2\";\n"
|
|
"# Last comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithMultiplePlainCodeBlocksWithoutNewline()
|
|
{
|
|
const QString input = "First comment\n```print('Block 1')\n"
|
|
"```\nMiddle comment\n"
|
|
"```cout << \"Block 2\";\n```\n"
|
|
"Last comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# First comment\n\n"
|
|
"print('Block 1')\n"
|
|
"# Middle comment\n\n"
|
|
"cout << \"Block 2\";\n"
|
|
"# Last comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithEmptyLines()
|
|
{
|
|
const QString input
|
|
= "Comment with empty line\n\n```python\nprint('Hello')\n```\n\nAnother comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# Comment with empty line\n\n\n"
|
|
"print('Hello')\n\n"
|
|
"# Another comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextPlainCodeBlockWithNewlineWithEmptyLines()
|
|
{
|
|
const QString input = "Comment with empty line\n\n```\nprint('Hello')\n```\n\nAnother comment";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString(
|
|
"# Comment with empty line\n\n\n\n"
|
|
"print('Hello')\n\n"
|
|
"# Another comment\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testProcessTextWithoutCodeBlock()
|
|
{
|
|
const QString input = "This is just a comment\nwith multiple lines";
|
|
|
|
QCOMPARE(
|
|
CodeHandler::processText(input, "/file.py"),
|
|
QString("# This is just a comment\n# with multiple lines\n\n"));
|
|
}
|
|
|
|
void CodeHandlerTest::testDetectLanguageFromLine()
|
|
{
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("```python"), QString("python"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("```javascript"), QString("js"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("```cpp"), QString("c-like"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("``` ruby "), QString("ruby"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("```"), QString());
|
|
QCOMPARE(CodeHandler::detectLanguageFromLine("``` "), QString());
|
|
}
|
|
|
|
void CodeHandlerTest::testDetectLanguageFromExtension()
|
|
{
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("py"), QString("python"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("js"), QString("js"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("cpp"), QString("c-like"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("hpp"), QString("c-like"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("rb"), QString("ruby"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("sh"), QString("shell"));
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension("unknown"), QString());
|
|
QCOMPARE(CodeHandler::detectLanguageFromExtension(""), QString());
|
|
}
|
|
|
|
void CodeHandlerTest::testCommentPrefixForDifferentLanguages()
|
|
{
|
|
struct Case
|
|
{
|
|
QString input;
|
|
QString expected;
|
|
};
|
|
|
|
const QList<Case> cases{
|
|
{"Comment\n```python\ncode\n```", "# Comment\n\ncode\n"},
|
|
{"Comment\n```cpp\ncode\n```", "// Comment\n\ncode\n"},
|
|
{"Comment\n```ruby\ncode\n```", "# Comment\n\ncode\n"},
|
|
{"Comment\n```lua\ncode\n```", "-- Comment\n\ncode\n"}};
|
|
|
|
for (const auto &testCase : cases)
|
|
QCOMPARE(CodeHandler::processText(testCase.input, ""), testCase.expected);
|
|
}
|
|
|
|
void CodeHandlerTest::testHasCodeBlocks()
|
|
{
|
|
QVERIFY(CodeHandler::hasCodeBlocks("text\n```python\ncode\n```"));
|
|
QVERIFY(!CodeHandler::hasCodeBlocks("just a plain comment\nwith two lines"));
|
|
}
|
|
|
|
} // namespace QodeAssist
|