summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor/texteditor_test.cpp
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@theqtcompany.com>2016-01-13 14:32:23 +0100
committerDavid Schulz <david.schulz@theqtcompany.com>2016-02-24 12:03:12 +0000
commit9aa51d4857702c22d359014356d06c9d92677904 (patch)
tree79d73774ac0541e65fbe03e44592a43fc95ba152 /src/plugins/texteditor/texteditor_test.cpp
parentbc921b46a2946294b467e1d2bcafb147ee77361a (diff)
downloadqt-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.cpp130
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