From 5d88993ae56c2d8b34b06f671f0ab9ce14539674 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Fri, 10 Jun 2016 15:46:59 +0200
Subject: [PATCH] revert *Suite from callback to inheritance, but with
 everything in the *Suite.cpp file.

---
 Core/TestMachinery/FutestSuite.cpp      |  7 ++-----
 Core/TestMachinery/FutestSuite.h        |  7 +++----
 Tests/Functional/TestCore/CoreSuite.cpp | 17 +++++++++++------
 Tests/Functional/TestGUI/GUISuite.cpp   | 16 ++++++++++------
 Tests/Functional/TestPyDump/PyDump.cpp  | 15 +++++++++------
 5 files changed, 35 insertions(+), 27 deletions(-)

diff --git a/Core/TestMachinery/FutestSuite.cpp b/Core/TestMachinery/FutestSuite.cpp
index 4bace6f3157..7fae254a077 100644
--- a/Core/TestMachinery/FutestSuite.cpp
+++ b/Core/TestMachinery/FutestSuite.cpp
@@ -28,15 +28,12 @@
 #include "FTDistributions.h"
 #include "FutestSuite.h"
 
-FutestSuite::FutestSuite(const std::string& name,
-                         class IFutest* functionalTest(const FutestSuite*))
-    : INamed(name)
-    , m_formfactor(0)
+FutestSuite::FutestSuite()
+    : m_formfactor(0)
     , m_ft_distribution_2d(0)
     , m_ff_registry(0)
     , m_ft2d_registry(0)
     , m_current_component(0)
-    , m_functionalTest(functionalTest)
 {
 }
 
diff --git a/Core/TestMachinery/FutestSuite.h b/Core/TestMachinery/FutestSuite.h
index 51c3d16638d..8420d885fad 100644
--- a/Core/TestMachinery/FutestSuite.h
+++ b/Core/TestMachinery/FutestSuite.h
@@ -23,6 +23,7 @@
 #include "WinDllMacros.h"
 #include "OutputData.h"
 #include "ISampleBuilder.h"
+#include "ISingleton.h"
 //! @class FutestSuite
 //! @ingroup standard_samples
 //! @brief Contains all necessary information to compose functional test.
@@ -30,12 +31,11 @@
 class BA_CORE_API_ FutestSuite : public INamed
 {
 public:
-    typedef class IFutest* (*get_futest_t) (const FutestSuite*);
-    FutestSuite(const std::string& name, get_futest_t functionalTest);
+    FutestSuite();
     virtual ~FutestSuite();
 
     int execute(int argc, char** argv);
-    class IFutest* getFutest() const { return (*m_functionalTest)(this); }
+    virtual class IFutest* getFutest() const = 0;
     virtual class IFormFactor* getFormFactor() const;
     virtual class IFTDistribution2D* getFTDistribution2D() const;
     virtual class GISASSimulation* getSimulation() const;
@@ -59,7 +59,6 @@ public:
     class TestFTDistribution2DRegistry* m_ft2d_registry;
     std::vector<std::string> m_component_names;
     size_t m_current_component;
-    get_futest_t m_functionalTest;
 };
 
 #endif
diff --git a/Tests/Functional/TestCore/CoreSuite.cpp b/Tests/Functional/TestCore/CoreSuite.cpp
index 6635a92289a..d3234e51b31 100644
--- a/Tests/Functional/TestCore/CoreSuite.cpp
+++ b/Tests/Functional/TestCore/CoreSuite.cpp
@@ -17,12 +17,17 @@
 #include "FutestRegistry.h"
 #include "CoreFutest.h"
 
-//! Program CoreSuite, to run core functional tests.
+class CoreSuite : public FutestSuite, public ISingleton<CoreSuite>
+{
+public:
+    CoreSuite() { setName("CoreSuite"); }
+    IFutest* getFutest() const { return new CoreFutest(
+            getTestName(), getTestDescription(), getSimulation(),
+            getReferenceData(), getTestThreshold(), getReferenceFileName() ); }
+};
+
+//! The main function of CoreSuite, to run functional tests
 int main(int argc, char** argv)
 {
-    FutestSuite suite("CoreSuite", [] (const FutestSuite* s) -> IFutest* {
-            return new CoreFutest(
-        s->getTestName(), s->getTestDescription(), s->getSimulation(),
-        s->getReferenceData(), s->getTestThreshold(), s->getReferenceFileName()); } );
-    return suite.execute(argc, argv);
+    return CoreSuite::instance().execute(argc, argv);
 }
diff --git a/Tests/Functional/TestGUI/GUISuite.cpp b/Tests/Functional/TestGUI/GUISuite.cpp
index 186bd55750f..61440938719 100644
--- a/Tests/Functional/TestGUI/GUISuite.cpp
+++ b/Tests/Functional/TestGUI/GUISuite.cpp
@@ -18,12 +18,16 @@
 #include "FutestRegistry.h"
 #include "GUIFutest.h"
 
-//! The main function of GUITestSuite to run functional tests
+class GUISuite : public FutestSuite, public ISingleton<GUISuite>
+{
+public:
+    GUISuite() { setName("GUISuite"); }
+    IFutest* getFutest() const { return new GUIFutest(
+            getTestName(), getTestDescription(), getSimulation(), getTestThreshold()); }
+};
+
+//! The main function of GUITestSuite, to run functional tests
 int main(int argc, char** argv)
 {
-    FutestSuite suite("GUISuite", [] (const FutestSuite* s) -> IFutest* {
-            return new GUIFutest(
-                s->getTestName(), s->getTestDescription(),
-                s->getSimulation(), s->getTestThreshold()); } );
-    return suite.execute(argc, argv);
+    return GUISuite::instance().execute(argc, argv);
 }
diff --git a/Tests/Functional/TestPyDump/PyDump.cpp b/Tests/Functional/TestPyDump/PyDump.cpp
index 208fc198180..c80bc2847e3 100644
--- a/Tests/Functional/TestPyDump/PyDump.cpp
+++ b/Tests/Functional/TestPyDump/PyDump.cpp
@@ -17,13 +17,16 @@
 #include "FutestRegistry.h"
 #include "PyScriptFutest.h"
 
-//! Program PySuite, to run pyscript functional tests.
+class PySuite : public FutestSuite, public ISingleton<PySuite>
+{
+public:
+    PySuite() { setName("PySuite"); }
+    IFutest* getFutest() const { return new PyScriptFutest(
+            getTestName(), getTestDescription(), getSimulation(), getTestThreshold()); }
+};
 
+//! The main function of PyTestSuite, to run functional tests
 int main(int argc, char** argv)
 {
-    FutestSuite suite("PySuite", [] (const FutestSuite* s) -> IFutest* {
-            return new PyScriptFutest(
-                s->getTestName(), s->getTestDescription(),
-                s->getSimulation(), s->getTestThreshold()); } );
-    return suite.execute(argc, argv);
+    return PySuite::instance().execute(argc, argv);
 }
-- 
GitLab