diff options
author | Miklos Marton <martonmiklosqdev@gmail.com> | 2020-05-08 18:06:26 +0200 |
---|---|---|
committer | Miklós Márton <martonmiklosqdev@gmail.com> | 2020-08-21 06:50:42 +0000 |
commit | 3299239095e4eff5b94604841491712a2fbf78ca (patch) | |
tree | d9eccbea6ed0cff76f8f0928d70d9625ab0379be /src/plugins/cpptools/cppmodelmanager_test.cpp | |
parent | 795ccfbffca2f338a3c9918b8d339848f16b2f3c (diff) | |
download | qt-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.cpp | 72 |
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() |