/
githubmirror
/
bitcoin
Обзор
Документация
Войти
/
githubmirror
/
bitcoin
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/qt/test/apptests.cpp
102 строки
3 KB
Hennadii Stepanov
qt, test: Enable tests on macOS with `minimal` QPA plugin
20 июл 2026, 17:09
Не верифицирован
20 июл 2026, 17:09
fd59d68
Код
Авторство
О чём код?
// Copyright (c) 2018-present The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include <qt/test/apptests.h> #include <chainparams.h> #include <key.h> #include <logging.h> #include <qt/bitcoin.h> #include <qt/bitcoingui.h> #include <qt/networkstyle.h> #include <qt/rpcconsole.h> #include <test/util/setup_common.h> #include <validation.h> #include <QAction> #include <QLineEdit> #include <QRegularExpression> #include <QScopedPointer> #include <QSignalSpy> #include <QString> #include <QTest> #include <QTextEdit> #include <QtGlobal> #include <QtTest/QtTestWidgets> #include <QtTest/QtTestGui> namespace { //! Regex find a string group inside of the console output QString FindInConsole(const QString& output, const QString& pattern) { const QRegularExpression re(pattern); return re.match(output).captured(1); } //! Call getblockchaininfo RPC and check first field of JSON output. void TestRpcCommand(RPCConsole* console) { QTextEdit* messagesWidget = console->findChild<QTextEdit*>("messagesWidget"); QLineEdit* lineEdit = console->findChild<QLineEdit*>("lineEdit"); QSignalSpy mw_spy(messagesWidget, &QTextEdit::textChanged); QVERIFY(mw_spy.isValid()); QTest::keyClicks(lineEdit, "getblockchaininfo"); QTest::keyClick(lineEdit, Qt::Key_Return); QVERIFY(mw_spy.wait(1000)); QCOMPARE(mw_spy.count(), 4); const QString output = messagesWidget->toPlainText(); const QString pattern = QStringLiteral("\"chain\": \"(\\w+)\""); QCOMPARE(FindInConsole(output, pattern), QString("regtest")); } } // namespace //! Entry point for BitcoinApplication tests. void AppTests::appTests() { qRegisterMetaType<interfaces::BlockAndHeaderTipInfo>("interfaces::BlockAndHeaderTipInfo"); m_app.parameterSetup(); QVERIFY(m_app.createOptionsModel(/*resetSettings=*/true)); QScopedPointer<const NetworkStyle> style(NetworkStyle::instantiate(Params().GetChainType())); m_app.setupPlatformStyle(); m_app.createWindow(style.data()); connect(&m_app, &BitcoinApplication::windowShown, this, &AppTests::guiTests); expectCallback("guiTests"); m_app.baseInitialize(); m_app.requestInitialize(); m_app.exec(); m_app.requestShutdown(); m_app.exec(); // Reset global state to avoid interfering with later tests. LogInstance().DisconnectTestLogger(); } //! Entry point for BitcoinGUI tests. void AppTests::guiTests(BitcoinGUI* window) { HandleCallback callback{"guiTests", *this}; connect(window, &BitcoinGUI::consoleShown, this, &AppTests::consoleTests); expectCallback("consoleTests"); QAction* action = window->findChild<QAction*>("openRPCConsoleAction"); action->activate(QAction::Trigger); } //! Entry point for RPCConsole tests. void AppTests::consoleTests(RPCConsole* console) { HandleCallback callback{"consoleTests", *this}; TestRpcCommand(console); } //! Destructor to shut down after the last expected callback completes. AppTests::HandleCallback::~HandleCallback() { auto& callbacks = m_app_tests.m_callbacks; auto it = callbacks.find(m_callback); assert(it != callbacks.end()); callbacks.erase(it); if (callbacks.empty()) { m_app_tests.m_app.exit(0); } }