CppEditor: Offer to insert "override" for InsertVirtualMethods

Change-Id: Iade2bcb1aa18053954df9063ca08d18d032fdfd1
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Nikolai Kosjar
2015-05-11 10:05:54 +02:00
parent e509441e4f
commit 27384b8b6e

View File

@@ -31,6 +31,7 @@
#include "cppinsertvirtualmethods.h" #include "cppinsertvirtualmethods.h"
#include "cppquickfixassistant.h" #include "cppquickfixassistant.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <cpptools/cppcodestylesettings.h> #include <cpptools/cppcodestylesettings.h>
#include <cpptools/cpptoolsreuse.h> #include <cpptools/cpptoolsreuse.h>
@@ -55,6 +56,7 @@
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QTextDocument> #include <QTextDocument>
#include <QToolButton>
#include <QTreeView> #include <QTreeView>
#include <QVBoxLayout> #include <QVBoxLayout>
@@ -97,22 +99,40 @@ public:
void initData(); void initData();
virtual ImplementationMode implementationMode() const; virtual ImplementationMode implementationMode() const;
virtual bool insertKeywordVirtual() const; virtual bool insertKeywordVirtual() const;
virtual bool insertOverrideReplacement() const;
virtual QString overrideReplacement() const;
int overrideReplacementIndex() const;
bool hideReimplementedFunctions() const;
void setHasImplementationFile(bool file); void setHasImplementationFile(bool file);
void setHasReimplementedFunctions(bool functions); void setHasReimplementedFunctions(bool functions);
bool hideReimplementedFunctions() const;
virtual bool gather(); virtual bool gather();
QStringList userAddedOverrideReplacements() const;
protected:
void setInsertOverrideReplacement(bool insert);
void setOverrideReplacement(const QString &replacements);
private slots: private slots:
void setHideReimplementedFunctions(bool hide); void setHideReimplementedFunctions(bool hide);
private:
void updateOverrideReplacementsComboBox();
private: private:
QTreeView *m_view; QTreeView *m_view;
QCheckBox *m_hideReimplementedFunctions; QCheckBox *m_hideReimplementedFunctions;
QComboBox *m_insertMode; QComboBox *m_insertMode;
QCheckBox *m_virtualKeyword; QCheckBox *m_virtualKeyword;
QCheckBox *m_overrideReplacementCheckBox;
QComboBox *m_overrideReplacementComboBox;
QToolButton *m_clearUserAddedReplacementsButton;
QDialogButtonBox *m_buttons; QDialogButtonBox *m_buttons;
QList<bool> m_expansionStateNormal; QList<bool> m_expansionStateNormal;
QList<bool> m_expansionStateReimp; QList<bool> m_expansionStateReimp;
QStringList m_availableOverrideReplacements;
bool m_hasImplementationFile; bool m_hasImplementationFile;
bool m_hasReimplementedFunctions; bool m_hasReimplementedFunctions;
@@ -262,6 +282,26 @@ Qt::ItemFlags FunctionItem::flags() const
return res; return res;
} }
QStringList defaultOverrideReplacements()
{
return {
QLatin1String("override"),
QLatin1String("Q_DECL_OVERRIDE")
};
}
QStringList sortedAndTrimmedStringListWithoutEmptyElements(const QStringList &list)
{
QStringList result;
foreach (const QString &replacement, list) {
const QString trimmedReplacement = replacement.trimmed();
if (!trimmedReplacement.isEmpty())
result << trimmedReplacement;
}
result.sort();
return result;
}
} // namespace } // namespace
namespace CppEditor { namespace CppEditor {
@@ -280,6 +320,36 @@ public:
settings()->setValue(insertVirtualKeywordKey(), insert); settings()->setValue(insertVirtualKeywordKey(), insert);
} }
static bool insertOverrideReplacement()
{
return settings()->value(insertOverrideReplacementKey(), false).toBool();
}
static void writeInsertOverrideReplacement(bool insert)
{
settings()->setValue(insertOverrideReplacementKey(), insert);
}
static int overrideReplacementIndex()
{
return settings()->value(overrideReplacementIndexKey(), 0).toInt();
}
static void writeOverrideReplacementIndex(int index)
{
settings()->setValue(overrideReplacementIndexKey(), index);
}
static QStringList userAddedOverrideReplacements()
{
return settings()->value(userAddedOverrideReplacementsKey()).toStringList();
}
static void writeUserAddedOverrideReplacements(const QStringList &additionals)
{
return settings()->setValue(userAddedOverrideReplacementsKey(), additionals);
}
static InsertVirtualMethodsDialog::ImplementationMode implementationMode() static InsertVirtualMethodsDialog::ImplementationMode implementationMode()
{ {
return static_cast<InsertVirtualMethodsDialog::ImplementationMode>( return static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
@@ -308,6 +378,15 @@ private:
static QString insertVirtualKeywordKey() static QString insertVirtualKeywordKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertKeywordVirtual"); } { return QLatin1String("QuickFix/InsertVirtualMethods/insertKeywordVirtual"); }
static QString insertOverrideReplacementKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertOverrideReplacement"); }
static QString overrideReplacementIndexKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/overrideReplacementIndex"); }
static QString userAddedOverrideReplacementsKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/userAddedOverrideReplacements"); }
static QString implementationModeKey() static QString implementationModeKey()
{ return QLatin1String("QuickFix/InsertVirtualMethods/implementationMode"); } { return QLatin1String("QuickFix/InsertVirtualMethods/implementationMode"); }
@@ -713,6 +792,9 @@ public:
Settings::writeInsertVirtualKeyword(m_factory->insertKeywordVirtual()); Settings::writeInsertVirtualKeyword(m_factory->insertKeywordVirtual());
Settings::writeImplementationMode(m_factory->implementationMode()); Settings::writeImplementationMode(m_factory->implementationMode());
Settings::writeHideReimplementedFunctions(m_factory->hideReimplementedFunctions()); Settings::writeHideReimplementedFunctions(m_factory->hideReimplementedFunctions());
Settings::writeInsertOverrideReplacement(m_factory->insertOverrideReplacement());
Settings::writeOverrideReplacementIndex(m_factory->overrideReplacementIndex());
Settings::writeUserAddedOverrideReplacements(m_factory->userAddedOverrideReplacements());
// Insert declarations (and definition if Inside-/OutsideClass) // Insert declarations (and definition if Inside-/OutsideClass)
Overview printer = CppCodeStyleSettings::currentProjectCodeStyleOverview(); Overview printer = CppCodeStyleSettings::currentProjectCodeStyleOverview();
@@ -763,6 +845,11 @@ public:
if (m_factory->insertKeywordVirtual()) if (m_factory->insertKeywordVirtual())
declaration = QLatin1String("virtual ") + declaration; declaration = QLatin1String("virtual ") + declaration;
if (m_factory->insertOverrideReplacement()) {
const QString overrideReplacement = m_factory->overrideReplacement();
if (!overrideReplacement.isEmpty())
declaration += QLatin1Char(' ') + overrideReplacement;
}
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeInsideClass) if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeInsideClass)
declaration += QLatin1String("\n{\n}\n"); declaration += QLatin1String("\n{\n}\n");
else else
@@ -912,6 +999,9 @@ InsertVirtualMethodsDialog::InsertVirtualMethodsDialog(QWidget *parent)
, m_hideReimplementedFunctions(0) , m_hideReimplementedFunctions(0)
, m_insertMode(0) , m_insertMode(0)
, m_virtualKeyword(0) , m_virtualKeyword(0)
, m_overrideReplacementCheckBox(0)
, m_overrideReplacementComboBox(0)
, m_clearUserAddedReplacementsButton(0)
, m_buttons(0) , m_buttons(0)
, m_hasImplementationFile(false) , m_hasImplementationFile(false)
, m_hasReimplementedFunctions(false) , m_hasReimplementedFunctions(false)
@@ -948,9 +1038,40 @@ void InsertVirtualMethodsDialog::initGui()
m_insertMode->addItem(tr("Insert definitions inside class"), ModeInsideClass); m_insertMode->addItem(tr("Insert definitions inside class"), ModeInsideClass);
m_insertMode->addItem(tr("Insert definitions outside class"), ModeOutsideClass); m_insertMode->addItem(tr("Insert definitions outside class"), ModeOutsideClass);
m_insertMode->addItem(tr("Insert definitions in implementation file"), ModeImplementationFile); m_insertMode->addItem(tr("Insert definitions in implementation file"), ModeImplementationFile);
m_virtualKeyword = new QCheckBox(tr("&Add keyword 'virtual' to function declaration"), this); m_virtualKeyword = new QCheckBox(tr("Add \"&virtual\" to function declaration"), this);
m_overrideReplacementCheckBox = new QCheckBox(
tr("Add \"override\" equivalent to function declaration:"), this);
m_overrideReplacementComboBox = new QComboBox(this);
QSizePolicy sizePolicy = m_overrideReplacementComboBox->sizePolicy();
sizePolicy.setHorizontalPolicy(QSizePolicy::Expanding);
m_overrideReplacementComboBox->setSizePolicy(sizePolicy);
m_overrideReplacementComboBox->setEditable(true);
connect(m_overrideReplacementCheckBox, &QCheckBox::clicked,
m_overrideReplacementComboBox, &QComboBox::setEnabled);
QAction *clearUserAddedReplacements = new QAction(this);
clearUserAddedReplacements->setIcon(QIcon(QLatin1String(Core::Constants::ICON_CLEAN_PANE)));
clearUserAddedReplacements->setText(tr("Clear Added \"override\" Equivalents"));
connect(clearUserAddedReplacements, &QAction::triggered, [this]() {
m_availableOverrideReplacements = defaultOverrideReplacements();
updateOverrideReplacementsComboBox();
m_clearUserAddedReplacementsButton->setEnabled(false);
});
m_clearUserAddedReplacementsButton = new QToolButton(this);
m_clearUserAddedReplacementsButton->setDefaultAction(clearUserAddedReplacements);
QHBoxLayout *overrideWidgetsLayout = new QHBoxLayout(this);
overrideWidgetsLayout->setSpacing(0);
overrideWidgetsLayout->setMargin(0);
overrideWidgetsLayout->addWidget(m_overrideReplacementCheckBox);
overrideWidgetsLayout->addWidget(m_overrideReplacementComboBox);
overrideWidgetsLayout->addWidget(m_clearUserAddedReplacementsButton);
QWidget *overrideWidgets = new QWidget(groupBoxImplementation);
overrideWidgets->setLayout(overrideWidgetsLayout);
groupBoxImplementationLayout->addWidget(m_insertMode); groupBoxImplementationLayout->addWidget(m_insertMode);
groupBoxImplementationLayout->addWidget(m_virtualKeyword); groupBoxImplementationLayout->addWidget(m_virtualKeyword);
groupBoxImplementationLayout->addWidget(overrideWidgets);
groupBoxImplementationLayout->addStretch(99); groupBoxImplementationLayout->addStretch(99);
// Bottom button box // Bottom button box
@@ -971,6 +1092,9 @@ void InsertVirtualMethodsDialog::initGui()
void InsertVirtualMethodsDialog::initData() void InsertVirtualMethodsDialog::initData()
{ {
m_hideReimplementedFunctions->setChecked(Settings::hideReimplementedFunctions()); m_hideReimplementedFunctions->setChecked(Settings::hideReimplementedFunctions());
const QStringList alwaysPresentReplacements = defaultOverrideReplacements();
m_availableOverrideReplacements = alwaysPresentReplacements;
m_availableOverrideReplacements += Settings::userAddedOverrideReplacements();
m_view->setModel(classFunctionFilterModel); m_view->setModel(classFunctionFilterModel);
m_expansionStateNormal.clear(); m_expansionStateNormal.clear();
@@ -979,6 +1103,15 @@ void InsertVirtualMethodsDialog::initData()
m_virtualKeyword->setChecked(Settings::insertVirtualKeyword()); m_virtualKeyword->setChecked(Settings::insertVirtualKeyword());
m_insertMode->setCurrentIndex(m_insertMode->findData(Settings::implementationMode())); m_insertMode->setCurrentIndex(m_insertMode->findData(Settings::implementationMode()));
m_overrideReplacementCheckBox->setChecked(Settings::insertOverrideReplacement());
updateOverrideReplacementsComboBox();
const bool canClear = m_availableOverrideReplacements.size() > alwaysPresentReplacements.size();
m_clearUserAddedReplacementsButton->setEnabled(canClear);
int overrideReplacementIndex = Settings::overrideReplacementIndex();
if (overrideReplacementIndex >= m_overrideReplacementComboBox->count())
overrideReplacementIndex = 0;
m_overrideReplacementComboBox->setCurrentIndex(overrideReplacementIndex);
setHideReimplementedFunctions(m_hideReimplementedFunctions->isChecked()); setHideReimplementedFunctions(m_hideReimplementedFunctions->isChecked());
if (m_hasImplementationFile) { if (m_hasImplementationFile) {
@@ -1021,6 +1154,27 @@ bool InsertVirtualMethodsDialog::insertKeywordVirtual() const
return m_virtualKeyword->isChecked(); return m_virtualKeyword->isChecked();
} }
bool InsertVirtualMethodsDialog::insertOverrideReplacement() const
{
return m_overrideReplacementCheckBox->isChecked();
}
QString InsertVirtualMethodsDialog::overrideReplacement() const
{
if (m_overrideReplacementComboBox && m_overrideReplacementComboBox->isEnabled())
return m_overrideReplacementComboBox->currentText().trimmed();
return QString();
}
int InsertVirtualMethodsDialog::overrideReplacementIndex() const
{
const QStringList all = defaultOverrideReplacements() + userAddedOverrideReplacements();
const int replacementPosition = all.indexOf(overrideReplacement());
if (replacementPosition >= 0)
return replacementPosition;
return 0;
}
void InsertVirtualMethodsDialog::setHasImplementationFile(bool file) void InsertVirtualMethodsDialog::setHasImplementationFile(bool file)
{ {
m_hasImplementationFile = file; m_hasImplementationFile = file;
@@ -1037,6 +1191,14 @@ bool InsertVirtualMethodsDialog::hideReimplementedFunctions() const
return (m_hideReimplementedFunctions && m_hideReimplementedFunctions->isChecked()); return (m_hideReimplementedFunctions && m_hideReimplementedFunctions->isChecked());
} }
QStringList InsertVirtualMethodsDialog::userAddedOverrideReplacements() const
{
QSet<QString> addedReplacements = m_availableOverrideReplacements.toSet();
addedReplacements.insert(overrideReplacement());
addedReplacements.subtract(defaultOverrideReplacements().toSet());
return sortedAndTrimmedStringListWithoutEmptyElements(addedReplacements.toList());
}
void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide) void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
{ {
InsertVirtualMethodsFilterModel *model = InsertVirtualMethodsFilterModel *model =
@@ -1057,6 +1219,13 @@ void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
restoreExpansionState(); restoreExpansionState();
} }
void InsertVirtualMethodsDialog::updateOverrideReplacementsComboBox()
{
m_overrideReplacementComboBox->clear();
foreach (const QString &replacement, m_availableOverrideReplacements)
m_overrideReplacementComboBox->addItem(replacement);
}
void InsertVirtualMethodsDialog::saveExpansionState() void InsertVirtualMethodsDialog::saveExpansionState()
{ {
InsertVirtualMethodsFilterModel *model = InsertVirtualMethodsFilterModel *model =
@@ -1114,25 +1283,31 @@ namespace Tests {
typedef QByteArray _; typedef QByteArray _;
/// Fake dialog of InsertVirtualMethodsDialog that does not pop up anything. /// Stub dialog of InsertVirtualMethodsDialog that does not pop up anything.
class InsertVirtualMethodsDialogTest : public InsertVirtualMethodsDialog class InsertVirtualMethodsDialogTest : public InsertVirtualMethodsDialog
{ {
public: public:
InsertVirtualMethodsDialogTest(ImplementationMode mode, bool insertVirtualKeyword, InsertVirtualMethodsDialogTest(ImplementationMode mode,
bool insertVirtualKeyword,
bool insertOverrideKeyword,
QWidget *parent = 0) QWidget *parent = 0)
: InsertVirtualMethodsDialog(parent) : InsertVirtualMethodsDialog(parent)
, m_implementationMode(mode) , m_implementationMode(mode)
, m_insertKeywordVirtual(insertVirtualKeyword) , m_insertKeywordVirtual(insertVirtualKeyword)
, m_insertOverrideReplacement(insertOverrideKeyword)
{ {
} }
bool gather() { return true; } bool gather() { return true; }
ImplementationMode implementationMode() const { return m_implementationMode; } ImplementationMode implementationMode() const { return m_implementationMode; }
bool insertKeywordVirtual() const { return m_insertKeywordVirtual; } bool insertKeywordVirtual() const { return m_insertKeywordVirtual; }
bool insertOverrideReplacement() const { return m_insertOverrideReplacement; }
QString overrideReplacement() const { return QLatin1String("override"); }
private: private:
ImplementationMode m_implementationMode; ImplementationMode m_implementationMode;
bool m_insertKeywordVirtual; bool m_insertKeywordVirtual;
bool m_insertOverrideReplacement;
}; };
} // namespace Tests } // namespace Tests
@@ -1140,19 +1315,20 @@ private:
InsertVirtualMethods *InsertVirtualMethods::createTestFactory() InsertVirtualMethods *InsertVirtualMethods::createTestFactory()
{ {
return new InsertVirtualMethods(new Tests::InsertVirtualMethodsDialogTest( return new InsertVirtualMethods(new Tests::InsertVirtualMethodsDialogTest(
InsertVirtualMethodsDialog::ModeOutsideClass, true)); InsertVirtualMethodsDialog::ModeOutsideClass, true, false));
} }
void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data() void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
{ {
QTest::addColumn<InsertVirtualMethodsDialog::ImplementationMode>("implementationMode"); QTest::addColumn<InsertVirtualMethodsDialog::ImplementationMode>("implementationMode");
QTest::addColumn<bool>("insertVirtualKeyword"); QTest::addColumn<bool>("insertVirtualKeyword");
QTest::addColumn<bool>("insertOverrideKeyword");
QTest::addColumn<QByteArray>("original"); QTest::addColumn<QByteArray>("original");
QTest::addColumn<QByteArray>("expected"); QTest::addColumn<QByteArray>("expected");
// Check: Insert only declarations // Check: Insert only declarations
QTest::newRow("onlyDecl") QTest::newRow("onlyDecl")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1172,9 +1348,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
"};\n" "};\n"
); );
// Check: Insert only declarations vithout virtual keyword // Check: Insert only declarations without virtual keyword but with override
QTest::newRow("onlyDeclWithoutVirtual") QTest::newRow("onlyDeclWithoutVirtual")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << false << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << false << true << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1190,13 +1366,13 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
"\n" "\n"
" // BaseA interface\n" " // BaseA interface\n"
"public:\n" "public:\n"
" int virtualFuncA();\n" " int virtualFuncA() override;\n"
"};\n" "};\n"
); );
// Check: Are access specifiers considered // Check: Are access specifiers considered
QTest::newRow("Access") QTest::newRow("Access")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1254,7 +1430,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Is a base class of a base class considered. // Check: Is a base class of a base class considered.
QTest::newRow("Superclass") QTest::newRow("Superclass")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1289,7 +1465,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Do not insert reimplemented functions twice. // Check: Do not insert reimplemented functions twice.
QTest::newRow("SuperclassOverride") QTest::newRow("SuperclassOverride")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1319,7 +1495,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Insert only declarations for pure virtual function // Check: Insert only declarations for pure virtual function
QTest::newRow("PureVirtualOnlyDecl") QTest::newRow("PureVirtualOnlyDecl")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1341,7 +1517,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Insert pure virtual functions inside class // Check: Insert pure virtual functions inside class
QTest::newRow("PureVirtualInside") QTest::newRow("PureVirtualInside")
<< InsertVirtualMethodsDialog::ModeInsideClass << true << _( << InsertVirtualMethodsDialog::ModeInsideClass << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1365,7 +1541,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Insert inside class // Check: Insert inside class
QTest::newRow("inside") QTest::newRow("inside")
<< InsertVirtualMethodsDialog::ModeInsideClass << true << _( << InsertVirtualMethodsDialog::ModeInsideClass << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1389,7 +1565,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Insert outside class // Check: Insert outside class
QTest::newRow("outside") QTest::newRow("outside")
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << _( << InsertVirtualMethodsDialog::ModeOutsideClass << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1414,7 +1590,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: No trigger: all implemented // Check: No trigger: all implemented
QTest::newRow("notrigger_allImplemented") QTest::newRow("notrigger_allImplemented")
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << _( << InsertVirtualMethodsDialog::ModeOutsideClass << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA();\n" " virtual int virtualFuncA();\n"
@@ -1427,7 +1603,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: One pure, one not // Check: One pure, one not
QTest::newRow("Some_Pure") QTest::newRow("Some_Pure")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int virtualFuncA() = 0;\n" " virtual int virtualFuncA() = 0;\n"
@@ -1451,7 +1627,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Pure function in derived class // Check: Pure function in derived class
QTest::newRow("Pure_in_Derived") QTest::newRow("Pure_in_Derived")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a();\n" " virtual int a();\n"
@@ -1481,7 +1657,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: One pure function in base class, one in derived // Check: One pure function in base class, one in derived
QTest::newRow("Pure_in_Base_And_Derived") QTest::newRow("Pure_in_Base_And_Derived")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1514,7 +1690,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: One pure function in base class, two in derived // Check: One pure function in base class, two in derived
QTest::newRow("Pure_in_Base_And_Derived_2") QTest::newRow("Pure_in_Base_And_Derived_2")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1553,7 +1729,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Remove final function // Check: Remove final function
QTest::newRow("final_function_removed") QTest::newRow("final_function_removed")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1585,7 +1761,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
// Check: Remove multiple final functions // Check: Remove multiple final functions
QTest::newRow("multiple_final_functions_removed") QTest::newRow("multiple_final_functions_removed")
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _( << InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
"class BaseA {\n" "class BaseA {\n"
"public:\n" "public:\n"
" virtual int a() = 0;\n" " virtual int a() = 0;\n"
@@ -1640,11 +1816,14 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods()
{ {
QFETCH(InsertVirtualMethodsDialog::ImplementationMode, implementationMode); QFETCH(InsertVirtualMethodsDialog::ImplementationMode, implementationMode);
QFETCH(bool, insertVirtualKeyword); QFETCH(bool, insertVirtualKeyword);
QFETCH(bool, insertOverrideKeyword);
QFETCH(QByteArray, original); QFETCH(QByteArray, original);
QFETCH(QByteArray, expected); QFETCH(QByteArray, expected);
InsertVirtualMethods factory( InsertVirtualMethods factory(
new Tests::InsertVirtualMethodsDialogTest(implementationMode, insertVirtualKeyword)); new Tests::InsertVirtualMethodsDialogTest(implementationMode,
insertVirtualKeyword,
insertOverrideKeyword));
Tests::QuickFixOperationTest(Tests::singleDocument(original, expected), &factory); Tests::QuickFixOperationTest(Tests::singleDocument(original, expected), &factory);
} }
@@ -1690,7 +1869,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_implementationFile()
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected); testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest( InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
InsertVirtualMethodsDialog::ModeImplementationFile, true)); InsertVirtualMethodsDialog::ModeImplementationFile,
true,
false));
Tests::QuickFixOperationTest(testFiles, &factory); Tests::QuickFixOperationTest(testFiles, &factory);
} }
@@ -1742,7 +1923,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_BaseClassInNamespace()
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected); testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest( InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
InsertVirtualMethodsDialog::ModeImplementationFile, true)); InsertVirtualMethodsDialog::ModeImplementationFile,
true,
false));
Tests::QuickFixOperationTest(testFiles, &factory); Tests::QuickFixOperationTest(testFiles, &factory);
} }
#endif // WITH_TESTS #endif // WITH_TESTS