[CrashReporting] Mock dialog, sentry skeleton and CI prerequisites

Mock: DlgCrashReport preview dialog (no account needed, redacted log
preview), CrashReportingMode Ask/Always/Never setting in DebugSettings,
--simulate-crash flag and Help-menu preview entry. Send writes a local
mock JSON only.

Vendor sentry-native 0.17.3 via FetchContent behind
WITH_CRASH_REPORTING (breakpad everywhere, backend none under
sanitizers) plus a CrashReporter facade with early init and post-loop
shutdown. DSN is a placeholder: empty CMake default with
COCKATRICE_SENTRY_DSN env override, so SDK init is skipped and mock
behavior is unchanged until a real DSN is configured.

CI prerequisites riding here so every layer below builds green:
libcurl dev plus CA bundles in the Linux images and CodeQL env, sentry
Qt integration off (its own find_package cannot see the macOS thin Qt
layout), and the StrFunc Using construction makensis requires.

Tests: ctest green, format clean, code plus UI gates PASS.
This commit is contained in:
Lukas Brübach 2026-10-14 08:53:41 +02:00 • committed by GitHub
parent ea6af0048c
commit 6411abfb57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 962 additions and 5 deletions

View file

@ -4,6 +4,7 @@
#include <QDir>
#include <QHash>
#include <QList>
#include <QSettings>
#include <QString>
#include <QStringList>
#include <QTemporaryDir>
@ -367,6 +368,32 @@ TEST_F(SettingsDefaultsTest, Personal_ShowTipsOnStartup_Default)
ASSERT_EQ(s.getShowTipsOnStartup(), true);
}
TEST_F(SettingsDefaultsTest, Personal_CrashReportingMode_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getCrashReportingMode(), PersonalSettings::CrashReportingMode::Ask);
}
TEST_F(SettingsDefaultsTest, Personal_CrashReportingMode_SetAndGet)
{
PersonalSettings s(settingsPath, nullptr);
s.setCrashReportingMode(PersonalSettings::CrashReportingMode::AlwaysSend);
ASSERT_EQ(s.getCrashReportingMode(), PersonalSettings::CrashReportingMode::AlwaysSend);
s.setCrashReportingMode(PersonalSettings::CrashReportingMode::NeverSend);
ASSERT_EQ(s.getCrashReportingMode(), PersonalSettings::CrashReportingMode::NeverSend);
s.setCrashReportingMode(PersonalSettings::CrashReportingMode::Ask);
ASSERT_EQ(s.getCrashReportingMode(), PersonalSettings::CrashReportingMode::Ask);
}
TEST_F(SettingsDefaultsTest, Personal_CrashReportingMode_ClampsCorruptValue)
{
QSettings raw(settingsPath + "personal.ini", QSettings::IniFormat);
raw.setValue("personal/crashReportingMode", 99);
raw.sync();
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getCrashReportingMode(), PersonalSettings::CrashReportingMode::Ask);
}
// --- DownloadSettings ---
TEST_F(SettingsDefaultsTest, Download_PicDownload_Default)