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