From 99a82f7035f7bb9230d30f151f56c61085df4c13 Mon Sep 17 00:00:00 2001
From: Christian Stenger <christian.stenger@qt.io>
Date: Mon, 24 Oct 2016 09:00:20 +0200
Subject: [PATCH] AutoTest: Simplify settingspage creation for frameworks

Change-Id: Icb262e48a7980748cb0f03e578a49ca26d0c6b29
Reviewed-by: David Schulz <david.schulz@qt.io>
---
 src/plugins/autotest/autotest.pro             |  3 +-
 src/plugins/autotest/autotest.qbs             |  1 +
 src/plugins/autotest/autotestconstants.h      |  2 +-
 src/plugins/autotest/gtest/gtestframework.cpp |  4 +-
 src/plugins/autotest/gtest/gtestframework.h   |  2 +-
 .../autotest/gtest/gtestsettingspage.cpp      | 14 ++--
 .../autotest/gtest/gtestsettingspage.h        |  7 +-
 src/plugins/autotest/itestframework.h         |  5 +-
 src/plugins/autotest/itestsettingspage.h      | 70 +++++++++++++++++++
 .../autotest/qtest/qttestframework.cpp        |  4 +-
 src/plugins/autotest/qtest/qttestframework.h  |  2 +-
 .../autotest/qtest/qttestsettingspage.cpp     | 14 ++--
 .../autotest/qtest/qttestsettingspage.h       |  7 +-
 src/plugins/autotest/testframeworkmanager.cpp |  2 +-
 14 files changed, 99 insertions(+), 38 deletions(-)
 create mode 100644 src/plugins/autotest/itestsettingspage.h

diff --git a/src/plugins/autotest/autotest.pro b/src/plugins/autotest/autotest.pro
index 07d38fdab3..9cf411299d 100644
--- a/src/plugins/autotest/autotest.pro
+++ b/src/plugins/autotest/autotest.pro
@@ -102,7 +102,8 @@ HEADERS += \
     quick/quicktestvisitors.h \
     quick/quicktestframework.h \
     testframeworkmanager.h \
-    testrunconfiguration.h
+    testrunconfiguration.h \
+    itestsettingspage.h
 
 RESOURCES += \
     autotest.qrc
diff --git a/src/plugins/autotest/autotest.qbs b/src/plugins/autotest/autotest.qbs
index fcef33b454..9552909ed7 100644
--- a/src/plugins/autotest/autotest.qbs
+++ b/src/plugins/autotest/autotest.qbs
@@ -72,6 +72,7 @@ QtcPlugin {
         "itestparser.h",
         "itestframework.h",
         "iframeworksettings.h",
+        "itestsettingspage.h",
         "testframeworkmanager.cpp",
         "testframeworkmanager.h",
         "testrunconfiguration.h"
diff --git a/src/plugins/autotest/autotestconstants.h b/src/plugins/autotest/autotestconstants.h
index b4bef1400c..7c1aaa0dac 100644
--- a/src/plugins/autotest/autotestconstants.h
+++ b/src/plugins/autotest/autotestconstants.h
@@ -42,7 +42,7 @@ const char AUTOTEST_SETTINGS_CATEGORY[] = "ZY.Tests";
 const char AUTOTEST_SETTINGS_TR[]       = QT_TRANSLATE_NOOP("AutoTest", "Test Settings");
 const char FRAMEWORK_PREFIX[]           = "AutoTest.Framework.";
 
-
+const char SETTINGSPAGE_PREFIX[]        = "A.AutoTest.";
 const char SETTINGSGROUP[]              = "Autotest";
 } // namespace Constants
 } // namespace Autotest
diff --git a/src/plugins/autotest/gtest/gtestframework.cpp b/src/plugins/autotest/gtest/gtestframework.cpp
index 4ec6cd9962..3117e9d3f1 100644
--- a/src/plugins/autotest/gtest/gtestframework.cpp
+++ b/src/plugins/autotest/gtest/gtestframework.cpp
@@ -61,9 +61,9 @@ IFrameworkSettings *GTestFramework::createFrameworkSettings() const
     return new GTestSettings;
 }
 
-Core::IOptionsPage *GTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
+ITestSettingsPage *GTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
 {
-    return new GTestSettingsPage(settings);
+    return new GTestSettingsPage(settings, this);
 }
 
 bool GTestFramework::hasFrameworkSettings() const
diff --git a/src/plugins/autotest/gtest/gtestframework.h b/src/plugins/autotest/gtest/gtestframework.h
index 6645da1533..42c91118f5 100644
--- a/src/plugins/autotest/gtest/gtestframework.h
+++ b/src/plugins/autotest/gtest/gtestframework.h
@@ -37,7 +37,7 @@ public:
     const char *name() const override;
     unsigned priority() const override;
     IFrameworkSettings *createFrameworkSettings() const override;
