forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user