Ver código fonte

Refactored PluginFramework test environment.

Sascha Zelzer 14 anos atrás
pai
commit
826ca67d45
46 arquivos alterados com 475 adições e 191 exclusões
  1. 7 2
      Libs/PluginFramework/Testing/CMakeLists.txt
  2. 11 9
      Libs/PluginFramework/Testing/Cpp/CMakeLists.txt
  3. 0 139
      Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestMain.cpp
  4. 247 0
      Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestRunner.cpp
  5. 53 0
      Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestRunner.h
  6. 66 0
      Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp
  7. 5 38
      Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.h
  8. 27 2
      Libs/PluginFramework/Testing/FrameworkTest/CMakeLists.txt
  9. 57 0
      Libs/PluginFramework/Testing/FrameworkTest/ctkPluginFrameworkTestMain.cpp
  10. 1 0
      Libs/PluginFramework/Testing/FrameworkTest/ctkPluginFrameworkTestSuite.cpp
  11. 1 1
      Libs/PluginFramework/Testing/TestPlugins/CMakeLists.txt
  12. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/CMakeLists.txt
  13. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2.cpp
  14. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Activator.cpp
  15. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Activator_p.h
  16. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Service.h
  17. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2_p.h
  18. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/manifest_headers.cmake
  19. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/target_libraries.cmake
  20. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/CMakeLists.txt
  21. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginA.cpp
  22. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAActivator.cpp
  23. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAActivator_p.h
  24. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAService.h
  25. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginA_p.h
  26. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/manifest_headers.cmake
  27. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/target_libraries.cmake
  28. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/CMakeLists.txt
  29. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/ctkTestPluginD.cpp
  30. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/target_libraries.cmake
  31. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/CMakeLists.txt
  32. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkActivatorSL1.cpp
  33. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkActivatorSL1_p.h
  34. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkFooService.h
  35. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/manifest_headers.cmake
  36. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/target_libraries.cmake
  37. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/CMakeLists.txt
  38. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/ctkActivatorSL3.cpp
  39. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/ctkActivatorSL3_p.h
  40. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/manifest_headers.cmake
  41. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/target_libraries.cmake
  42. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/CMakeLists.txt
  43. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/ctkActivator.cpp
  44. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/ctkActivator_p.h
  45. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/manifest_headers.cmake
  46. 0 0
      Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/target_libraries.cmake

+ 7 - 2
Libs/PluginFramework/Testing/CMakeLists.txt

@@ -1,8 +1,11 @@
+SET(fw_lib ${PROJECT_NAME} CACHE INTERNAL "Name of the PluginFramework library")
+SET(fwtestutil_lib ${PROJECT_NAME}TestUtil CACHE INTERNAL "Name of the PluginFramework test utility library")
+
 ADD_SUBDIRECTORY(Cpp)
 
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/Cpp)
 
