| 
									
										
										
										
											2015-10-01 12:45:06 +02:00
										 |  |  | /****************************************************************************
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | ** | 
					
						
							|  |  |  | ** Copyright (C) 2015 The Qt Company Ltd. | 
					
						
							|  |  |  | ** Contact: http://www.qt.io/licensing
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Commercial License Usage | 
					
						
							|  |  |  | ** Licensees holding valid commercial Qt licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the commercial license agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Digia.  For licensing terms and | 
					
						
							|  |  |  | ** conditions see http://www.qt.io/licensing.  For further information
 | 
					
						
							|  |  |  | ** use the contact form at http://www.qt.io/contact-us.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU Lesser General Public License Usage | 
					
						
							|  |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 or version 3 as published by the Free | 
					
						
							|  |  |  | ** Software Foundation and appearing in the file LICENSE.LGPLv21 and | 
					
						
							|  |  |  | ** LICENSE.LGPLv3 included in the packaging of this file.  Please review the | 
					
						
							|  |  |  | ** following information to ensure the GNU Lesser General Public License | 
					
						
							|  |  |  | ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
 | 
					
						
							|  |  |  | ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** In addition, as a special exception, Digia gives you certain additional | 
					
						
							|  |  |  | ** rights.  These rights are described in the Digia Qt LGPL Exception | 
					
						
							|  |  |  | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ****************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-16 12:38:04 +02:00
										 |  |  | #include "mockipclient.h"
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-16 12:38:04 +02:00
										 |  |  | #include <clangipcserver.h>
 | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | #include <highlightingchangedmessage.h>
 | 
					
						
							|  |  |  | #include <highlightingmarkcontainer.h>
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | #include <ipcclientproxy.h>
 | 
					
						
							|  |  |  | #include <ipcserverproxy.h>
 | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | #include <requesthighlightingmessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | #include <translationunitdoesnotexistexception.h>
 | 
					
						
							|  |  |  | #include <translationunitparseerrorexception.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  | #include <cmbcodecompletedmessage.h>
 | 
					
						
							|  |  |  | #include <cmbcompletecodemessage.h>
 | 
					
						
							|  |  |  | #include <cmbechomessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  | #include <cmbregisterprojectsforeditormessage.h>
 | 
					
						
							|  |  |  | #include <cmbregistertranslationunitsforeditormessage.h>
 | 
					
						
							|  |  |  | #include <cmbunregisterprojectsforeditormessage.h>
 | 
					
						
							|  |  |  | #include <cmbunregistertranslationunitsforeditormessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | #include <highlightingchangedmessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-08-31 16:28:26 +02:00
										 |  |  | #include <diagnosticschangedmessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  | #include <projectpartsdonotexistmessage.h>
 | 
					
						
							|  |  |  | #include <translationunitdoesnotexistmessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | #include <updatetranslationunitsforeditormessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-11-25 15:29:28 +01:00
										 |  |  | #include <updatevisibletranslationunitsmessage.h>
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <QBuffer>
 | 
					
						
							|  |  |  | #include <QFile>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-16 12:38:04 +02:00
										 |  |  | #include <gmock/gmock.h>
 | 
					
						
							|  |  |  | #include <gmock/gmock-matchers.h>
 | 
					
						
							|  |  |  | #include <gtest/gtest.h>
 | 
					
						
							| 
									
										
										
										
											2015-07-01 14:50:35 +02:00
										 |  |  | #include "gtest-qt-printing.h"
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | using testing::Property; | 
					
						
							|  |  |  | using testing::Contains; | 
					
						
							|  |  |  | using testing::Not; | 
					
						
							|  |  |  | using testing::Eq; | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | using testing::PrintToString; | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | using testing::_; | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  | using ClangBackEnd::RegisterTranslationUnitForEditorMessage; | 
					
						
							|  |  |  | using ClangBackEnd::UnregisterTranslationUnitsForEditorMessage; | 
					
						
							|  |  |  | using ClangBackEnd::RegisterProjectPartsForEditorMessage; | 
					
						
							|  |  |  | using ClangBackEnd::UnregisterProjectPartsForEditorMessage; | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  | using ClangBackEnd::CompleteCodeMessage; | 
					
						
							|  |  |  | using ClangBackEnd::CodeCompletedMessage; | 
					
						
							| 
									
										
										
										
											2015-06-16 11:56:00 +02:00
										 |  |  | using ClangBackEnd::CodeCompletion; | 
					
						
							|  |  |  | using ClangBackEnd::FileContainer; | 
					
						
							|  |  |  | using ClangBackEnd::ProjectPartContainer; | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  | using ClangBackEnd::TranslationUnitDoesNotExistMessage; | 
					
						
							|  |  |  | using ClangBackEnd::ProjectPartsDoNotExistMessage; | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | using ClangBackEnd::UpdateTranslationUnitsForEditorMessage; | 
					
						
							| 
									
										
										
										
											2015-11-25 15:29:28 +01:00
										 |  |  | using ClangBackEnd::UpdateVisibleTranslationUnitsMessage; | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | using ClangBackEnd::RequestHighlightingMessage; | 
					
						
							|  |  |  | using ClangBackEnd::HighlightingChangedMessage; | 
					
						
							|  |  |  | using ClangBackEnd::HighlightingMarkContainer; | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  | MATCHER_P5(HasDirtyTranslationUnit, | 
					
						
							|  |  |  |            filePath, | 
					
						
							|  |  |  |            projectPartId, | 
					
						
							|  |  |  |            documentRevision, | 
					
						
							|  |  |  |            isNeedingReparse, | 
					
						
							|  |  |  |            hasNewDiagnostics, | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  |            std::string(negation ? "isn't" : "is") | 
					
						
							|  |  |  |            + " translation unit with file path "+ PrintToString(filePath) | 
					
						
							|  |  |  |            + " and project " + PrintToString(projectPartId) | 
					
						
							|  |  |  |            + " and document revision " + PrintToString(documentRevision) | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  |            + " and isNeedingReparse = " + PrintToString(isNeedingReparse) | 
					
						
							|  |  |  |            + " and hasNewDiagnostics = " + PrintToString(hasNewDiagnostics) | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  |            ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto &&translationUnits = arg.translationUnitsForTestOnly(); | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |         auto translationUnit = translationUnits.translationUnit(filePath, projectPartId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (translationUnit.documentRevision() == documentRevision) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  |             if (translationUnit.hasNewDiagnostics() && !hasNewDiagnostics) { | 
					
						
							|  |  |  |                 *result_listener << "hasNewDiagnostics is true"; | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } else if (!translationUnit.hasNewDiagnostics() && hasNewDiagnostics) { | 
					
						
							|  |  |  |                 *result_listener << "hasNewDiagnostics is false"; | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (translationUnit.isNeedingReparse() && !isNeedingReparse) { | 
					
						
							|  |  |  |                 *result_listener << "isNeedingReparse is true"; | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } else if (!translationUnit.isNeedingReparse() && isNeedingReparse) { | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  |                 *result_listener << "isNeedingReparse is false"; | 
					
						
							|  |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  |             return true; | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         *result_listener << "revision number is " << PrintToString(translationUnit.documentRevision()); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } catch (...) { | 
					
						
							|  |  |  |         *result_listener << "has no translation unit"; | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ClangIpcServer : public ::testing::Test | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  |     void SetUp() override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void registerFiles(); | 
					
						
							|  |  |  |     void registerProjectPart(); | 
					
						
							|  |  |  |     void changeProjectPartArguments(); | 
					
						
							|  |  |  |     void changeProjectPartArgumentsToWrongValues(); | 
					
						
							| 
									
										
										
										
											2015-11-25 15:29:28 +01:00
										 |  |  |     void updateVisibilty(const Utf8String ¤tEditor, const Utf8String &additionalVisibleEditor); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |     static const Utf8String unsavedContent(const QString &unsavedFilePath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  |     MockIpcClient mockIpcClient; | 
					
						
							| 
									
										
										
										
											2015-06-16 11:56:00 +02:00
										 |  |  |     ClangBackEnd::ClangIpcServer clangServer; | 
					
						
							| 
									
										
										
										
											2015-11-25 15:29:28 +01:00
										 |  |  |     const ClangBackEnd::TranslationUnits &translationUnits = clangServer.translationUnitsForTestOnly(); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |     const Utf8String projectPartId = Utf8StringLiteral("pathToProjectPart.pro"); | 
					
						
							|  |  |  |     const Utf8String functionTestFilePath = Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_function.cpp"); | 
					
						
							|  |  |  |     const Utf8String variableTestFilePath = Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_variable.cpp"); | 
					
						
							|  |  |  |     const QString unsavedTestFilePath = QStringLiteral(TESTDATA_DIR) + QStringLiteral("/complete_extractor_function_unsaved.cpp"); | 
					
						
							|  |  |  |     const QString updatedUnsavedTestFilePath = QStringLiteral(TESTDATA_DIR) + QStringLiteral("/complete_extractor_function_unsaved_2.cpp"); | 
					
						
							|  |  |  |     const Utf8String parseErrorTestFilePath = Utf8StringLiteral(TESTDATA_DIR"/complete_translationunit_parse_error.cpp"); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetCodeCompletion) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("Function"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::FunctionCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::codeCompletions, Contains(codeCompletion)))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 17:07:44 +01:00
										 |  |  | TEST_F(ClangIpcServer, RequestHighlighting) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     RequestHighlightingMessage requestHighlightingMessage({variableTestFilePath, projectPartId}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     HighlightingMarkContainer highlightingMarkContainer(1, 6, 8, ClangBackEnd::HighlightingType::Function); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     EXPECT_CALL(mockIpcClient, highlightingChanged(Property(&HighlightingChangedMessage::highlightingMarks, Contains(highlightingMarkContainer)))) | 
					
						
							|  |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.requestHighlighting(requestHighlightingMessage); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | TEST_F(ClangIpcServer, GetCodeCompletionDependingOnArgumets) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(variableTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             35, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("ArgumentDefinitionVariable"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::VariableCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::codeCompletions, Contains(codeCompletion)))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     changeProjectPartArguments(); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  | TEST_F(ClangIpcServer, GetTranslationUnitDoesNotExistForEditorOnNonExistingTranslationUnit) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(Utf8StringLiteral("dontexists.cpp"), | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             34, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     TranslationUnitDoesNotExistMessage translationUnitDoesNotExistMessage(Utf8StringLiteral("dontexists.cpp"), projectPartId); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, translationUnitDoesNotExist(translationUnitDoesNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetTranslationUnitDoesNotExistForCompletingUnregisteredFile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(parseErrorTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     TranslationUnitDoesNotExistMessage translationUnitDoesNotExistMessage(parseErrorTestFilePath, projectPartId); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, translationUnitDoesNotExist(translationUnitDoesNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetCodeCompletionForUnsavedFile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("Method2"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::FunctionCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::codeCompletions, Contains(codeCompletion)))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetNoCodeCompletionAfterRemovingUnsavedFile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-11-05 13:57:57 +01:00
										 |  |  |     clangServer.updateTranslationUnitsForEditor(UpdateTranslationUnitsForEditorMessage( | 
					
						
							|  |  |  |         {FileContainer(functionTestFilePath, projectPartId, Utf8StringVector(), 74)})); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("Method2"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::FunctionCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::codeCompletions, Not(Contains(codeCompletion))))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetNewCodeCompletionAfterUpdatingUnsavedFile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  |     clangServer.updateTranslationUnitsForEditor(UpdateTranslationUnitsForEditorMessage({{functionTestFilePath, | 
					
						
							|  |  |  |                                                                                          projectPartId, | 
					
						
							|  |  |  |                                                                                          unsavedContent(updatedUnsavedTestFilePath), | 
					
						
							|  |  |  |                                                                                          true, | 
					
						
							|  |  |  |                                                                                          74}})); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("Method3"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::FunctionCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::codeCompletions, Contains(codeCompletion)))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetTranslationUnitDoesNotExistForUnregisterTranslationUnitWithWrongFilePath) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     FileContainer fileContainer(Utf8StringLiteral("foo.cpp"), projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     UnregisterTranslationUnitsForEditorMessage message({fileContainer}); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     TranslationUnitDoesNotExistMessage translationUnitDoesNotExistMessage(fileContainer); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, translationUnitDoesNotExist(translationUnitDoesNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     clangServer.unregisterTranslationUnitsForEditor(message); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, UnregisterTranslationUnitAndTestFailingCompletion) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     FileContainer fileContainer(functionTestFilePath, projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     UnregisterTranslationUnitsForEditorMessage message({fileContainer}); | 
					
						
							|  |  |  |     clangServer.unregisterTranslationUnitsForEditor(message); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     TranslationUnitDoesNotExistMessage translationUnitDoesNotExistMessage(fileContainer); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, translationUnitDoesNotExist(translationUnitDoesNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetProjectPartDoesNotExistUnregisterProjectPartInexistingProjectPart) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Utf8StringVector inexistingProjectPartFilePath = {Utf8StringLiteral("projectpartsdoesnotexist.pro"), Utf8StringLiteral("project2doesnotexists.pro")}; | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     UnregisterProjectPartsForEditorMessage unregisterProjectPartsForEditorMessage(inexistingProjectPartFilePath); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     ProjectPartsDoNotExistMessage projectPartsDoNotExistMessage(inexistingProjectPartFilePath); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, projectPartsDoNotExist(projectPartsDoNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     clangServer.unregisterProjectPartsForEditor(unregisterProjectPartsForEditorMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetProjectPartDoesNotExistRegisterTranslationUnitWithInexistingProjectPart) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Utf8String inexistingProjectPartFilePath = Utf8StringLiteral("projectpartsdoesnotexist.pro"); | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     RegisterTranslationUnitForEditorMessage registerFileForEditorMessage({FileContainer(variableTestFilePath, inexistingProjectPartFilePath)}); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     ProjectPartsDoNotExistMessage projectPartsDoNotExistMessage({inexistingProjectPartFilePath}); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, projectPartsDoNotExist(projectPartsDoNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     clangServer.registerTranslationUnitsForEditor(registerFileForEditorMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetProjectPartDoesNotExistUnregisterTranslationUnitWithInexistingProjectPart) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Utf8String inexistingProjectPartFilePath = Utf8StringLiteral("projectpartsdoesnotexist.pro"); | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     UnregisterTranslationUnitsForEditorMessage unregisterFileForEditorMessage({FileContainer(variableTestFilePath, inexistingProjectPartFilePath)}); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     ProjectPartsDoNotExistMessage projectPartsDoNotExistMessage({inexistingProjectPartFilePath}); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, projectPartsDoNotExist(projectPartsDoNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 14:36:58 +02:00
										 |  |  |     clangServer.unregisterTranslationUnitsForEditor(unregisterFileForEditorMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetProjectPartDoesNotExistForCompletingProjectPartFile) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Utf8String inexistingProjectPartFilePath = Utf8StringLiteral("projectpartsdoesnotexist.pro"); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(variableTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             inexistingProjectPartFilePath); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     ProjectPartsDoNotExistMessage projectPartsDoNotExistMessage({inexistingProjectPartFilePath}); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, projectPartsDoNotExist(projectPartsDoNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, GetProjectPartDoesNotExistForCompletingUnregisteredFile) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(parseErrorTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     TranslationUnitDoesNotExistMessage translationUnitDoesNotExistMessage(parseErrorTestFilePath, projectPartId); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, translationUnitDoesNotExist(translationUnitDoesNotExistMessage)) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, TicketNumberIsForwarded) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     CompleteCodeMessage completeCodeMessage(functionTestFilePath, | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |                                             20, | 
					
						
							|  |  |  |                                             1, | 
					
						
							|  |  |  |                                             projectPartId); | 
					
						
							|  |  |  |     CodeCompletion codeCompletion(Utf8StringLiteral("Function"), | 
					
						
							|  |  |  |                                   34, | 
					
						
							|  |  |  |                                   CodeCompletion::FunctionCompletionKind); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     EXPECT_CALL(mockIpcClient, codeCompleted(Property(&CodeCompletedMessage::ticketNumber, Eq(completeCodeMessage.ticketNumber())))) | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  |         .Times(1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-19 12:36:43 +02:00
										 |  |  |     clangServer.completeCode(completeCodeMessage); | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  | TEST_F(ClangIpcServer, TranslationUnitAfterCreationNeedsNoReparseAndHasNewDiagnostics) | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  |     ASSERT_THAT(clangServer, HasDirtyTranslationUnit(functionTestFilePath, projectPartId, 0U, false, true)); | 
					
						
							| 
									
										
										
										
											2015-10-13 15:56:41 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-25 15:29:28 +01:00
										 |  |  | TEST_F(ClangIpcServer, SetCurrentAndVisibleEditor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto functionTranslationUnit = translationUnits.translationUnit(functionTestFilePath, projectPartId); | 
					
						
							|  |  |  |     auto variableTranslationUnit = translationUnits.translationUnit(variableTestFilePath, projectPartId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     updateVisibilty(functionTestFilePath, variableTestFilePath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(functionTranslationUnit.isUsedByCurrentEditor()); | 
					
						
							|  |  |  |     ASSERT_TRUE(functionTranslationUnit.isVisibleInEditor()); | 
					
						
							|  |  |  |     ASSERT_TRUE(variableTranslationUnit.isVisibleInEditor()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_F(ClangIpcServer, IsNotCurrentCurrentAndVisibleEditorAnymore) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto functionTranslationUnit = translationUnits.translationUnit(functionTestFilePath, projectPartId); | 
					
						
							|  |  |  |     auto variableTranslationUnit = translationUnits.translationUnit(variableTestFilePath, projectPartId); | 
					
						
							|  |  |  |     updateVisibilty(functionTestFilePath, variableTestFilePath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     updateVisibilty(variableTestFilePath, Utf8String()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(functionTranslationUnit.isUsedByCurrentEditor()); | 
					
						
							|  |  |  |     ASSERT_FALSE(functionTranslationUnit.isVisibleInEditor()); | 
					
						
							|  |  |  |     ASSERT_TRUE(variableTranslationUnit.isUsedByCurrentEditor()); | 
					
						
							|  |  |  |     ASSERT_TRUE(variableTranslationUnit.isVisibleInEditor()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::SetUp() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     clangServer.addClient(&mockIpcClient); | 
					
						
							|  |  |  |     registerProjectPart(); | 
					
						
							|  |  |  |     registerFiles(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::registerFiles() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     RegisterTranslationUnitForEditorMessage message({FileContainer(functionTestFilePath, projectPartId, unsavedContent(unsavedTestFilePath), true), | 
					
						
							|  |  |  |                                                      FileContainer(variableTestFilePath, projectPartId)}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.registerTranslationUnitsForEditor(message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::registerProjectPart() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     RegisterProjectPartsForEditorMessage message({ProjectPartContainer(projectPartId)}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.registerProjectPartsForEditor(message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::changeProjectPartArguments() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     RegisterProjectPartsForEditorMessage message({ProjectPartContainer(projectPartId, {Utf8StringLiteral("-DArgumentDefinition")})}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.registerProjectPartsForEditor(message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::changeProjectPartArgumentsToWrongValues() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     RegisterProjectPartsForEditorMessage message({ProjectPartContainer(projectPartId, {Utf8StringLiteral("-blah")})}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.registerProjectPartsForEditor(message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ClangIpcServer::updateVisibilty(const Utf8String ¤tEditor, const Utf8String &additionalVisibleEditor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     UpdateVisibleTranslationUnitsMessage message(currentEditor, | 
					
						
							|  |  |  |                                                  {currentEditor, additionalVisibleEditor}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.updateVisibleTranslationUnits(message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const Utf8String ClangIpcServer::unsavedContent(const QString &unsavedFilePath) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QFile unsavedFileContentFile(unsavedFilePath); | 
					
						
							|  |  |  |     bool isOpen = unsavedFileContentFile.open(QIODevice::ReadOnly | QIODevice::Text); | 
					
						
							|  |  |  |     if (!isOpen) | 
					
						
							|  |  |  |         ADD_FAILURE() << "File with the unsaved content cannot be opened!"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return Utf8String::fromByteArray(unsavedFileContentFile.readAll()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 13:31:46 +01:00
										 |  |  | TEST_F(ClangIpcServer, TranslationUnitAfterUpdateNeedsReparseAndHasNewDiagnostics) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const auto fileContainer = FileContainer(functionTestFilePath, projectPartId,unsavedContent(unsavedTestFilePath), true, 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clangServer.updateTranslationUnitsForEditor({{fileContainer}}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(clangServer, HasDirtyTranslationUnit(functionTestFilePath, projectPartId, 1U, true, true)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-01 18:51:55 +02:00
										 |  |  | } |