summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@theqtcompany.com>2015-10-12 17:36:18 +0200
committerMarco Bubke <marco.bubke@theqtcompany.com>2015-10-12 15:49:07 +0000
commitb8a9e85880c4efc8207c20bf26b3df8dc4e02d88 (patch)
tree1581ee2f065d86ca962bab855d5693a53c5f715d /tests
parentd8ba9fa972bf337406937f9046f0cf9981183cca (diff)
downloadqt-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.cpp59
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();
+}
+
+}
+