-SET(test_plugins
+SET(fwtest_plugins
   pluginA_test
   pluginA2_test
   pluginD_test
@@ -12,4 +15,6 @@ SET(test_plugins
 )
 
 ADD_SUBDIRECTORY(FrameworkTest)
-ADD_SUBDIRECTORY(TestPlugins)
+ADD_SUBDIRECTORY(FrameworkTestPlugins)
+
+ADD_SUBDIRECTORY(ConfigAdminTest)

+ 11 - 9
Libs/PluginFramework/Testing/Cpp/CMakeLists.txt

@@ -1,6 +1,11 @@
+# Code in this directory will be compiled into
+# a static utility library. Test executables may
+# link to it to bootstrap a plugin framework and
+# start registered tests.
+
 SET(SRCS
-  ctkPluginFrameworkTestMain.cpp
-  ctkPluginFrameworkTestUtil.h
+  ctkPluginFrameworkTestUtil.cpp
+  ctkPluginFrameworkTestRunner.cpp
   ctkTestSuiteInterface.h
 )
 
@@ -10,12 +15,9 @@ SET(MY_MOC_CXX )
 
 #QT4_WRAP_CPP(MY_MOC_CXX ${MOC_SRCS})
 
-SET(test_executable ${PROJECT_NAME}CppTests)
-
-ADD_EXECUTABLE(${test_executable} ${SRCS} ${MY_MOC_CXX})
-TARGET_LINK_LIBRARIES(${test_executable} ${PROJECT_NAME})
+SET(lib_name ${fwtestutil_lib})
 
-ADD_DEPENDENCIES(${test_executable} org_commontk_pluginfwtest)
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
 
-ADD_TEST(${PROJECT_NAME}Tests ${CPP_TEST_PATH}/${test_executable})
-SET_PROPERTY(TEST ${PROJECT_NAME}Tests PROPERTY LABELS ${PROJECT_NAME})
+ADD_LIBRARY(${lib_name} STATIC ${SRCS} ${MY_MOC_CXX})
+TARGET_LINK_LIBRARIES(${lib_name} ${fw_lib})

+ 0 - 139
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestMain.cpp

@@ -1,139 +0,0 @@
-/*=============================================================================
-
-  Library: CTK
-
-  Copyright (c) 2010 German Cancer Research Center,
-    Division of Medical and Biological Informatics
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
-=============================================================================*/
-
-#include <QCoreApplication>
-#include <QDirIterator>
-#include <QTest>
-#include <QThread>
-
-#include <ctkPluginContext.h>
-#include <ctkPluginConstants.h>
-#include <ctkPluginFrameworkFactory.h>
-#include <ctkPluginFramework.h>
-#include <ctkPluginException.h>
-#include <ctkServiceReference.h>
-
-#include "ctkTestSuiteInterface.h"
-
-class TestRunner : public QThread
-{
-public:
-
-  TestRunner(ctkPluginContext* context, long testPluginId, int argc, char** argv)
-    : context(context), testPluginId(testPluginId), argc(argc), argv(argv)
-  {
-
-  }
-
-  void run()
-  {
-    // start the main test plugin which registers the test suites (QObject classes)
-    QSharedPointer<ctkPlugin> fwTest = context->getPlugin(testPluginId);
-    fwTest->start();
-
-    QList<ctkServiceReference> refs = context->getServiceReferences<ctkTestSuiteInterface>();
-
-    int result = 0;
-    foreach(ctkServiceReference ref, refs)
-    {
-      result += QTest::qExec(context->getService(ref), argc, argv);
-      if (result > 0) break;
-    }
-
-    if (result > 0) QCoreApplication::exit(result);
-  }
-
-private:
-
-  ctkPluginContext* context;
-  long testPluginId;
-  int argc;
-  char** argv;
-};
-
-int main(int argc, char** argv)
-{
-  QCoreApplication app(argc, argv);
-
-  app.setOrganizationName("CTK");
-  app.setOrganizationDomain("commontk.org");
-  app.setApplicationName("ctkPluginFrameworkCppTests");
-
-  QString pluginDir;
-#ifdef CMAKE_INTDIR
-  pluginDir = qApp->applicationDirPath() + "/../test_plugins/" CMAKE_INTDIR "/";
-#else
-  pluginDir = qApp->applicationDirPath() + "/test_plugins/";
-#endif
-
-  QApplication::addLibraryPath(pluginDir);
-
-  ctkProperties fwProps;
-  fwProps.insert(ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN, ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT);
-  fwProps.insert("pluginfw.testDir", pluginDir);
-  ctkPluginFrameworkFactory fwFactory(fwProps);
-  QSharedPointer<ctkPluginFramework> framework = fwFactory.getFramework();
-  framework->start();
-
-  ctkPluginContext* context = framework->getPluginContext();
-
-  long fwTestPluginId = -1;
-  QStringList libFilter;
-  libFilter << "*.dll" << "*.so" << "*.dylib";
-  QDirIterator dirIter(pluginDir, libFilter, QDir::Files);
-  while(dirIter.hasNext())
-  {
-    dirIter.next();
-    if (dirIter.fileName().contains("org_commontk_pluginfwtest"))
-    {
-      try
-      {
-        fwTestPluginId = context->installPlugin(QUrl::fromLocalFile(dirIter.filePath()).toString())->getPluginId();
-        break;
-      }
-      catch (const ctkPluginException& e)
-      {
-        qCritical() << e.what();
-      }
-    }
-  }
-
-  if (fwTestPluginId < 0)
-  {
-    qCritical() << "Could not find the plugin framework test plugin: org.commontk.pluginfwtest";
-  }
-
-//  QList<ctkServiceReference> refs = context->getServiceReferences("ctkTestSuiteInterface");
-
-//  int result = 0;
-//  foreach(ctkServiceReference ref, refs)
-//  {
-//    result = QTest::qExec(context->getService(ref), argc, argv);
-//  }
-
-//  return result;
-
-  TestRunner runner(context, fwTestPluginId, argc, argv);
-  runner.connect(&runner, SIGNAL(finished()), &app, SLOT(quit()));
-  runner.start();
-
-  return app.exec();
-}

+ 247 - 0
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestRunner.cpp

@@ -0,0 +1,247 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+
+#include "ctkPluginFrameworkTestRunner.h"
+
+#include "ctkTestSuiteInterface.h"
+
+#include <ctkPluginFrameworkFactory.h>
+#include <ctkPluginFramework.h>
+#include <ctkPluginContext.h>
+#include <ctkPluginException.h>
+
+#include <QStringList>
+#include <QPair>
+#include <QCoreApplication>
+#include <QDirIterator>
+#include <QTest>
+#include <QThread>
+#include <QDebug>
+
+class TestRunner : public QThread
+{
+public:
+
+  typedef QPair<long, ctkPlugin::StartOptions> StartPluginPair;
+
+  TestRunner(ctkPluginContext* context, const QSet<StartPluginPair>& startPlugins, int argc, char** argv)
+    : context(context), startPluginInfos(startPlugins),
+      argc(argc), argv(argv)
+  {
+
+  }
+
+  void run()
+  {
+    // start the specified plugins which may register the test suites (QObject classes)
+    foreach(StartPluginPair pluginInfo, startPluginInfos)
+    {
+      QSharedPointer<ctkPlugin> plugin = context->getPlugin(pluginInfo.first);
+      plugin->start(pluginInfo.second);
+    }
+
+    QList<ctkServiceReference> refs = context->getServiceReferences<ctkTestSuiteInterface>();
+
+    int result = 0;
+    foreach(ctkServiceReference ref, refs)
+    {
+      result += QTest::qExec(context->getService(ref), argc, argv);
+      if (result > 0) break;
+    }
+
+    if (result > 0) QCoreApplication::exit(result);
+  }
+
+private:
+
+  ctkPluginContext* context;
+  QSet<StartPluginPair> startPluginInfos;
+  int argc;
+  char** argv;
+};
+
+class ctkPluginFrameworkTestRunnerPrivate
+{
+public:
+
+  typedef QPair<QString, bool> PluginPathPair;
+  QList<PluginPathPair> pluginPaths;
+
+  typedef QPair<QString, QString> InstallCandPair;
+  QList<InstallCandPair> installCandidates;
+
+  typedef QPair<QString, ctkPlugin::StartOptions> ActivatePair;
+  QList<ActivatePair> activatePlugins;
+
+  typedef QPair<long, ctkPlugin::StartOptions> StartPluginPair;
+  QSet<StartPluginPair> startPlugins;
+
+  ctkPluginContext* context;
+
+  ctkPluginFrameworkFactory* fwFactory;
+
+  ctkPluginFrameworkTestRunnerPrivate()
+    : context(0), fwFactory(0)
+  {
+    pluginLibFilter << "*.dll" << "*.so" << "*.dylib";
+  }
+
+  void installPlugins(const QString& path)
+  {
+    QDirIterator dirIter(path, pluginLibFilter, QDir::Files);
+    while(dirIter.hasNext())
+    {
+      dirIter.next();
+      try
+      {
+        QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(dirIter.filePath()));
+        long pluginId = plugin->getPluginId();
+        QString symbolicName = plugin->getSymbolicName();
+        foreach(ActivatePair activatePlugin, activatePlugins)
+        {
+          if (activatePlugin.first == symbolicName)
+          {
+            startPlugins.insert(qMakePair(pluginId, activatePlugin.second));
+            activatePlugins.removeAll(activatePlugin);
+            break;
+          }
+        }
+      }
+      catch (const ctkPluginException& e)
+      {
+        qCritical() << e.what();
+      }
+    }
+  }
+
+  void installPlugin(const QString& path, const QString& name)
+  {
+    QDirIterator dirIter(path, pluginLibFilter, QDir::Files);
+    while(dirIter.hasNext())
+    {
+      dirIter.next();
+      if (dirIter.fileName().contains(name))
+      {
+        try
+        {
+          QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(dirIter.filePath()));
+          QString symbolicName = plugin->getSymbolicName();
+          long pluginId = plugin->getPluginId();
+          foreach(ActivatePair activatePlugin, activatePlugins)
+          {
+            if (activatePlugin.first == symbolicName)
+            {
+              startPlugins.insert(qMakePair(pluginId, activatePlugin.second));
+              activatePlugins.removeAll(activatePlugin);
+              break;
+            }
+          }
+          break;
+        }
+        catch (const ctkPluginException& e)
+        {
+          qCritical() << e.what();
+        }
+      }
+    }
+  }
+
+private:
+
+  QStringList pluginLibFilter;
+};
+
+ctkPluginFrameworkTestRunner::ctkPluginFrameworkTestRunner()
+  : d_ptr(new ctkPluginFrameworkTestRunnerPrivate())
+{
+
+}
+
+ctkPluginFrameworkTestRunner::~ctkPluginFrameworkTestRunner()
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+  delete d->fwFactory;
+}
+
+void ctkPluginFrameworkTestRunner::addPluginPath(const QString& path, bool install)
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+  d->pluginPaths.push_back(qMakePair(path, install));
+}
+
+void ctkPluginFrameworkTestRunner::addPlugin(const QString &path, const QString &name)
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+  d->installCandidates.push_back(qMakePair(path, name));
+}
+
+void ctkPluginFrameworkTestRunner::startPluginOnRun(const QString& pluginId, ctkPlugin::StartOptions opts)
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+  d->activatePlugins.push_back(qMakePair(pluginId, opts));
+}
+
+void ctkPluginFrameworkTestRunner::init(const ctkProperties& fwProps)
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+
+  d->fwFactory = new ctkPluginFrameworkFactory(fwProps);
+  QSharedPointer<ctkPluginFramework> framework = d->fwFactory->getFramework();
+  framework->start();
+
+  d->context = framework->getPluginContext();
+
+  foreach(ctkPluginFrameworkTestRunnerPrivate::PluginPathPair path,
+          d->pluginPaths)
+  {
+    QCoreApplication::addLibraryPath(path.first);
+    if (path.second) d->installPlugins(path.first);
+  }
+
+  foreach(ctkPluginFrameworkTestRunnerPrivate::InstallCandPair candidate,
+          d->installCandidates)
+  {
+    d->installPlugin(candidate.first, candidate.second);
+  }
+}
+
+int ctkPluginFrameworkTestRunner::run(int argc, char** argv)
+{
+  Q_D(ctkPluginFrameworkTestRunner);
+
+  if (!d->activatePlugins.isEmpty())
+  {
+    qCritical() << "The following plugins will not be started, because"
+                << "they could not be installed:";
+    foreach(ctkPluginFrameworkTestRunnerPrivate::ActivatePair p,
+            d->activatePlugins)
+    {
+      qCritical() << "  -" << p.first;
+    }
+  }
+
+  TestRunner runner(d->context, d->startPlugins, argc, argv);
+  runner.connect(&runner, SIGNAL(finished()), qApp, SLOT(quit()));
+  runner.start();
+
+  return qApp->exec();
+}

