C++: Move codegen test into the CppTools plugin.

Change-Id: I4c70a9dbd5445188c3d202427da96e1c6ff90b63
Reviewed-by: Bill King <bill.king@nokia.com>
This commit is contained in:
Christian Kamm
2011-11-14 15:08:25 +01:00
committed by Bill King
parent e93d685a9e
commit bc1b724476
5 changed files with 45 additions and 76 deletions

View File

@@ -30,6 +30,8 @@
** **
**************************************************************************/ **************************************************************************/
#include "cpptoolsplugin.h"
#include <AST.h> #include <AST.h>
#include <Control.h> #include <Control.h>
#include <CppDocument.h> #include <CppDocument.h>
@@ -50,62 +52,18 @@
#include <QTextDocument> #include <QTextDocument>
#include <QDir> #include <QDir>
//TESTED_COMPONENT=src/libs/cplusplus
/*! /*!
Tests for various parts of the code generation. Well, okay, currently it only Tests for various parts of the code generation. Well, okay, currently it only
tests the InsertionPointLocator. tests the InsertionPointLocator.
*/ */
using namespace CPlusPlus; using namespace CPlusPlus;
using namespace CppTools; using namespace CppTools;
using namespace CppTools::Internal;
class tst_Codegen: public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void cleanupTestCase();
void public_in_empty_class();
void public_in_nonempty_class();
void public_before_protected();
void private_after_protected();
void protected_in_nonempty_class();
void protected_betwee_public_and_private();
void qtdesigner_integration();
void definition_empty_class();
void definition_first_member();
void definition_last_member();
void definition_middle_member();
private:
ExtensionSystem::PluginManager *pluginManager;
QString tempPath;
};
void tst_Codegen::initTestCase()
{
pluginManager = new ExtensionSystem::PluginManager;
QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
QLatin1String("Nokia"), QLatin1String("QtCreator"));
pluginManager->setSettings(settings);
pluginManager->setFileExtension(QLatin1String("pluginspec"));
pluginManager->setPluginPaths(QStringList() << QLatin1String(Q_PLUGIN_PATH));
pluginManager->loadPlugins();
tempPath = QDir::tempPath();
}
void tst_Codegen::cleanupTestCase()
{
// gives me a qFatal...
// pluginManager->shutdown();
// delete pluginManager;
}
/*! /*!
Should insert at line 3, column 1, with "public:\n" as prefix and without suffix. Should insert at line 3, column 1, with "public:\n" as prefix and without suffix.
*/ */
void tst_Codegen::public_in_empty_class() void CppToolsPlugin::test_codegen_public_in_empty_class()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -144,7 +102,7 @@ void tst_Codegen::public_in_empty_class()
/*! /*!
Should insert at line 3, column 1, without prefix and without suffix. Should insert at line 3, column 1, without prefix and without suffix.
*/ */
void tst_Codegen::public_in_nonempty_class() void CppToolsPlugin::test_codegen_public_in_nonempty_class()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -184,7 +142,7 @@ void tst_Codegen::public_in_nonempty_class()
/*! /*!
Should insert at line 3, column 1, with "public:\n" as prefix and "\n suffix. Should insert at line 3, column 1, with "public:\n" as prefix and "\n suffix.
*/ */
void tst_Codegen::public_before_protected() void CppToolsPlugin::test_codegen_public_before_protected()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -225,7 +183,7 @@ void tst_Codegen::public_before_protected()
Should insert at line 4, column 1, with "private:\n" as prefix and without Should insert at line 4, column 1, with "private:\n" as prefix and without
suffix. suffix.
*/ */
void tst_Codegen::private_after_protected() void CppToolsPlugin::test_codegen_private_after_protected()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -266,7 +224,7 @@ void tst_Codegen::private_after_protected()
Should insert at line 4, column 1, with "protected:\n" as prefix and without Should insert at line 4, column 1, with "protected:\n" as prefix and without
suffix. suffix.
*/ */
void tst_Codegen::protected_in_nonempty_class() void CppToolsPlugin::test_codegen_protected_in_nonempty_class()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -306,7 +264,7 @@ void tst_Codegen::protected_in_nonempty_class()
/*! /*!
Should insert at line 4, column 1, with "protected\n" as prefix and "\n" suffix. Should insert at line 4, column 1, with "protected\n" as prefix and "\n" suffix.
*/ */
void tst_Codegen::protected_betwee_public_and_private() void CppToolsPlugin::test_codegen_protected_between_public_and_private()
{ {
const QByteArray src = "\n" const QByteArray src = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -351,7 +309,7 @@ void tst_Codegen::protected_betwee_public_and_private()
This is the typical Qt Designer case, with test-input like what the integration This is the typical Qt Designer case, with test-input like what the integration
generates. generates.
*/ */
void tst_Codegen::qtdesigner_integration() void CppToolsPlugin::test_codegen_qtdesigner_integration()
{ {
const QByteArray src = "/**** Some long (C)opyright notice ****/\n" const QByteArray src = "/**** Some long (C)opyright notice ****/\n"
"#ifndef MAINWINDOW_H\n" "#ifndef MAINWINDOW_H\n"
@@ -405,7 +363,7 @@ void tst_Codegen::qtdesigner_integration()
QCOMPARE(loc.column(), 1U); QCOMPARE(loc.column(), 1U);
} }
void tst_Codegen::definition_empty_class() void CppToolsPlugin::test_codegen_definition_empty_class()
{ {
const QByteArray srcText = "\n" const QByteArray srcText = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -418,7 +376,7 @@ void tst_Codegen::definition_empty_class()
"int x;\n" // line 1 "int x;\n" // line 1
"\n"; "\n";
Document::Ptr src = Document::create(tempPath + QLatin1String("/file.h")); Document::Ptr src = Document::create(QDir::tempPath() + QLatin1String("/file.h"));
Utils::FileSaver srcSaver(src->fileName()); Utils::FileSaver srcSaver(src->fileName());
srcSaver.write(srcText); srcSaver.write(srcText);
srcSaver.finalize(); srcSaver.finalize();
@@ -428,7 +386,7 @@ void tst_Codegen::definition_empty_class()
QCOMPARE(src->diagnosticMessages().size(), 0); QCOMPARE(src->diagnosticMessages().size(), 0);
QCOMPARE(src->globalSymbolCount(), 1U); QCOMPARE(src->globalSymbolCount(), 1U);
Document::Ptr dst = Document::create(tempPath + QLatin1String("/file.cpp")); Document::Ptr dst = Document::create(QDir::tempPath() + QLatin1String("/file.cpp"));
Utils::FileSaver dstSaver(dst->fileName()); Utils::FileSaver dstSaver(dst->fileName());
dstSaver.write(dstText); dstSaver.write(dstText);
dstSaver.finalize(); dstSaver.finalize();
@@ -464,7 +422,7 @@ void tst_Codegen::definition_empty_class()
QCOMPARE(loc.column(), 7U); QCOMPARE(loc.column(), 7U);
} }
void tst_Codegen::definition_first_member() void CppToolsPlugin::test_codegen_definition_first_member()
{ {
const QByteArray srcText = "\n" const QByteArray srcText = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -484,9 +442,9 @@ void tst_Codegen::definition_first_member()
"\n" "\n"
"}\n" "}\n"
"\n" "\n"
"int y;\n").arg(tempPath).toLatin1(); "int y;\n").arg(QDir::tempPath()).toLatin1();
Document::Ptr src = Document::create(tempPath + QLatin1String("/file.h")); Document::Ptr src = Document::create(QDir::tempPath() + QLatin1String("/file.h"));
Utils::FileSaver srcSaver(src->fileName()); Utils::FileSaver srcSaver(src->fileName());
srcSaver.write(srcText); srcSaver.write(srcText);
srcSaver.finalize(); srcSaver.finalize();
@@ -496,7 +454,7 @@ void tst_Codegen::definition_first_member()
QCOMPARE(src->diagnosticMessages().size(), 0); QCOMPARE(src->diagnosticMessages().size(), 0);
QCOMPARE(src->globalSymbolCount(), 1U); QCOMPARE(src->globalSymbolCount(), 1U);
Document::Ptr dst = Document::create(tempPath + QLatin1String("/file.cpp")); Document::Ptr dst = Document::create(QDir::tempPath() + QLatin1String("/file.cpp"));
dst->addIncludeFile(src->fileName(), 1); dst->addIncludeFile(src->fileName(), 1);
Utils::FileSaver dstSaver(dst->fileName()); Utils::FileSaver dstSaver(dst->fileName());
dstSaver.write(dstText); dstSaver.write(dstText);
@@ -533,7 +491,7 @@ void tst_Codegen::definition_first_member()
QCOMPARE(loc.prefix(), QString()); QCOMPARE(loc.prefix(), QString());
} }
void tst_Codegen::definition_last_member() void CppToolsPlugin::test_codegen_definition_last_member()
{ {
const QByteArray srcText = "\n" const QByteArray srcText = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -553,9 +511,9 @@ void tst_Codegen::definition_last_member()
"\n" "\n"
"}\n" // line 7 "}\n" // line 7
"\n" "\n"
"int y;\n").arg(tempPath).toLatin1(); "int y;\n").arg(QDir::tempPath()).toLatin1();
Document::Ptr src = Document::create(tempPath + QLatin1String("/file.h")); Document::Ptr src = Document::create(QDir::tempPath() + QLatin1String("/file.h"));
Utils::FileSaver srcSaver(src->fileName()); Utils::FileSaver srcSaver(src->fileName());
srcSaver.write(srcText); srcSaver.write(srcText);
srcSaver.finalize(); srcSaver.finalize();
@@ -565,7 +523,7 @@ void tst_Codegen::definition_last_member()
QCOMPARE(src->diagnosticMessages().size(), 0); QCOMPARE(src->diagnosticMessages().size(), 0);
QCOMPARE(src->globalSymbolCount(), 1U); QCOMPARE(src->globalSymbolCount(), 1U);
Document::Ptr dst = Document::create(tempPath + QLatin1String("/file.cpp")); Document::Ptr dst = Document::create(QDir::tempPath() + QLatin1String("/file.cpp"));
dst->addIncludeFile(src->fileName(), 1); dst->addIncludeFile(src->fileName(), 1);
Utils::FileSaver dstSaver(dst->fileName()); Utils::FileSaver dstSaver(dst->fileName());
dstSaver.write(dstText); dstSaver.write(dstText);
@@ -602,7 +560,7 @@ void tst_Codegen::definition_last_member()
QCOMPARE(loc.suffix(), QString()); QCOMPARE(loc.suffix(), QString());
} }
void tst_Codegen::definition_middle_member() void CppToolsPlugin::test_codegen_definition_middle_member()
{ {
const QByteArray srcText = "\n" const QByteArray srcText = "\n"
"class Foo\n" // line 1 "class Foo\n" // line 1
@@ -628,9 +586,9 @@ void tst_Codegen::definition_middle_member()
"\n" "\n"
"}\n" "}\n"
"\n" "\n"
"int y;\n").arg(tempPath).toLatin1(); "int y;\n").arg(QDir::tempPath()).toLatin1();
Document::Ptr src = Document::create(tempPath + QLatin1String("/file.h")); Document::Ptr src = Document::create(QDir::tempPath() + QLatin1String("/file.h"));
Utils::FileSaver srcSaver(src->fileName()); Utils::FileSaver srcSaver(src->fileName());
srcSaver.write(srcText); srcSaver.write(srcText);
srcSaver.finalize(); srcSaver.finalize();
@@ -640,7 +598,7 @@ void tst_Codegen::definition_middle_member()
QCOMPARE(src->diagnosticMessages().size(), 0); QCOMPARE(src->diagnosticMessages().size(), 0);
QCOMPARE(src->globalSymbolCount(), 1U); QCOMPARE(src->globalSymbolCount(), 1U);
Document::Ptr dst = Document::create(tempPath + QLatin1String("/file.cpp")); Document::Ptr dst = Document::create(QDir::tempPath() + QLatin1String("/file.cpp"));
dst->addIncludeFile(src->fileName(), 1); dst->addIncludeFile(src->fileName(), 1);
Utils::FileSaver dstSaver(dst->fileName()); Utils::FileSaver dstSaver(dst->fileName());
dstSaver.write(dstText); dstSaver.write(dstText);
@@ -676,6 +634,3 @@ void tst_Codegen::definition_middle_member()
QCOMPARE(loc.prefix(), QLatin1String("\n\n")); QCOMPARE(loc.prefix(), QLatin1String("\n\n"));
QCOMPARE(loc.suffix(), QString()); QCOMPARE(loc.suffix(), QString());
} }
QTEST_MAIN(tst_Codegen)
#include "tst_codegen.moc"

