diff options
author | Marco Bubke <marco.bubke@theqtcompany.com> | 2015-10-12 17:36:18 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@theqtcompany.com> | 2015-10-12 15:49:07 +0000 |
commit | b8a9e85880c4efc8207c20bf26b3df8dc4e02d88 (patch) | |
tree | 1581ee2f065d86ca962bab855d5693a53c5f715d /tests | |
parent | d8ba9fa972bf337406937f9046f0cf9981183cca (diff) | |
download | qt-creator-b8a9e85880c4efc8207c20bf26b3df8dc4e02d88.tar.gz |
Clang: Don't set a translation unit dirty if the main file is deleted
If a file is deleted the translation unit should be not updated. It will be
later removed anyway.
Task-number: QTCREATORBUG-15070
Change-Id: I40c9c70629dab1d35b713d54442ffdbb2df3db43
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/unittest/translationunittest.cpp | 59 |
1 files changed, 44 insertions, 15 deletions
diff --git a/tests/unit/unittest/translationunittest.cpp b/tests/unit/unittest/translationunittest.cpp index 4bf26bff39..f03ff88999 100644 --- a/tests/unit/unittest/translationunittest.cpp +++ b/tests/unit/unittest/translationunittest.cpp @@ -48,6 +48,8 @@ #include <gtest/gtest.h> #include "gtest-qt-printing.h" +#include <QTemporaryFile> + #include <chrono> #include <thread> @@ -69,11 +71,17 @@ namespace { class TranslationUnit : public ::testing::Test { protected: + ::TranslationUnit createTemporaryTranslationUnit(); + QByteArray readContentFromTranslationUnitFile() const; + +protected: ClangBackEnd::ProjectParts projects; + ProjectPart projectPart{Utf8StringLiteral("/path/to/projectfile")}; + Utf8String translationUnitFilePath = Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"); ClangBackEnd::UnsavedFiles unsavedFiles; ClangBackEnd::TranslationUnits translationUnits{projects, unsavedFiles}; - ::TranslationUnit translationUnit{Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"), - ProjectPart(Utf8StringLiteral("/path/to/projectfile")), + ::TranslationUnit translationUnit{translationUnitFilePath, + projectPart, translationUnits}; }; @@ -86,13 +94,13 @@ TEST_F(TranslationUnit, DefaultTranslationUnitIsInvalid) TEST_F(TranslationUnit, ThrowExceptionForNonExistingFilePath) { - ASSERT_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), ProjectPart(Utf8StringLiteral("/path/to/projectfile")), translationUnits), + ASSERT_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), projectPart, translationUnits), ClangBackEnd::TranslationUnitFileNotExitsException); } TEST_F(TranslationUnit, ThrowNoExceptionForNonExistingFilePathIfDoNotCheckIfFileExistsIsSet) { - ASSERT_NO_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), ProjectPart(Utf8StringLiteral("/path/to/projectfile")), translationUnits, ::TranslationUnit::DoNotCheckIfFileExists)); + ASSERT_NO_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), projectPart, translationUnits, ::TranslationUnit::DoNotCheckIfFileExists)); } TEST_F(TranslationUnit, TranslationUnitIsValid) @@ -172,7 +180,7 @@ TEST_F(TranslationUnit, DocumentRevisionInFileContainerGetter) TEST_F(TranslationUnit, DependedFilePaths) { ASSERT_THAT(translationUnit.dependedFilePaths(), - AllOf(Contains(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")), + AllOf(Contains(translationUnitFilePath), Contains(Utf8StringLiteral(TESTDATA_DIR"/translationunits.h")))); } @@ -198,7 +206,7 @@ TEST_F(TranslationUnit, NeedsReparsingForMainFile) { translationUnit.cxTranslationUnit(); - translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")); + translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath); ASSERT_TRUE(translationUnit.isNeedingReparse()); } @@ -235,7 +243,7 @@ TEST_F(TranslationUnit, HasNewDiagnosticsForMainFile) { translationUnit.cxTranslationUnit(); - translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")); + translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath); ASSERT_TRUE(translationUnit.hasNewDiagnostics()); } @@ -243,20 +251,41 @@ TEST_F(TranslationUnit, HasNewDiagnosticsForMainFile) TEST_F(TranslationUnit, HasNoNewDiagnosticsAfterGettingDiagnostics) { translationUnit.cxTranslationUnit(); - translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")); + translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath); translationUnit.diagnostics(); ASSERT_FALSE(translationUnit.hasNewDiagnostics()); } -//TEST_F(TranslationUnit, ThrowParseErrorForWrongArguments) -//{ -// ProjectPart project(Utf8StringLiteral("/path/to/projectfile")); -// project.setArguments({Utf8StringLiteral("-fblah")}); -// TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), unsavedFiles, project); +TEST_F(TranslationUnit, DeletedFileShouldBeNotSetDirty) +{ + auto translationUnit = createTemporaryTranslationUnit(); + + translationUnit.setDirtyIfDependencyIsMet(translationUnit.filePath()); -// ASSERT_THROW(translationUnit.cxTranslationUnit(), ClangBackEnd::TranslationUnitParseErrorException); -//} + ASSERT_FALSE(translationUnit.isNeedingReparse()); +} +::TranslationUnit TranslationUnit::createTemporaryTranslationUnit() +{ + QTemporaryFile temporaryFile; + EXPECT_TRUE(temporaryFile.open()); + EXPECT_TRUE(temporaryFile.write(readContentFromTranslationUnitFile())); + ::TranslationUnit translationUnit(temporaryFile.fileName(), + projectPart, + translationUnits); + +return translationUnit; } + +QByteArray TranslationUnit::readContentFromTranslationUnitFile() const +{ + QFile contentFile(translationUnitFilePath); + EXPECT_TRUE(contentFile.open(QIODevice::ReadOnly)); + + return contentFile.readAll(); +} + +} + |