+ 53 - 0
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestRunner.h

@@ -0,0 +1,53 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+
+#ifndef CTKPLUGINFRAMEWORKTESTRUNNER_H
+#define CTKPLUGINFRAMEWORKTESTRUNNER_H
+
+#include <ctkPlugin.h>
+#include <ctkPluginFramework_global.h>
+
+class ctkPluginFrameworkTestRunnerPrivate;
+
+class ctkPluginFrameworkTestRunner
+{
+
+public:
+
+  ctkPluginFrameworkTestRunner();
+  ~ctkPluginFrameworkTestRunner();
+
+  void addPluginPath(const QString& path, bool install = true);
+  void addPlugin(const QString& path, const QString& name);
+  void startPluginOnRun(const QString& name, ctkPlugin::StartOptions opts = ctkPlugin::START_ACTIVATION_POLICY);
+
+  void init(const ctkProperties& fwProps = ctkProperties());
+  int run(int argc, char** argv);
+
+private:
+
+  Q_DECLARE_PRIVATE(ctkPluginFrameworkTestRunner)
+
+  const QScopedPointer<ctkPluginFrameworkTestRunnerPrivate> d_ptr;
+};
+
+#endif // CTKPLUGINFRAMEWORKTESTRUNNER_H

+ 66 - 0
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.cpp

