summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager_test.cpp
diff options
context:
space:
mode:
authorMiklos Marton <martonmiklosqdev@gmail.com>2020-05-08 18:06:26 +0200
committerMiklós Márton <martonmiklosqdev@gmail.com>2020-08-21 06:50:42 +0000
commit3299239095e4eff5b94604841491712a2fbf78ca (patch)
treed9eccbea6ed0cff76f8f0928d70d9625ab0379be /src/plugins/cpptools/cppmodelmanager_test.cpp
parent795ccfbffca2f338a3c9918b8d339848f16b2f3c (diff)
downloadqt-creator-3299239095e4eff5b94604841491712a2fbf78ca.tar.gz
C++ Refactoring: Fix the include macros in header files after renaming
Fixes: QTCREATORBUG-4686 Change-Id: If22078bb183910941d8e2a94b0e8629baa2fa8de Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager_test.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp72
1 files changed, 64 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index 73da04531f..ea40d84ea0 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -1039,7 +1039,7 @@ void CppToolsPlugin::test_modelmanager_renameIncludes()
QCOMPARE(snapshot.allIncludesForDocument(sourceFile), QSet<QString>() << oldHeader);
// Renaming the header
- QVERIFY(Core::FileUtils::renameFile(oldHeader, newHeader));
+ QVERIFY(Core::FileUtils::renameFile(oldHeader, newHeader, Core::HandleIncludeGuards::Yes));
// Update the c++ model manager again and check for the new includes
modelManager->updateSourceFiles(sourceFiles).waitForFinished();
@@ -1060,9 +1060,15 @@ void CppToolsPlugin::test_modelmanager_renameIncludesInEditor()
QVERIFY(tmpDir.isValid());
const QDir workingDir(tmpDir.path());
- const QStringList fileNames = {"foo.h", "foo.cpp", "main.cpp"};
- const QString oldHeader(workingDir.filePath(_("foo.h")));
- const QString newHeader(workingDir.filePath(_("bar.h")));
+ const QStringList fileNames = {"baz.h", "baz2.h", "baz3.h", "foo.h", "foo.cpp", "main.cpp"};
+ const QString headerWithPragmaOnce(workingDir.filePath(_("foo.h")));
+ const QString renamedHeaderWithPragmaOnce(workingDir.filePath(_("bar.h")));
+ const QString headerWithNormalGuard(workingDir.filePath(_("baz.h")));
+ const QString renamedHeaderWithNormalGuard(workingDir.filePath(_("foobar2000.h")));
+ const QString headerWithUnderscoredGuard(workingDir.filePath(_("baz2.h")));
+ const QString renamedHeaderWithUnderscoredGuard(workingDir.filePath(_("foobar4000.h")));
+ const QString headerWithMalformedGuard(workingDir.filePath(_("baz3.h")));
+ const QString renamedHeaderWithMalformedGuard(workingDir.filePath(_("foobar5000.h")));
const QString mainFile(workingDir.filePath(_("main.cpp")));
CppModelManager *modelManager = CppModelManager::instance();
const MyTestDataDir testDir(_("testdata_project1"));
@@ -1086,7 +1092,7 @@ void CppToolsPlugin::test_modelmanager_renameIncludesInEditor()
QCoreApplication::processEvents();
CPlusPlus::Snapshot snapshot = modelManager->snapshot();
foreach (const QString &sourceFile, sourceFiles)
- QCOMPARE(snapshot.allIncludesForDocument(sourceFile), QSet<QString>() << oldHeader);
+ QCOMPARE(snapshot.allIncludesForDocument(sourceFile), QSet<QString>() << headerWithPragmaOnce);
// Open a file in the editor
QCOMPARE(Core::DocumentModel::openedDocuments().size(), 0);
@@ -1100,8 +1106,58 @@ void CppToolsPlugin::test_modelmanager_renameIncludesInEditor()
QVERIFY(modelManager->isCppEditor(editor));
QVERIFY(modelManager->workingCopy().contains(mainFile));
- // Renaming the header
- QVERIFY(Core::FileUtils::renameFile(oldHeader, newHeader));
+ // Test the renaming of a header file where a pragma once guard is present
+ QVERIFY(Core::FileUtils::renameFile(headerWithPragmaOnce, renamedHeaderWithPragmaOnce,
+ Core::HandleIncludeGuards::Yes));
+
+ // Test the renaming the header with include guard:
+ // The contents should match the foobar2000.h in the testdata_project2 project
+ QVERIFY(Core::FileUtils::renameFile(headerWithNormalGuard, renamedHeaderWithNormalGuard,
+ Core::HandleIncludeGuards::Yes));
+
+ const MyTestDataDir testDir2(_("testdata_project2"));
+ QFile foobar2000Header(testDir2.file("foobar2000.h"));
+ QVERIFY(foobar2000Header.open(QFile::ReadOnly));
+ const auto foobar2000HeaderContents = foobar2000Header.readAll();
+ foobar2000Header.close();
+
+ QFile renamedHeader(renamedHeaderWithNormalGuard);
+ QVERIFY(renamedHeader.open(QFile::ReadOnly));
+ auto renamedHeaderContents = renamedHeader.readAll();
+ renamedHeader.close();
+ QCOMPARE(renamedHeaderContents, foobar2000HeaderContents);
+
+ // Test the renaming the header with underscore pre/suffixed include guard:
+ // The contents should match the foobar2000.h in the testdata_project2 project
+ QVERIFY(Core::FileUtils::renameFile(headerWithUnderscoredGuard, renamedHeaderWithUnderscoredGuard,
+ Core::HandleIncludeGuards::Yes));
+
+ QFile foobar4000Header(testDir2.file("foobar4000.h"));
+ QVERIFY(foobar4000Header.open(QFile::ReadOnly));
+ const auto foobar4000HeaderContents = foobar4000Header.readAll();
+ foobar4000Header.close();
+
+ renamedHeader.setFileName(renamedHeaderWithUnderscoredGuard);
+ QVERIFY(renamedHeader.open(QFile::ReadOnly));
+ renamedHeaderContents = renamedHeader.readAll();
+ renamedHeader.close();
+ QCOMPARE(renamedHeaderContents, foobar4000HeaderContents);
+
+ // test the renaming of a header with a malformed guard to verify we do not make
+ // accidental refactors
+ renamedHeader.setFileName(headerWithMalformedGuard);
+ QVERIFY(renamedHeader.open(QFile::ReadOnly));
+ auto originalMalformedGuardContents = renamedHeader.readAll();
+ renamedHeader.close();
+
+ QVERIFY(Core::FileUtils::renameFile(headerWithMalformedGuard, renamedHeaderWithMalformedGuard,
+ Core::HandleIncludeGuards::Yes));
+
+ renamedHeader.setFileName(renamedHeaderWithMalformedGuard);
+ QVERIFY(renamedHeader.open(QFile::ReadOnly));
+ renamedHeaderContents = renamedHeader.readAll();
+ renamedHeader.close();
+ QCOMPARE(renamedHeaderContents, originalMalformedGuardContents);
// Update the c++ model manager again and check for the new includes
TestCase::waitForProcessedEditorDocument(mainFile);
@@ -1109,7 +1165,7 @@ void CppToolsPlugin::test_modelmanager_renameIncludesInEditor()
QCoreApplication::processEvents();
snapshot = modelManager->snapshot();
foreach (const QString &sourceFile, sourceFiles)
- QCOMPARE(snapshot.allIncludesForDocument(sourceFile), QSet<QString>() << newHeader);
+ QCOMPARE(snapshot.allIncludesForDocument(sourceFile), QSet<QString>() << renamedHeaderWithPragmaOnce);
}
void CppToolsPlugin::test_modelmanager_documentsAndRevisions()