aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp53
-rw-r--r--src/plugins/cpptools/cpppreprocessor.cpp2
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h1
-rw-r--r--src/plugins/cpptools/modelmanagertesthelper.h2
-rw-r--r--tests/cppmodelmanager/testdata_guiproject1/main.cpp13
-rw-r--r--tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp16
-rw-r--r--tests/cppmodelmanager/testdata_guiproject1/mainwindow.h24
-rw-r--r--tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui24
-rw-r--r--tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro9
9 files changed, 142 insertions, 2 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index d01c4ff5ab..305b16b2c2 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -32,6 +32,9 @@
#include "cpppreprocessor.h"
#include "modelmanagertesthelper.h"
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/session.h>
+
#include <QDebug>
#include <QFileInfo>
#include <QtTest>
@@ -360,3 +363,53 @@ void CppToolsPlugin::test_modelmanager_snapshot_after_two_projects()
foreach (const QString &file, project2.projectFiles)
QVERIFY(mm->snapshot().contains(file));
}
+
+void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles()
+{
+ TestDataDirectory testDataDirectory(QLatin1String("testdata_guiproject1"));
+ const QString projectFile = testDataDirectory.file(QLatin1String("testdata_guiproject1.pro"));
+
+ // Open project with *.ui file
+ ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance();
+ QString errorOpeningProject;
+ Project *project = pe->openProject(projectFile, &errorOpeningProject);
+ QVERIFY(errorOpeningProject.isEmpty());
+ project->configureAsExampleProject(QStringList());
+
+ // Check working copy.
+ // An AbstractEditorSupport object should have been added for the ui_* file.
+ CppModelManagerInterface *mm = CppModelManagerInterface::instance();
+ CppModelManagerInterface::WorkingCopy workingCopy = mm->workingCopy();
+
+ QCOMPARE(workingCopy.size(), 2); // mm->configurationFileName() and "ui_*.h"
+
+ QStringList fileNamesInWorkinCopy;
+ QHashIterator<QString, QPair<QString, unsigned> > it = workingCopy.iterator();
+ while (it.hasNext()) {
+ it.next();
+ fileNamesInWorkinCopy << QFileInfo(it.key()).fileName();
+ }
+ fileNamesInWorkinCopy.sort();
+ const QString expectedUiHeaderFileName = QLatin1String("ui_mainwindow.h");
+ QCOMPARE(fileNamesInWorkinCopy.at(0), mm->configurationFileName());
+ QCOMPARE(fileNamesInWorkinCopy.at(1), expectedUiHeaderFileName);
+
+ // Check CppPreprocessor / includes.
+ // The CppPreprocessor is expected to find the ui_* file in the working copy.
+ const QString fileIncludingTheUiFile = testDataDirectory.file(QLatin1String("mainwindow.cpp"));
+ while (!mm->snapshot().document(fileIncludingTheUiFile))
+ QCoreApplication::processEvents();
+
+ const CPlusPlus::Snapshot snapshot = mm->snapshot();
+ const Document::Ptr document = snapshot.document(fileIncludingTheUiFile);
+ QVERIFY(document);
+ const QStringList includedFiles = document->includedFiles();
+ QCOMPARE(includedFiles.size(), 2);
+ QCOMPARE(QFileInfo(includedFiles.at(0)).fileName(), QLatin1String("mainwindow.h"));
+ QCOMPARE(QFileInfo(includedFiles.at(1)).fileName(), QLatin1String("ui_mainwindow.h"));
+
+ // Close Project
+ ProjectExplorer::SessionManager *sm = pe->session();
+ sm->removeProject(project);
+ ModelManagerTestHelper::verifyClean();
+}
diff --git a/src/plugins/cpptools/cpppreprocessor.cpp b/src/plugins/cpptools/cpppreprocessor.cpp
index 825b29ce8c..57a3fb4a72 100644
--- a/src/plugins/cpptools/cpppreprocessor.cpp
+++ b/src/plugins/cpptools/cpppreprocessor.cpp
@@ -231,7 +231,7 @@ QString CppPreprocessor::resolveFile_helper(const QString &fileName, IncludeType
foreach (const QString &includePath, m_includePaths) {
QString path = includePath + fileName;
- if (checkFile(path))
+ if (m_workingCopy.contains(path) || checkFile(path))
return path;
}
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index d10c690221..09bea7fc3c 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -164,6 +164,7 @@ private slots:
void test_modelmanager_refresh_1();
void test_modelmanager_refresh_2();
void test_modelmanager_snapshot_after_two_projects();
+ void test_modelmanager_extraeditorsupport_uiFiles();
private:
void test_completion();
diff --git a/src/plugins/cpptools/modelmanagertesthelper.h b/src/plugins/cpptools/modelmanagertesthelper.h
index 8a228cac42..b2b042c445 100644
--- a/src/plugins/cpptools/modelmanagertesthelper.h
+++ b/src/plugins/cpptools/modelmanagertesthelper.h
@@ -79,7 +79,7 @@ public:
~ModelManagerTestHelper();
void cleanup();
- void verifyClean();
+ static void verifyClean();
Project *createProject(const QString &name);
diff --git a/tests/cppmodelmanager/testdata_guiproject1/main.cpp b/tests/cppmodelmanager/testdata_guiproject1/main.cpp
new file mode 100644
index 0000000000..50ca345343
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/main.cpp
@@ -0,0 +1,13 @@
+// Copyright license
+
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+
+ return a.exec();
+}
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp
new file mode 100644
index 0000000000..495189aa3b
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.cpp
@@ -0,0 +1,16 @@
+// Copyright license
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h
new file mode 100644
index 0000000000..6dae9639b6
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.h
@@ -0,0 +1,24 @@
+// Copyright license
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+
+private:
+ Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui
new file mode 100644
index 0000000000..6050363fa7
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/mainwindow.ui
@@ -0,0 +1,24 @@
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>MainWindow</string>
+ </property>
+ <widget class="QMenuBar" name="menuBar" />
+ <widget class="QToolBar" name="mainToolBar" />
+ <widget class="QWidget" name="centralWidget" />
+ <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro b/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro
new file mode 100644
index 0000000000..0fdc70ad7b
--- /dev/null
+++ b/tests/cppmodelmanager/testdata_guiproject1/testdata_guiproject1.pro
@@ -0,0 +1,9 @@
+QT += core gui
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = testdata_guiproject1
+TEMPLATE = app
+
+SOURCES += main.cpp mainwindow.cpp
+HEADERS += mainwindow.h
+FORMS += mainwindow.ui