View File

@@ -67,3 +67,8 @@ SOURCES += completionsettingspage.cpp \
FORMS += completionsettingspage.ui \ FORMS += completionsettingspage.ui \
cppfilesettingspage.ui \ cppfilesettingspage.ui \
cppcodestylesettingspage.ui cppcodestylesettingspage.ui
equals(TEST, 1) {
SOURCES += \
cppcodegen_test.cpp
}

View File

@@ -76,6 +76,21 @@ public:
private slots: private slots:
void switchHeaderSource(); void switchHeaderSource();
#ifdef WITH_TESTS
// codegen tests
void test_codegen_public_in_empty_class();
void test_codegen_public_in_nonempty_class();
void test_codegen_public_before_protected();
void test_codegen_private_after_protected();
void test_codegen_protected_in_nonempty_class();
void test_codegen_protected_between_public_and_private();
void test_codegen_qtdesigner_integration();
void test_codegen_definition_empty_class();
void test_codegen_definition_first_member();
void test_codegen_definition_last_member();
void test_codegen_definition_middle_member();
#endif
private: private:
QString correspondingHeaderOrSourceI(const QString &fileName) const; QString correspondingHeaderOrSourceI(const QString &fileName) const;

View File

@@ -1,5 +0,0 @@
include(../../qttest.pri)
include(../shared/shared.pri)
INCLUDEPATH += $$IDE_SOURCE_TREE/src/plugins
SOURCES += tst_codegen.cpp

View File

@@ -4,7 +4,6 @@ CONFIG += ordered
SUBDIRS = \ SUBDIRS = \
ast \ ast \
codeformatter \ codeformatter \
codegen \
findusages \ findusages \
lookup \ lookup \
preprocessor \ preprocessor \