Verify rendered control sizes and muted stream startup

This commit is contained in:
evgeny committed 2026-10-28 13:57:05 +01:00
1 parent 287b54b283
commit 7be5c8bd0b
1 file changed
+33
@@ -492,6 +492,15 @@ private slots:
auto* audio = menu(controls, "streamAudioSource");
choose(audio, QVariant()); QVERIFY(!chosen(audio).isValid()); QVERIFY(!sound->isChecked());
choose(audio, QString()); QVERIFY(chosen(audio).isValid()); QVERIFY(sound->isChecked());
QVERIFY(sound->isEnabled()); QSignalSpy errors(&engine, &StreamPublishEngine::errorOccurred);
QSignalSpy settings(&controls, &StreamPublishWindow::settingsChanged);
QTest::mouseClick(sound, Qt::LeftButton); QVERIFY(!sound->isChecked()); QVERIFY(!engine.active()); QVERIFY(errors.isEmpty());
QVERIFY(!settings.isEmpty()); const QString mutedSettings = settings.last().front().toString();
QVERIFY(QJsonDocument::fromJson(mutedSettings.toUtf8()).object().value("muted").toBool());
choose(menu(controls, "streamVideoBitrate"), 0); QVERIFY(!sound->isChecked());
StreamPublishEngine reopenedEngine; StreamPublishWindow reopened(&reopenedEngine, group, nullptr, mutedSettings);
QVERIFY(!reopened.findChild<QToolButton*>("streamSound")->isChecked());
QTest::mouseClick(sound, Qt::LeftButton); QVERIFY(sound->isChecked()); QVERIFY(errors.isEmpty());
auto* resolution = menu(controls, "streamVideoResolution"); auto* fps = menu(controls, "streamVideoFps");
for (auto* submenu : {resolution, fps, qp, audio}) {
QVERIFY(!submenu->actions().first()->text().isEmpty()); QVERIFY(!submenu->actions().first()->isCheckable());
@@ -514,6 +523,30 @@ private slots:
}
}
}
void initiallyMutedStream() {
#if defined(HAVE_STREAM_CAPTURE) && defined(TEST_NULL_AUDIO)
if (!qEnvironmentVariableIsSet("UTUN_TEST_SCREEN_CAPTURE")) QSKIP("Run under isolated Xvfb");
QVERIFY(SoundManager::instance()->init());
StreamPublishEngine engine; StreamPublishConfig config; config.startMuted = true;
config.video.width = 320; config.video.height = 180; config.video.fps = 15;
for (const auto& source : engine.sources()) if (source.kind == StreamVideoSource::Screen && source.screen) {
config.source = source; break;
}
QVERIFY(config.source.screen);
connect(&engine, &StreamPublishEngine::softwareEncodingRequested, &engine,
[&engine](uint64_t generation) { engine.answerSoftwareEncoding(generation, true); });
QVERIFY(engine.start(group, config)); QVERIFY(engine.muted());
stream_member_state member{};
QTRY_VERIFY_WITH_TIMEOUT(stream_member_load(inst, group, inst->node_id, &member, nullptr) == STREAM_OK && member.published, 5000);
QVERIFY(!member.audio_enabled); uint64_t epoch = member.source.source_epoch;
engine.setMuted(false); QVERIFY(!engine.muted());
QTRY_VERIFY_WITH_TIMEOUT(stream_member_load(inst, group, inst->node_id, &member, nullptr) == STREAM_OK && member.audio_enabled, 2000);
QCOMPARE(member.source.source_epoch, epoch);
engine.stop(); QTRY_VERIFY_WITH_TIMEOUT(!engine.active(), 4000);
#else
QSKIP("Capture and null audio are required");
#endif
}
void nativeScreenCapture_data() {
QTest::addColumn<int>("codec");
QTest::newRow("h264") << int(STREAM_MEDIA_H264);