From 5d85ea3567fa2c187a0ca14c080a91730ac5ebd4 Mon Sep 17 00:00:00 2001 From: MarcZX10 <67475268+MarcZX10@users.noreply.github.com> Date: Wed, 28 Oct 2026 11:14:39 +0000 Subject: [PATCH] test(libSceMsgDialog.native): cover cancelling and the automatic answer guest_msg_dialog_native checks that a cancel input answers No in a Yes and No dialog and OK in an OK-only dialog, that dialogs without buttons, progress bars and system messages finish at open with button 1 and show nothing, and that a dialog opened with no presenter finishes at open with button 1 even when focused on No. --- core/libs/tests/GuestMsgDialogNative.cpp | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/core/libs/tests/GuestMsgDialogNative.cpp b/core/libs/tests/GuestMsgDialogNative.cpp index 7990954d25..6641b3f753 100644 --- a/core/libs/tests/GuestMsgDialogNative.cpp +++ b/core/libs/tests/GuestMsgDialogNative.cpp @@ -47,6 +47,43 @@ ModalDialogState Session() { return ModalDialogPoll_nid_postfix(chosen); } +void CancelAndFallbacks() { + MsgDialogResult result{}; + UserMessage yesNo{MsgDialog::ButtonTypeYesNo, 0, "Continue?"}; + UserParam param(MsgDialog::ModeUserMsg, &yesNo); + ModalDialogSetPresenter_nid_postfix(true); + Require(sceMsgDialogInitialize() == 0); + Require(sceMsgDialogOpen(¶m) == 0); + ModalDialogPublishInput_nid_postfix(ModalDialogInputKind::Cancel); + Require(sceMsgDialogGetStatus() == kStatusFinished); + Require(sceMsgDialogGetResult(&result) == 0 && result.button_id == kButtonIdNo); + + UserMessage okOnly{MsgDialog::ButtonTypeOk, 0, "Saved"}; + UserParam okParam(MsgDialog::ModeUserMsg, &okOnly); + Require(sceMsgDialogOpen(&okParam) == 0 && sceMsgDialogGetStatus() == kStatusRunning); + ModalDialogPublishInput_nid_postfix(ModalDialogInputKind::Cancel); + Require(sceMsgDialogGetStatus() == kStatusFinished); + Require(sceMsgDialogGetResult(&result) == 0 && result.button_id == kButtonIdOk); + + UserMessage none{MsgDialog::ButtonTypeNone, 0, "Wait"}; + UserParam noneParam(MsgDialog::ModeUserMsg, &none); + Require(sceMsgDialogOpen(&noneParam) == 0 && sceMsgDialogGetStatus() == kStatusFinished && Session() != ModalDialogState::Showing); + UserParam progress(MsgDialog::ModeProgressBar, &yesNo); + Require(sceMsgDialogOpen(&progress) == 0 && sceMsgDialogGetStatus() == kStatusFinished && Session() != ModalDialogState::Showing); + UserParam system(MsgDialog::ModeSystemMsg, &yesNo); + Require(sceMsgDialogOpen(&system) == 0 && sceMsgDialogGetStatus() == kStatusFinished && Session() != ModalDialogState::Showing); + result = MsgDialogResult{}; + Require(sceMsgDialogGetResult(&result) == 0 && result.button_id == kButtonIdOk); + + ModalDialogSetPresenter_nid_postfix(false); + UserMessage focusNo{MsgDialog::ButtonTypeYesNoFocusNo, 0, "Delete?"}; + UserParam focusParam(MsgDialog::ModeUserMsg, &focusNo); + Require(sceMsgDialogOpen(&focusParam) == 0 && sceMsgDialogGetStatus() == kStatusFinished && Session() != ModalDialogState::Showing); + result = MsgDialogResult{}; + Require(sceMsgDialogGetResult(&result) == 0 && result.button_id == kButtonIdOk); + Require(sceMsgDialogTerminate() == 0); +} + void ShownDialog() { UserMessage yesNo{MsgDialog::ButtonTypeYesNo, 0, "Continue?"}; UserParam param(MsgDialog::ModeUserMsg, &yesNo); @@ -132,4 +169,5 @@ int main() { Require(sceMsgDialogGetStatus() == 0); ShownDialog(); + CancelAndFallbacks(); }