File indexing completed on 2024-04-14 14:12:11

0001 /*  KStars UI tests
0002     SPDX-FileCopyrightText: 2020 Eric Dejouhanet <eric.dejouhanet@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef TESTEKOSSIMULATOR_H
0008 #define TESTEKOSSIMULATOR_H
0009 
0010 #include "config-kstars.h"
0011 
0012 #ifdef HAVE_INDI
0013 
0014 #include <QObject>
0015 #include <QString>
0016 #include <QComboBox>
0017 #include <QTimer>
0018 #include <QPushButton>
0019 #include <QTest>
0020 #include "ekos/manager.h"
0021 #include "ekos/auxiliary/opticaltrainmanager.h"
0022 #include "ekos/mount/mount.h"
0023 
0024 #define KTRY_EKOS_SELECT_PROFILE(profile) do { \
0025     QString const p(profile); \
0026     QComboBox* profileCBox = Ekos::Manager::Instance()->findChild<QComboBox*>("profileCombo"); \
0027     QVERIFY(profileCBox != nullptr); \
0028     profileCBox->setCurrentText(p); \
0029     QTRY_COMPARE(profileCBox->currentText(), p); } while(false)
0030 
0031 #define KTRY_EKOS_GADGET(klass, name) klass * const name = Ekos::Manager::Instance()->findChild<klass*>(#name); \
0032     QVERIFY2(name != nullptr, QString(#klass "'%1' does not exist and cannot be used").arg(#name).toStdString().c_str())
0033 
0034 #define KTRY_EKOS_CLICK(button) do { \
0035     QTimer::singleShot(100, Ekos::Manager::Instance(), []() { \
0036         KTRY_EKOS_GADGET(QPushButton, button); \
0037         QVERIFY2(button->isEnabled(), QString("QPushButton '%1' is disabled and cannot be clicked").arg(#button).toStdString().c_str()); \
0038         QTest::mouseClick(button, Qt::LeftButton); }); \
0039     QTest::qWait(200); } while(false)
0040 
0041 #define KTRY_EKOS_START_PROFILE(profile) do { \
0042     KTRY_EKOS_SELECT_PROFILE(profile); \
0043     KTRY_EKOS_CLICK(processINDIB); \
0044     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->indiStatus() == Ekos::Success, 10000); \
0045     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->mountModule() != nullptr, 1000); \
0046     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->mountModule()->slewStatus() != IPState::IPS_ALERT, 1000); \
0047     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->guideModule() != nullptr, 1000); \
0048     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->captureModule() != nullptr, 1000); } while(false)
0049 
0050 #define KTRY_EKOS_START_SIMULATORS() do { \
0051     KTRY_EKOS_START_PROFILE("Simulators"); \
0052     Ekos::OpticalTrainManager::Instance()->close(); \
0053     } while (false)
0054 
0055 #define KTRY_EKOS_STOP_SIMULATORS() do { \
0056     KTRY_EKOS_CLICK(disconnectB); \
0057     KTRY_EKOS_GADGET(QPushButton, processINDIB); \
0058     QTRY_VERIFY_WITH_TIMEOUT(processINDIB->isEnabled(), 5000); \
0059     KTRY_EKOS_CLICK(processINDIB); \
0060     QTRY_VERIFY_WITH_TIMEOUT(Ekos::Manager::Instance()->indiStatus() == Ekos::Idle, 10000); } while(false)
0061 
0062 class TestEkosSimulator : public QObject
0063 {
0064     Q_OBJECT
0065 public:
0066     explicit TestEkosSimulator(QObject *parent = nullptr);
0067 
0068 private slots:
0069     void initTestCase();
0070     void cleanupTestCase();
0071 
0072     void init();
0073     void cleanup();
0074 
0075     void testMountSlew_data();
0076     void testMountSlew();
0077 
0078     void testColorSchemes_data();
0079     void testColorSchemes();
0080 };
0081 
0082 #endif // HAVE_INDI
0083 #endif // TESTEKOSSIMULATOR_H