mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2025-07-19 05:24:59 -04:00
refactor: Make DocumentContextReader::prepareContext() testable (#96)
This commit is contained in:
committed by
GitHub
parent
e218699e64
commit
69a8aa80d9
@ -20,16 +20,59 @@
|
||||
#include "context/DocumentContextReader.hpp"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <QSharedPointer>
|
||||
#include <QTextDocument>
|
||||
|
||||
using namespace QodeAssist::Context;
|
||||
using namespace QodeAssist::LLMCore;
|
||||
using namespace QodeAssist::Settings;
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const QString &value)
|
||||
{
|
||||
out << value.toStdString();
|
||||
out << '"' << value.toStdString() << '"';
|
||||
return out;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
std::ostream &operator<<(std::ostream &out, const QVector<T> &value)
|
||||
{
|
||||
out << "[";
|
||||
for (const auto &el : value) {
|
||||
out << value << ", ";
|
||||
}
|
||||
out << "]";
|
||||
return out;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
std::ostream &operator<<(std::ostream &out, const std::optional<T> &value)
|
||||
{
|
||||
if (value.has_value()) {
|
||||
out << value.value();
|
||||
} else {
|
||||
out << "(no value)";
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
namespace QodeAssist::LLMCore {
|
||||
std::ostream &operator<<(std::ostream &out, const Message &value)
|
||||
{
|
||||
out << "Message{"
|
||||
<< "role=" << value.role << "content=" << value.content << "}";
|
||||
return out;
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const ContextData &value)
|
||||
{
|
||||
out << "ContextData{"
|
||||
<< "\n systemPrompt=" << value.systemPrompt << "\n prefix=" << value.prefix
|
||||
<< "\n suffix=" << value.suffix << "\n fileContext=" << value.fileContext
|
||||
<< "\n history=" << value.history << "\n}";
|
||||
return out;
|
||||
}
|
||||
} // namespace QodeAssist::LLMCore
|
||||
|
||||
class DocumentContextReaderTest : public QObject, public testing::Test
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -46,6 +89,24 @@ protected:
|
||||
{
|
||||
return DocumentContextReader(createTestDocument(text), "text/python", "/path/to/file");
|
||||
}
|
||||
|
||||
QSharedPointer<CodeCompletionSettings> createSettingsForWholeFile()
|
||||
{
|
||||
// CodeCompletionSettings is noncopyable
|
||||
auto settings = QSharedPointer<CodeCompletionSettings>::create();
|
||||
settings->readFullFile.setValue(true);
|
||||
return settings;
|
||||
}
|
||||
|
||||
QSharedPointer<CodeCompletionSettings> createSettingsForLines(int linesBefore, int linesAfter)
|
||||
{
|
||||
// CodeCompletionSettings is noncopyable
|
||||
auto settings = QSharedPointer<CodeCompletionSettings>::create();
|
||||
settings->readFullFile.setValue(false);
|
||||
settings->readStringsBeforeCursor.setValue(linesBefore);
|
||||
settings->readStringsAfterCursor.setValue(linesAfter);
|
||||
return settings;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(DocumentContextReaderTest, testGetLineText)
|
||||
@ -208,4 +269,30 @@ TEST_F(DocumentContextReaderTest, testGetContextBetween)
|
||||
EXPECT_EQ(reader.getContextBetween(1, 2, 3, 2), "ne 2\nLine 3\nLi");
|
||||
}
|
||||
|
||||
TEST_F(DocumentContextReaderTest, testPrepareContext)
|
||||
{
|
||||
auto reader = createTestReader("Line 1\nLine 2\nLine 3\nLine 4\nLine 5");
|
||||
|
||||
EXPECT_EQ(
|
||||
reader.prepareContext(2, 3, *createSettingsForWholeFile()),
|
||||
(ContextData{
|
||||
.prefix = "Line 1\nLine 2\nLin",
|
||||
.suffix = "e 3\nLine 4\nLine 5",
|
||||
.fileContext = "\n Language: (MIME: text/python) filepath: /path/to/file()\n\n\n "}));
|
||||
|
||||
EXPECT_EQ(
|
||||
reader.prepareContext(2, 3, *createSettingsForLines(1, 1)),
|
||||
(ContextData{
|
||||
.prefix = "Lin",
|
||||
.suffix = "e 3",
|
||||
.fileContext = "\n Language: (MIME: text/python) filepath: /path/to/file()\n\n\n "}));
|
||||
|
||||
EXPECT_EQ(
|
||||
reader.prepareContext(2, 3, *createSettingsForLines(2, 2)),
|
||||
(ContextData{
|
||||
.prefix = "Line 2\nLin",
|
||||
.suffix = "e 3\nLine 4",
|
||||
.fileContext = "\n Language: (MIME: text/python) filepath: /path/to/file()\n\n\n "}));
|
||||
}
|
||||
|
||||
#include "DocumentContextReaderTest.moc"
|
||||
|
Reference in New Issue
Block a user