-    Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
+    ITestSettingsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
     bool hasFrameworkSettings() const override;
 protected:
     ITestParser *createTestParser() const override;
diff --git a/src/plugins/autotest/gtest/gtestsettingspage.cpp b/src/plugins/autotest/gtest/gtestsettingspage.cpp
index 77b34d0d45..932fc947de 100644
--- a/src/plugins/autotest/gtest/gtestsettingspage.cpp
+++ b/src/plugins/autotest/gtest/gtestsettingspage.cpp
@@ -65,18 +65,14 @@ GTestSettings GTestSettingsWidget::settings() const
     return result;
 }
 
-GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings)
-    : m_settings(qSharedPointerCast<GTestSettings>(settings)), m_widget(0)
+GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
+                                     const ITestFramework *framework)
+    : ITestSettingsPage(framework),
+      m_settings(qSharedPointerCast<GTestSettings>(settings)),
+      m_widget(0)
 {
-    setId("A.AutoTest.10.GTest"); // FIXME
     setDisplayName(QCoreApplication::translate("GTestFramework",
                                                GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
-    setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
-    setDisplayCategory(QCoreApplication::translate("AutoTest", Constants::AUTOTEST_SETTINGS_TR));
-}
-
-GTestSettingsPage::~GTestSettingsPage()
-{
 }
 
 QWidget *GTestSettingsPage::widget()
diff --git a/src/plugins/autotest/gtest/gtestsettingspage.h b/src/plugins/autotest/gtest/gtestsettingspage.h
index cdef183de0..c17753be4b 100644
--- a/src/plugins/autotest/gtest/gtestsettingspage.h
+++ b/src/plugins/autotest/gtest/gtestsettingspage.h
@@ -27,7 +27,7 @@
 
 #include "ui_gtestsettingspage.h"
 
-#include <coreplugin/dialogs/ioptionspage.h>
+#include "../itestsettingspage.h"
 
 #include <QPointer>
 
@@ -50,12 +50,11 @@ private:
     Ui::GTestSettingsPage m_ui;
 };
 
-class GTestSettingsPage : public Core::IOptionsPage
+class GTestSettingsPage : public ITestSettingsPage
 {
     Q_OBJECT
 public:
-    explicit GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings);
-    ~GTestSettingsPage();
+    GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework);
 
     QWidget *widget() override;
     void apply() override;
diff --git a/src/plugins/autotest/itestframework.h b/src/plugins/autotest/itestframework.h
index d752da0250..ae6e0ec437 100644
--- a/src/plugins/autotest/itestframework.h
+++ b/src/plugins/autotest/itestframework.h
@@ -28,12 +28,11 @@
 #include "testtreeitem.h"
 #include "itestparser.h"
 