@@ -0,0 +1,66 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#include "ctkPluginFrameworkTestUtil.h"
+
+#include <QFileInfo>
+#include <QLibrary>
+#include <QDirIterator>
+#include <QDebug>
+
+#include <ctkPluginContext.h>
+#include <ctkPluginException.h>
+
+QSharedPointer<ctkPlugin> ctkPluginFrameworkTestUtil::installPlugin(
+  ctkPluginContext* pc, const QString& plugin)
+{
+  qDebug() << "installPlugin(" << plugin << ")";
+  QFileInfo pluginInfo(plugin);
+  if (pluginInfo.exists() && pluginInfo.isFile() &&
+      QLibrary::isLibrary(pluginInfo.absoluteFilePath()))
+  {
+    return pc->installPlugin(QUrl::fromLocalFile(pluginInfo.absoluteFilePath()));
+  }
+  else
+  {
+    QString testPluginDir = pc->getProperty("pluginfw.testDir").toString();
+    QFileInfo testDirInfo(testPluginDir);
+    if (!testDirInfo.exists() || !testDirInfo.isDir())
+    {
+      throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir));
+    }
+
+    QStringList libFilter;
+    libFilter << "*.dll" << "*.so" << "*.dylib";
+    QDirIterator dirIter(testDirInfo.absoluteFilePath(), libFilter, QDir::Files);
+    while (dirIter.hasNext())
+    {
+      QString lib = dirIter.next();
+      if (dirIter.fileName().contains(plugin))
+      {
+        return pc->installPlugin(QUrl::fromLocalFile(lib));
+      }
+    }
+
+    throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir));
+  }
+}
+

