text: // Copyright (c) 2009-2016 The Bitcoin Core developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #if defined(HAVE_CONFIG_H)
  #include "config/bitcoin-config.h"
  #endif
  
  #include "chainparams.h"
  #include "rpcnestedtests.h"
  #include "util.h"
  #include "uritests.h"
  #include "compattests.h"
  
  #ifdef ENABLE_WALLET
  #include "paymentservertests.h"
  #include "wallettests.h"
  #endif
  
  #include <QApplication>
  #include <QObject>
  #include <QTest>
  
  #include <openssl/ssl.h>
  
  #if defined(QT_STATICPLUGIN)
  #include <QtPlugin>
  #if QT_VERSION < 0x050000
  Q_IMPORT_PLUGIN(qcncodecs)
  Q_IMPORT_PLUGIN(qjpcodecs)
  Q_IMPORT_PLUGIN(qtwcodecs)
  Q_IMPORT_PLUGIN(qkrcodecs)
  #else
  #if defined(QT_QPA_PLATFORM_MINIMAL)
  Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin);
  #endif
  #if defined(QT_QPA_PLATFORM_XCB)
  Q_IMPORT_PLUGIN(QXcbIntegrationPlugin);
  #elif defined(QT_QPA_PLATFORM_WINDOWS)
  Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
  #elif defined(QT_QPA_PLATFORM_COCOA)
  Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin);
  #endif
  #endif
  #endif
  
  extern void noui_connect();
  
  // This is all you need to run all the tests
  int main(int argc, char *argv[])
  {
      SetupEnvironment();
      SetupNetworking();
      SelectParams(CBaseChainParams::MAIN);
      noui_connect();
      ClearDatadirCache();
      fs::path pathTemp = fs::temp_directory_path() / strprintf("test_sagecoin-qt_%lu_%i", (unsigned long)GetTime(), (int)GetRand(100000));
      fs::create_directories(pathTemp);
      gArgs.ForceSetArg("-datadir", pathTemp.string());
  
      bool fInvalid = false;
  
      // Prefer the "minimal" platform for the test instead of the normal default
      // platform ("xcb", "windows", or "cocoa") so tests can't unintentially
      // interfere with any background GUIs and don't require extra resources.
      #if defined(WIN32)
          _putenv_s("QT_QPA_PLATFORM", "minimal");
      #else
          setenv("QT_QPA_PLATFORM", "minimal", 0);
      #endif
  
      // Don't remove this, it's needed to access
      // QApplication:: and QCoreApplication:: in the tests
      QApplication app(argc, argv);
      app.setApplicationName("SageCoin-Qt-test");
  
      SSL_library_init();
  
      URITests test1;
      if (QTest::qExec(&test1) != 0) {
          fInvalid = true;
      }
  #ifdef ENABLE_WALLET
      PaymentServerTests test2;
      if (QTest::qExec(&test2) != 0) {
          fInvalid = true;
      }
  #endif
      RPCNestedTests test3;
      if (QTest::qExec(&test3) != 0) {
          fInvalid = true;
      }
      CompatTests test4;
      if (QTest::qExec(&test4) != 0) {
          fInvalid = true;
      }
  #ifdef ENABLE_WALLET
      WalletTests test5;
      if (QTest::qExec(&test5) != 0) {
          fInvalid = true;
      }
  #endif
  
      fs::remove_all(pathTemp);
  
      return fInvalid;
  }
  