-namespace Core { class IOptionsPage; }
-
 namespace Autotest {
 namespace Internal {
 
 class IFrameworkSettings;
+class ITestSettingsPage;
 
 class ITestFramework
 {
@@ -49,7 +48,7 @@ public:
     virtual unsigned priority() const = 0;          // should this be modifyable?
     virtual bool hasFrameworkSettings() const { return false; }
     virtual IFrameworkSettings *createFrameworkSettings() const { return 0; }
-    virtual Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
+    virtual ITestSettingsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
     {
         Q_UNUSED(settings);
         return 0;
diff --git a/src/plugins/autotest/itestsettingspage.h b/src/plugins/autotest/itestsettingspage.h
new file mode 100644
index 0000000000..cce44e8bc3
--- /dev/null
+++ b/src/plugins/autotest/itestsettingspage.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://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 The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "autotestconstants.h"
+#include "itestframework.h"
+
+#include <coreplugin/dialogs/ioptionspage.h>
+
+namespace Autotest {
+namespace Internal {
+
+class IFrameworkSettings;
+
+class ITestSettingsPage : public Core::IOptionsPage
+{
+public:
+    explicit ITestSettingsPage(const ITestFramework *framework)
+    {
+        setId(Core::Id(Constants::SETTINGSPAGE_PREFIX).withSuffix(
+                QString("%1.%2").arg(framework->priority()).arg(QLatin1String(framework->name()))));
+        setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
+        setDisplayCategory(QCoreApplication::translate("AutoTest",
+                                                       Constants::AUTOTEST_SETTINGS_TR));
+    }
+
+    virtual ~ITestSettingsPage() {}
+
+private:
+    void setId(Core::Id id)
+    {
+        Core::IOptionsPage::setId(id);
+    }
+
+    void setCategory(Core::Id category)
+    {
+        Core::IOptionsPage::setCategory(category);
+    }
+
+    void setDisplayCategory(const QString &displayCategory)
+    {
+        Core::IOptionsPage::setDisplayCategory(displayCategory);
+    }
+};
+
+} // namespace Internal
+} // namespace Autotest
diff --git a/src/plugins/autotest/qtest/qttestframework.cpp b/src/plugins/autotest/qtest/qttestframework.cpp
index 8bcefb248b..25250e83bc 100644
--- a/src/plugins/autotest/qtest/qttestframework.cpp
+++ b/src/plugins/autotest/qtest/qttestframework.cpp
@@ -51,9 +51,9 @@ IFrameworkSettings *QtTestFramework::createFrameworkSettings() const
     return new QtTestSettings;
 }
 
-Core::IOptionsPage *QtTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
+ITestSettingsPage *QtTestFramework::createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
 {
-    return new QtTestSettingsPage(settings);
+    return new QtTestSettingsPage(settings, this);
 }
 
 bool QtTestFramework::hasFrameworkSettings() const
diff --git a/src/plugins/autotest/qtest/qttestframework.h b/src/plugins/autotest/qtest/qttestframework.h
index a6cfcb9f2a..e9a181591f 100644
--- a/src/plugins/autotest/qtest/qttestframework.h
+++ b/src/plugins/autotest/qtest/qttestframework.h
@@ -37,7 +37,7 @@ public:
     const char *name() const override;
     unsigned priority() const override;
     IFrameworkSettings *createFrameworkSettings() const override;
-    Core::IOptionsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
+    ITestSettingsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const override;
     bool hasFrameworkSettings() const override;
 
 protected:
diff --git a/src/plugins/autotest/qtest/qttestsettingspage.cpp b/src/plugins/autotest/qtest/qttestsettingspage.cpp
index fbaf252fda..54e081a02d 100644
--- a/src/plugins/autotest/qtest/qttestsettingspage.cpp
+++ b/src/plugins/autotest/qtest/qttestsettingspage.cpp
@@ -86,18 +86,14 @@ QtTestSettings QtTestSettingsWidget::settings() const
     return result;
 }
 
-QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings)
-    : m_settings(qSharedPointerCast<QtTestSettings>(settings)), m_widget(0)
+QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
+                                       const ITestFramework *framework)
+    : ITestSettingsPage(framework),
+      m_settings(qSharedPointerCast<QtTestSettings>(settings)),
+      m_widget(0)
 {
-    setId("A.AutoTest.1.QtTest"); // FIXME
     setDisplayName(QCoreApplication::translate("QtTestFramework",
                                                QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
-    setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
-    setDisplayCategory(QCoreApplication::translate("AutoTest", Constants::AUTOTEST_SETTINGS_TR));
-}
-
-QtTestSettingsPage::~QtTestSettingsPage()
-{
 }
 
 QWidget *QtTestSettingsPage::widget()
diff --git a/src/plugins/autotest/qtest/qttestsettingspage.h b/src/plugins/autotest/qtest/qttestsettingspage.h
index 2b5c64d534..abfca142c9 100644
--- a/src/plugins/autotest/qtest/qttestsettingspage.h
+++ b/src/plugins/autotest/qtest/qttestsettingspage.h
@@ -27,7 +27,7 @@
 
 #include "ui_qttestsettingspage.h"
 
-#include <coreplugin/dialogs/ioptionspage.h>
+#include "../itestsettingspage.h"
 
 #include <QPointer>
 
@@ -50,12 +50,11 @@ private:
     Ui::QtTestSettingsPage m_ui;
 };
 
-class QtTestSettingsPage : public Core::IOptionsPage
+class QtTestSettingsPage : public ITestSettingsPage
 {
     Q_OBJECT
 public:
-    explicit QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings);
-    ~QtTestSettingsPage();
+    QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings, const ITestFramework *framework);
 
     QWidget *widget() override;
     void apply() override;
diff --git a/src/plugins/autotest/testframeworkmanager.cpp b/src/plugins/autotest/testframeworkmanager.cpp
index 0b65a79e17..16a33d7425 100644
--- a/src/plugins/autotest/testframeworkmanager.cpp
+++ b/src/plugins/autotest/testframeworkmanager.cpp
@@ -29,12 +29,12 @@
 #include "iframeworksettings.h"
 #include "itestframework.h"
 #include "itestparser.h"
+#include "itestsettingspage.h"
 #include "testrunner.h"
 #include "testsettings.h"
 #include "testtreeitem.h"
 #include "testtreemodel.h"
 
-#include <coreplugin/dialogs/ioptionspage.h>
 #include <utils/algorithm.h>
 #include <utils/qtcassert.h>
 
-- 
GitLab