+ 5 - 38
Libs/PluginFramework/Testing/Cpp/ctkPluginFrameworkTestUtil.h

@@ -24,50 +24,17 @@
 #define CTKPLUGINFRAMEWORKTESTUTIL_H
 
 #include <QString>
-#include <QFileInfo>
-#include <QLibrary>
-#include <QDirIterator>
+#include <QSharedPointer>
 
-#include <ctkPluginContext.h>
-#include <ctkPluginException.h>
+class ctkPlugin;
+class ctkPluginContext;
 
 class ctkPluginFrameworkTestUtil
 {
-public:
-
-  static QSharedPointer<ctkPlugin> installPlugin(ctkPluginContext* pc, const QString& plugin)
-  { 
-    qDebug() << "installPlugin(" << plugin << ")";
-    QFileInfo pluginInfo(plugin);
-    if (pluginInfo.exists() && pluginInfo.isFile() &&
-        QLibrary::isLibrary(pluginInfo.absoluteFilePath()))
-    {
-      return pc->installPlugin(QUrl::fromLocalFile(pluginInfo.absoluteFilePath()));
-    }
-    else
-    {
-      QString testPluginDir = pc->getProperty("pluginfw.testDir").toString();
-      QFileInfo testDirInfo(testPluginDir);
-      if (!testDirInfo.exists() || !testDirInfo.isDir())
-      {
-        throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir));
-      }
 
-      QStringList libFilter;
-      libFilter << "*.dll" << "*.so" << "*.dylib";
-      QDirIterator dirIter(testDirInfo.absoluteFilePath(), libFilter, QDir::Files);
-      while (dirIter.hasNext())
-      {
-        QString lib = dirIter.next();
-        if (dirIter.fileName().contains(plugin))
-        {
-          return pc->installPlugin(QUrl::fromLocalFile(lib));
-        }
-      }
+public:
 
-      throw ctkPluginException(QString("No plugin %1 in %2").arg(plugin).arg(testPluginDir));
-    }
-  }
+  static QSharedPointer<ctkPlugin> installPlugin(ctkPluginContext* pc, const QString& plugin);
 };
 
 #endif // CTKPLUGINFRAMEWORKTESTUTIL_H

+ 27 - 2
Libs/PluginFramework/Testing/FrameworkTest/CMakeLists.txt

@@ -31,8 +31,33 @@ ctkMacroBuildPlugin(
   MOC_SRCS ${PLUGIN_MOC_SRCS}
   UI_FORMS ${PLUGIN_UI_FORMS}
   RESOURCES ${PLUGIN_resources}
-  TARGET_LIBRARIES ${PLUGIN_target_libraries}
+  TARGET_LIBRARIES ${PLUGIN_target_libraries} ${fwtestutil_lib}
   TEST_PLUGIN
 )
 
-ADD_DEPENDENCIES(${PROJECT_NAME} ${test_plugins})
+ADD_DEPENDENCIES(${PROJECT_NAME} ${fwtest_plugins})
+
+
+# =========== Build the test executable ===============
+SET(SRCS
+  ctkPluginFrameworkTestMain.cpp
+)
+
+SET(MOC_SRCS )
+
+SET(MY_MOC_CXX )
+
+#QT4_WRAP_CPP(MY_MOC_CXX ${MOC_SRCS})
+
+SET(test_executable ${fw_lib}CppTests)
+
+ADD_EXECUTABLE(${test_executable} ${SRCS} ${MY_MOC_CXX})
+TARGET_LINK_LIBRARIES(${test_executable}
+  ${fw_lib}
+  ${fwtestutil_lib}
+)
+
+ADD_DEPENDENCIES(${test_executable} ${PROJECT_NAME})
+
+ADD_TEST(${fw_lib}Tests ${CPP_TEST_PATH}/${test_executable})
+SET_PROPERTY(TEST ${fw_lib}Tests PROPERTY LABELS ${fw_lib})

