diff options
author | David Schulz <david.schulz@theqtcompany.com> | 2016-01-13 14:32:23 +0100 |
---|---|---|
committer | David Schulz <david.schulz@theqtcompany.com> | 2016-02-24 12:03:12 +0000 |
commit | 9aa51d4857702c22d359014356d06c9d92677904 (patch) | |
tree | 79d73774ac0541e65fbe03e44592a43fc95ba152 /src/plugins/texteditor/texteditor_test.cpp | |
parent | bc921b46a2946294b467e1d2bcafb147ee77361a (diff) | |
download | qt-creator-9aa51d4857702c22d359014356d06c9d92677904.tar.gz |
Editor: Fix whitespace cleaning.
Task-number: QTCREATORBUG-7994
Change-Id: I6c197ccc3a148555018e8f8184d116c88d7ea400
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/texteditor/texteditor_test.cpp')
-rw-r--r-- | src/plugins/texteditor/texteditor_test.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/plugins/texteditor/texteditor_test.cpp b/src/plugins/texteditor/texteditor_test.cpp index 3d645116ce..786235d360 100644 --- a/src/plugins/texteditor/texteditor_test.cpp +++ b/src/plugins/texteditor/texteditor_test.cpp @@ -36,6 +36,7 @@ #include "texteditor.h" #include "texteditorplugin.h" #include "textdocument.h" +#include "tabsettings.h" using namespace TextEditor; @@ -497,4 +498,133 @@ void Internal::TextEditorPlugin::testBlockSelectionCopy() Core::EditorManager::closeDocument(editor->document(), false); } +QString tabPolicyToString(TabSettings::TabPolicy policy) +{ + switch (policy) { + case TabSettings::SpacesOnlyTabPolicy: + return QLatin1String("spacesOnlyPolicy"); + case TabSettings::TabsOnlyTabPolicy: + return QLatin1String("tabsOnlyPolicy"); + case TabSettings::MixedTabPolicy: + return QLatin1String("mixedIndentPolicy"); + } + return QString(); +} + +QString continuationAlignBehaviorToString(TabSettings::ContinuationAlignBehavior behavior) +{ + switch (behavior) { + case TabSettings::NoContinuationAlign: + return QLatin1String("noContinuation"); + case TabSettings::ContinuationAlignWithSpaces: + return QLatin1String("spacesContinuation"); + case TabSettings::ContinuationAlignWithIndent: + return QLatin1String("indentContinuation"); + } + return QString(); +} + +struct TabSettingsFlags{ + TabSettings::TabPolicy policy; + TabSettings::ContinuationAlignBehavior behavior; +}; + +typedef std::function<bool(TabSettingsFlags)> IsClean; +void generateTestRows(QLatin1String name, QString text, IsClean isClean) +{ + QList<TabSettings::TabPolicy> allPolicys; + allPolicys << TabSettings::SpacesOnlyTabPolicy + << TabSettings::TabsOnlyTabPolicy + << TabSettings::MixedTabPolicy; + QList<TabSettings::ContinuationAlignBehavior> allbehavior; + allbehavior << TabSettings::NoContinuationAlign + << TabSettings::ContinuationAlignWithSpaces + << TabSettings::ContinuationAlignWithIndent; + + const QLatin1Char splitter('_'); + const int indentSize = 3; + + foreach (TabSettings::TabPolicy policy, allPolicys) { + foreach (TabSettings::ContinuationAlignBehavior behavior, allbehavior) { + const QString tag = tabPolicyToString(policy) + splitter + + continuationAlignBehaviorToString(behavior) + splitter + + name; + QTest::newRow(tag.toLatin1().data()) + << policy + << behavior + << text + << indentSize + << isClean({policy, behavior}); + } + } +} + +void Internal::TextEditorPlugin::testIndentationClean_data() +{ + QTest::addColumn<TabSettings::TabPolicy>("policy"); + QTest::addColumn<TabSettings::ContinuationAlignBehavior>("behavior"); + QTest::addColumn<QString>("text"); + QTest::addColumn<int>("indentSize"); + QTest::addColumn<bool>("clean"); + + generateTestRows(QLatin1String("emptyString"), QString::fromLatin1(""), + [](TabSettingsFlags) -> bool { + return true; + }); + + generateTestRows(QLatin1String("spaceIndentation"), QString::fromLatin1(" f"), + [](TabSettingsFlags flags) -> bool { + return flags.policy != TabSettings::TabsOnlyTabPolicy; + }); + + generateTestRows(QLatin1String("spaceIndentationGuessTabs"), QString::fromLatin1(" f\n\tf"), + [](TabSettingsFlags flags) -> bool { + return flags.policy == TabSettings::SpacesOnlyTabPolicy; + }); + + generateTestRows(QLatin1String("tabIndentation"), QString::fromLatin1("\tf"), + [](TabSettingsFlags flags) -> bool { + return flags.policy == TabSettings::TabsOnlyTabPolicy; + }); + + generateTestRows(QLatin1String("tabIndentationGuessTabs"), QString::fromLatin1("\tf\n\tf"), + [](TabSettingsFlags flags) -> bool { + return flags.policy != TabSettings::SpacesOnlyTabPolicy; + }); + + generateTestRows(QLatin1String("doubleSpaceIndentation"), QString::fromLatin1(" f"), + [](TabSettingsFlags flags) -> bool { + return flags.policy != TabSettings::TabsOnlyTabPolicy + && flags.behavior != TabSettings::NoContinuationAlign; + }); + + generateTestRows(QLatin1String("doubleTabIndentation"), QString::fromLatin1("\t\tf"), + [](TabSettingsFlags flags) -> bool { + return flags.policy == TabSettings::TabsOnlyTabPolicy + && flags.behavior == TabSettings::ContinuationAlignWithIndent; + }); + + generateTestRows(QLatin1String("tabSpaceIndentation"), QString::fromLatin1("\t f"), + [](TabSettingsFlags flags) -> bool { + return flags.policy == TabSettings::TabsOnlyTabPolicy + && flags.behavior == TabSettings::ContinuationAlignWithSpaces; + }); +} + +void Internal::TextEditorPlugin::testIndentationClean() +{ + // fetch test data + QFETCH(TabSettings::TabPolicy, policy); + QFETCH(TabSettings::ContinuationAlignBehavior, behavior); + QFETCH(QString, text); + QFETCH(int, indentSize); + QFETCH(bool, clean); + + const TabSettings settings(policy, indentSize, indentSize, behavior); + const QTextDocument doc(text); + const QTextBlock block = doc.firstBlock(); + + QCOMPARE(settings.isIndentationClean(block, indentSize), clean); +} + #endif // ifdef WITH_TESTS |