diff options
author | Eike Ziller <eike.ziller@qt.io> | 2017-07-25 11:50:43 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2017-07-25 11:50:43 +0200 |
commit | 41127e0f4769bd32f3f5d88c2064ba61f222e195 (patch) | |
tree | 7602103527be5ff873a0d8cacc80b3b71270cb4d | |
parent | 3881ff94f7c6386fe43c8e8cc2e47e317a382641 (diff) | |
parent | 336f54def454e83ac34a946dcda448615a6453d8 (diff) |
Merge remote-tracking branch 'origin/4.3' into 4.4
Change-Id: I4e14ef31dc6cdcc0606d39be90195e30c1ee9b25
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeprojectplugin.h | 3 | ||||
-rw-r--r-- | src/plugins/cmakeprojectmanager/servermodereader.cpp | 67 | ||||
-rw-r--r-- | src/plugins/cmakeprojectmanager/servermodereader.h | 8 |
3 files changed, 76 insertions, 2 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.h b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.h index 99c63d10e11..de3112184a0 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.h @@ -61,6 +61,9 @@ private slots: void testCMakeProjectImporterToolChain_data(); void testCMakeProjectImporterToolChain(); + + void testServerModeReaderProgress_data(); + void testServerModeReaderProgress(); #endif private: diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index c784997332b..b2aefc76ceb 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -414,8 +414,7 @@ void ServerModeReader::handleProgress(int min, int cur, int max, const QString & if (!m_future) return; - int progress = m_progressStepMinimum - + (((max - min) / (cur - min)) * (m_progressStepMaximum - m_progressStepMinimum)); + const int progress = calculateProgress(m_progressStepMinimum, min, cur, max, m_progressStepMaximum); m_future->setProgressValue(progress); } @@ -427,6 +426,14 @@ void ServerModeReader::handleSignal(const QString &signal, const QVariantMap &da emit dirty(); } +int ServerModeReader::calculateProgress(const int minRange, const int min, const int cur, const int max, const int maxRange) +{ + if (minRange == maxRange || min == max) + return minRange; + const int clampedCur = std::min(std::max(cur, min), max); + return minRange + ((clampedCur - min) / (max - min)) * (maxRange - minRange); +} + void ServerModeReader::extractCodeModelData(const QVariantMap &data) { const QVariantList configs = data.value("configurations").toList(); @@ -779,3 +786,59 @@ void ServerModeReader::addHeaderNodes(ProjectNode *root, const QList<FileNode *> } // namespace Internal } // namespace CMakeProjectManager + +#if defined(WITH_TESTS) + +#include "cmakeprojectplugin.h" +#include <QTest> + +namespace CMakeProjectManager { +namespace Internal { + +void CMakeProjectPlugin::testServerModeReaderProgress_data() +{ + QTest::addColumn<int>("minRange"); + QTest::addColumn<int>("min"); + QTest::addColumn<int>("cur"); + QTest::addColumn<int>("max"); + QTest::addColumn<int>("maxRange"); + QTest::addColumn<int>("expected"); + + QTest::newRow("empty range") << 100 << 10 << 11 << 20 << 100 << 100; + QTest::newRow("one range (low)") << 0 << 10 << 11 << 20 << 1 << 0; + QTest::newRow("one range (high)") << 20 << 10 << 19 << 20 << 20 << 20; + QTest::newRow("large range") << 30 << 10 << 11 << 20 << 100000 << 30; + + QTest::newRow("empty progress") << -5 << 10 << 10 << 10 << 99995 << -5; + QTest::newRow("one progress (low)") << 42 << 10 << 10 << 11 << 100042 << 42; + QTest::newRow("one progress (high)") << 0 << 10 << 11 << 11 << 100000 << 100000; + QTest::newRow("large progress") << 0 << 10 << 10 << 11 << 100000 << 0; + + QTest::newRow("cur too low") << 0 << 10 << 9 << 100 << 100000 << 0; + QTest::newRow("cur too high") << 0 << 10 << 101 << 100 << 100000 << 100000; + QTest::newRow("cur much too low") << 0 << 10 << -1000 << 100 << 100000 << 0; + QTest::newRow("cur much too high") << 0 << 10 << 1110000 << 100 << 100000 << 100000; +} + +void CMakeProjectPlugin::testServerModeReaderProgress() +{ + QFETCH(int, minRange); + QFETCH(int, min); + QFETCH(int, cur); + QFETCH(int, max); + QFETCH(int, maxRange); + QFETCH(int, expected); + + ServerModeReader reader; + const int r = reader.calculateProgress(minRange, min, cur, max, maxRange); + + QCOMPARE(r, expected); + + QVERIFY(r <= maxRange); + QVERIFY(r >= minRange); +} + +} // namespace Internal +} // namespace CMakeProjectManager + +#endif diff --git a/src/plugins/cmakeprojectmanager/servermodereader.h b/src/plugins/cmakeprojectmanager/servermodereader.h index 4265d9627c3..461bc00e05e 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.h +++ b/src/plugins/cmakeprojectmanager/servermodereader.h @@ -67,6 +67,10 @@ private: void handleProgress(int min, int cur, int max, const QString &inReplyTo); void handleSignal(const QString &signal, const QVariantMap &data); + int calculateProgress(const int minRange, const int min, + const int cur, + const int max, const int maxRange); + struct Target; struct Project; @@ -151,6 +155,10 @@ private: QList<FileGroup *> m_fileGroups; CMakeParser m_parser; + +#if defined(WITH_TESTS) + friend class CMakeProjectPlugin; +#endif }; } // namespace Internal |