forked from qt-creator/qt-creator
TextEditor: Move test setup closer to tested code
Change-Id: Ib6edee42b20830a322d47fc1ba071d3cdf2d7538 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -119,7 +119,10 @@ add_qtc_plugin(TextEditor
|
|||||||
extend_qtc_plugin(TextEditor
|
extend_qtc_plugin(TextEditor
|
||||||
CONDITION WITH_TESTS
|
CONDITION WITH_TESTS
|
||||||
SOURCES
|
SOURCES
|
||||||
codeassist/codeassist_test.cpp codeassist/codeassist_test.h
|
codeassist/codeassist_test.cpp
|
||||||
highlighter_test.cpp highlighter_test.h
|
codeassist/codeassist_test.h
|
||||||
|
highlighter_test.cpp
|
||||||
|
highlighter_test.h
|
||||||
texteditor_test.cpp
|
texteditor_test.cpp
|
||||||
|
texteditor_test.h
|
||||||
)
|
)
|
||||||
|
@@ -329,12 +329,21 @@ void formatEditorAsync(TextEditorWidget *editor, const Command &command, int sta
|
|||||||
} // namespace TextEditor
|
} // namespace TextEditor
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
#include "texteditorplugin.h"
|
|
||||||
#include <QTest>
|
#include <QTest>
|
||||||
|
|
||||||
namespace TextEditor::Internal {
|
namespace TextEditor::Internal {
|
||||||
|
|
||||||
void TextEditorPlugin::testFormatting_data()
|
class FormatTextTest final : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void testFormatting_data();
|
||||||
|
void testFormatting();
|
||||||
|
};
|
||||||
|
|
||||||
|
void FormatTextTest::testFormatting_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("code");
|
QTest::addColumn<QString>("code");
|
||||||
QTest::addColumn<QString>("result");
|
QTest::addColumn<QString>("result");
|
||||||
@@ -360,7 +369,7 @@ void TextEditorPlugin::testFormatting_data()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEditorPlugin::testFormatting()
|
void FormatTextTest::testFormatting()
|
||||||
{
|
{
|
||||||
QFETCH(QString, code);
|
QFETCH(QString, code);
|
||||||
QFETCH(QString, result);
|
QFETCH(QString, result);
|
||||||
@@ -377,6 +386,13 @@ void TextEditorPlugin::testFormatting()
|
|||||||
QCOMPARE(editor->toPlainText(), result);
|
QCOMPARE(editor->toPlainText(), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QObject *createFormatTextTest()
|
||||||
|
{
|
||||||
|
return new FormatTextTest;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace TextEditor::Internal
|
} // namespace TextEditor::Internal
|
||||||
|
|
||||||
#endif
|
#include "formattexteditor.moc"
|
||||||
|
|
||||||
|
#endif // WITH_TESTS
|
||||||
|
@@ -272,13 +272,10 @@ SnippetParseResult Snippet::parse(const QString &snippet)
|
|||||||
|
|
||||||
} // Texteditor
|
} // Texteditor
|
||||||
|
|
||||||
using namespace TextEditor;
|
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
# include <QTest>
|
# include <QTest>
|
||||||
|
|
||||||
# include "../texteditorplugin.h"
|
|
||||||
|
|
||||||
const char NOMANGLER_ID[] = "TextEditor::NoMangler";
|
const char NOMANGLER_ID[] = "TextEditor::NoMangler";
|
||||||
|
|
||||||
struct SnippetPart
|
struct SnippetPart
|
||||||
@@ -297,9 +294,20 @@ struct SnippetPart
|
|||||||
};
|
};
|
||||||
Q_DECLARE_METATYPE(SnippetPart);
|
Q_DECLARE_METATYPE(SnippetPart);
|
||||||
|
|
||||||
|
namespace TextEditor::Internal {
|
||||||
|
|
||||||
using Parts = QList<SnippetPart>;
|
using Parts = QList<SnippetPart>;
|
||||||
|
|
||||||
void Internal::TextEditorPlugin::testSnippetParsing_data()
|
class SnippetParserTest final : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void testSnippetParsing_data();
|
||||||
|
void testSnippetParsing();
|
||||||
|
};
|
||||||
|
|
||||||
|
void SnippetParserTest::testSnippetParsing_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("input");
|
QTest::addColumn<QString>("input");
|
||||||
QTest::addColumn<bool>("success");
|
QTest::addColumn<bool>("success");
|
||||||
@@ -384,7 +392,7 @@ void Internal::TextEditorPlugin::testSnippetParsing_data()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void Internal::TextEditorPlugin::testSnippetParsing()
|
void SnippetParserTest::testSnippetParsing()
|
||||||
{
|
{
|
||||||
QFETCH(QString, input);
|
QFETCH(QString, input);
|
||||||
QFETCH(bool, success);
|
QFETCH(bool, success);
|
||||||
@@ -407,4 +415,14 @@ void Internal::TextEditorPlugin::testSnippetParsing()
|
|||||||
for (int i = 0; i < parts.size(); ++i)
|
for (int i = 0; i < parts.size(); ++i)
|
||||||
rangesCompare(snippet.parts.at(i), parts.at(i));
|
rangesCompare(snippet.parts.at(i), parts.at(i));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
QObject *createSnippetParserTest()
|
||||||
|
{
|
||||||
|
return new SnippetParserTest;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // TextEditor::Internal
|
||||||
|
|
||||||
|
#include "snippet.moc"
|
||||||
|
|
||||||
|
#endif // WITH_TESTS
|
||||||
|
@@ -1,19 +1,15 @@
|
|||||||
// Copyright (C) 2016 The Qt Company Ltd.
|
// Copyright (C) 2016 The Qt Company Ltd.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
#include "textdocumentlayout.h"
|
|
||||||
#include "fontsettings.h"
|
#include "fontsettings.h"
|
||||||
#include "textdocument.h"
|
#include "textdocument.h"
|
||||||
#include "texteditorplugin.h"
|
#include "textdocumentlayout.h"
|
||||||
#include "texteditorsettings.h"
|
#include "texteditorsettings.h"
|
||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/temporarydirectory.h>
|
#include <utils/temporarydirectory.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#ifdef WITH_TESTS
|
|
||||||
#include <QTest>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace TextEditor {
|
namespace TextEditor {
|
||||||
|
|
||||||
@@ -871,9 +867,24 @@ TextSuggestion::TextSuggestion()
|
|||||||
|
|
||||||
TextSuggestion::~TextSuggestion() = default;
|
TextSuggestion::~TextSuggestion() = default;
|
||||||
|
|
||||||
|
} // TextEditor
|
||||||
|
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
|
|
||||||
void Internal::TextEditorPlugin::testDeletingMarkOnReload()
|
#include <QTest>
|
||||||
|
|
||||||
|
namespace TextEditor::Internal {
|
||||||
|
|
||||||
|
class TextDocumentLayoutTest final : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void testDeletingMarkOnReload();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TextDocumentLayoutTest::testDeletingMarkOnReload()
|
||||||
{
|
{
|
||||||
auto doc = new TextDocument();
|
auto doc = new TextDocument();
|
||||||
doc->setFilePath(Utils::TemporaryDirectory::masterDirectoryFilePath() / "TestMarkDoc.txt");
|
doc->setFilePath(Utils::TemporaryDirectory::masterDirectoryFilePath() / "TestMarkDoc.txt");
|
||||||
@@ -888,6 +899,13 @@ void Internal::TextEditorPlugin::testDeletingMarkOnReload()
|
|||||||
QVERIFY(!doc->marks().contains(mark));
|
QVERIFY(!doc->marks().contains(mark));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
QObject *createTextDocumentTest()
|
||||||
|
{
|
||||||
|
return new TextDocumentLayoutTest;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace TextEditor
|
} // TextEditor::Internal
|
||||||
|
|
||||||
|
#include "textdocumentlayout.moc"
|
||||||
|
|
||||||
|
#endif // WITH_TESTS
|
||||||
|
@@ -238,6 +238,7 @@ QtcPlugin {
|
|||||||
"highlighter_test.cpp",
|
"highlighter_test.cpp",
|
||||||
"highlighter_test.h",
|
"highlighter_test.h",
|
||||||
"texteditor_test.cpp",
|
"texteditor_test.cpp",
|
||||||
|
"texteditor_test.h",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,14 +4,13 @@
|
|||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
|
|
||||||
#include "tabsettings.h"
|
#include "tabsettings.h"
|
||||||
#include "texteditorplugin.h"
|
|
||||||
|
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
#include <QtTest/QtTest>
|
#include <QtTest/QtTest>
|
||||||
|
|
||||||
namespace TextEditor {
|
namespace TextEditor::Internal {
|
||||||
|
|
||||||
QString tabPolicyToString(TabSettings::TabPolicy policy)
|
static QString tabPolicyToString(TabSettings::TabPolicy policy)
|
||||||
{
|
{
|
||||||
switch (policy) {
|
switch (policy) {
|
||||||
case TabSettings::SpacesOnlyTabPolicy:
|
case TabSettings::SpacesOnlyTabPolicy:
|
||||||
@@ -24,7 +23,7 @@ QString tabPolicyToString(TabSettings::TabPolicy policy)
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString continuationAlignBehaviorToString(TabSettings::ContinuationAlignBehavior behavior)
|
static QString continuationAlignBehaviorToString(TabSettings::ContinuationAlignBehavior behavior)
|
||||||
{
|
{
|
||||||
switch (behavior) {
|
switch (behavior) {
|
||||||
case TabSettings::NoContinuationAlign:
|
case TabSettings::NoContinuationAlign:
|
||||||
@@ -37,13 +36,15 @@ QString continuationAlignBehaviorToString(TabSettings::ContinuationAlignBehavior
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TabSettingsFlags{
|
struct TabSettingsFlags
|
||||||
|
{
|
||||||
TabSettings::TabPolicy policy;
|
TabSettings::TabPolicy policy;
|
||||||
TabSettings::ContinuationAlignBehavior behavior;
|
TabSettings::ContinuationAlignBehavior behavior;
|
||||||
};
|
};
|
||||||
|
|
||||||
using IsClean = std::function<bool (TabSettingsFlags)>;
|
using IsClean = std::function<bool (TabSettingsFlags)>;
|
||||||
void generateTestRows(const QLatin1String &name, const QString &text, IsClean isClean)
|
|
||||||
|
static void generateTestRows(const QLatin1String &name, const QString &text, IsClean isClean)
|
||||||
{
|
{
|
||||||
const QVector<TabSettings::TabPolicy> allPolicies = {
|
const QVector<TabSettings::TabPolicy> allPolicies = {
|
||||||
TabSettings::SpacesOnlyTabPolicy,
|
TabSettings::SpacesOnlyTabPolicy,
|
||||||
@@ -74,7 +75,16 @@ void generateTestRows(const QLatin1String &name, const QString &text, IsClean is
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Internal::TextEditorPlugin::testIndentationClean_data()
|
class TextEditorTest final : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void testIndentationClean_data();
|
||||||
|
void testIndentationClean();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TextEditorTest::testIndentationClean_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<TabSettings::TabPolicy>("policy");
|
QTest::addColumn<TabSettings::TabPolicy>("policy");
|
||||||
QTest::addColumn<TabSettings::ContinuationAlignBehavior>("behavior");
|
QTest::addColumn<TabSettings::ContinuationAlignBehavior>("behavior");
|
||||||
@@ -126,7 +136,7 @@ void Internal::TextEditorPlugin::testIndentationClean_data()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Internal::TextEditorPlugin::testIndentationClean()
|
void TextEditorTest::testIndentationClean()
|
||||||
{
|
{
|
||||||
// fetch test data
|
// fetch test data
|
||||||
QFETCH(TabSettings::TabPolicy, policy);
|
QFETCH(TabSettings::TabPolicy, policy);
|
||||||
@@ -142,6 +152,13 @@ void Internal::TextEditorPlugin::testIndentationClean()
|
|||||||
QCOMPARE(settings.isIndentationClean(block, indentSize), clean);
|
QCOMPARE(settings.isIndentationClean(block, indentSize), clean);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace TextEditor
|
QObject *createTextEditorTest()
|
||||||
|
{
|
||||||
|
return new TextEditorTest;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // ifdef WITH_TESTS
|
} // TextEditor::Internal
|
||||||
|
|
||||||
|
#include "texteditor_test.moc"
|
||||||
|
|
||||||
|
#endif // WITH_TESTS
|
||||||
|
15
src/plugins/texteditor/texteditor_test.h
Normal file
15
src/plugins/texteditor/texteditor_test.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
namespace TextEditor::Internal {
|
||||||
|
|
||||||
|
QObject *createTextEditorTest();
|
||||||
|
QObject *createTextDocumentTest();
|
||||||
|
QObject *createSnippetParserTest();
|
||||||
|
QObject *createFormatTextTest();
|
||||||
|
|
||||||
|
} // TextEditor::Internal
|
@@ -16,10 +16,12 @@
|
|||||||
#include "markdowneditor.h"
|
#include "markdowneditor.h"
|
||||||
#include "outlinefactory.h"
|
#include "outlinefactory.h"
|
||||||
#include "plaintexteditorfactory.h"
|
#include "plaintexteditorfactory.h"
|
||||||
|
#include "snippets/snippet.h"
|
||||||
#include "snippets/snippetprovider.h"
|
#include "snippets/snippetprovider.h"
|
||||||
#include "tabsettings.h"
|
#include "tabsettings.h"
|
||||||
#include "textdocument.h"
|
#include "textdocument.h"
|
||||||
#include "texteditor.h"
|
#include "texteditor.h"
|
||||||
|
#include "texteditor_test.h"
|
||||||
#include "texteditorconstants.h"
|
#include "texteditorconstants.h"
|
||||||
#include "texteditorsettings.h"
|
#include "texteditorsettings.h"
|
||||||
#include "texteditortr.h"
|
#include "texteditortr.h"
|
||||||
@@ -283,6 +285,13 @@ TextEditorPlugin *TextEditorPlugin::instance()
|
|||||||
|
|
||||||
void TextEditorPlugin::initialize()
|
void TextEditorPlugin::initialize()
|
||||||
{
|
{
|
||||||
|
#ifdef WITH_TESTS
|
||||||
|
addTestCreator(createFormatTextTest);
|
||||||
|
addTestCreator(createTextDocumentTest);
|
||||||
|
addTestCreator(createTextEditorTest);
|
||||||
|
addTestCreator(createSnippetParserTest);
|
||||||
|
#endif
|
||||||
|
|
||||||
setupOutlineFactory();
|
setupOutlineFactory();
|
||||||
|
|
||||||
d = new TextEditorPluginPrivate;
|
d = new TextEditorPluginPrivate;
|
||||||
|
@@ -29,20 +29,6 @@ private:
|
|||||||
void extensionsInitialized() final;
|
void extensionsInitialized() final;
|
||||||
|
|
||||||
class TextEditorPluginPrivate *d = nullptr;
|
class TextEditorPluginPrivate *d = nullptr;
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
|
||||||
private slots:
|
|
||||||
void testSnippetParsing_data();
|
|
||||||
void testSnippetParsing();
|
|
||||||
|
|
||||||
void testIndentationClean_data();
|
|
||||||
void testIndentationClean();
|
|
||||||
|
|
||||||
void testFormatting_data();
|
|
||||||
void testFormatting();
|
|
||||||
|
|
||||||
void testDeletingMarkOnReload();
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
Reference in New Issue
Block a user