+ 57 - 0
Libs/PluginFramework/Testing/FrameworkTest/ctkPluginFrameworkTestMain.cpp

@@ -0,0 +1,57 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) 2010 German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#include <QCoreApplication>
+
+
+#include <ctkPluginConstants.h>
+
+#include "ctkPluginFrameworkTestRunner.h"
+
+
+int main(int argc, char** argv)
+{
+  QCoreApplication app(argc, argv);
+
+  ctkPluginFrameworkTestRunner testRunner;
+
+  app.setOrganizationName("CTK");
+  app.setOrganizationDomain("commontk.org");
+  app.setApplicationName("ctkPluginFrameworkCppTests");
+
+  QString pluginDir;
+#ifdef CMAKE_INTDIR
+  pluginDir = qApp->applicationDirPath() + "/../test_plugins/" CMAKE_INTDIR "/";
+#else
+  pluginDir = qApp->applicationDirPath() + "/test_plugins/";
+#endif
+
+  testRunner.addPluginPath(pluginDir, false);
+  testRunner.addPlugin(pluginDir, "org_commontk_pluginfwtest");
+  testRunner.startPluginOnRun("org.commontk.pluginfwtest");
+
+  ctkProperties fwProps;
+  fwProps.insert(ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN, ctkPluginConstants::FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT);
+  fwProps.insert("pluginfw.testDir", pluginDir);
+
+  testRunner.init(fwProps);
+  return testRunner.run(argc, argv);
+}

+ 1 - 0
Libs/PluginFramework/Testing/FrameworkTest/ctkPluginFrameworkTestSuite.cpp

@@ -24,6 +24,7 @@
 #include <ctkPluginFrameworkTestUtil.h>
 #include <ctkPluginContext.h>
 #include <ctkPluginConstants.h>
+#include <ctkPluginException.h>
 #include <ctkServiceException.h>
 
 #include <QTest>

+ 1 - 1
Libs/PluginFramework/Testing/TestPlugins/CMakeLists.txt

@@ -1,3 +1,3 @@
-foreach(test_plugin ${test_plugins})
+foreach(test_plugin ${fwtest_plugins})
   ADD_SUBDIRECTORY(${test_plugin})
 endforeach()

Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/ctkTestPluginA2.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/ctkTestPluginA2Activator.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Activator.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/ctkTestPluginA2Activator_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Activator_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/ctkTestPluginA2Service.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2Service.h


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/ctkTestPluginA2_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/ctkTestPluginA2_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/manifest_headers.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/manifest_headers.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginA2_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA2_test/target_libraries.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/ctkTestPluginA.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginA.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/ctkTestPluginAActivator.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAActivator.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/ctkTestPluginAActivator_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAActivator_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/ctkTestPluginAService.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginAService.h


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/ctkTestPluginA_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/ctkTestPluginA_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/manifest_headers.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/manifest_headers.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginA_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginA_test/target_libraries.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginD_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginD_test/ctkTestPluginD.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/ctkTestPluginD.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginD_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/target_libraries.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/ctkActivatorSL1.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkActivatorSL1.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/ctkActivatorSL1_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkActivatorSL1_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/ctkFooService.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/ctkFooService.h


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/manifest_headers.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/manifest_headers.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL1_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL1_test/target_libraries.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL3_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginSL3_test/ctkActivatorSL3.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/ctkActivatorSL3.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginSL3_test/ctkActivatorSL3_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/ctkActivatorSL3_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginSL3_test/manifest_headers.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/manifest_headers.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL3_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL3_test/target_libraries.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL4_test/CMakeLists.txt → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/CMakeLists.txt


Libs/PluginFramework/Testing/TestPlugins/pluginSL4_test/ctkActivator.cpp → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/ctkActivator.cpp


Libs/PluginFramework/Testing/TestPlugins/pluginSL4_test/ctkActivator_p.h → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/ctkActivator_p.h


Libs/PluginFramework/Testing/TestPlugins/pluginSL4_test/manifest_headers.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/manifest_headers.cmake


Libs/PluginFramework/Testing/TestPlugins/pluginSL4_test/target_libraries.cmake → Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginSL4_test/target_libraries.cmake