Files
AnyPS5/core/libs/tests/MsgDialogRequest.cpp
T
MarcZX10 abca7499a4 test(libSceMsgDialog): cover the dialog request
msg_dialog_request_tests checks the buttons, focus and cancel button of the four
presented button types, the decoded message, and that other button types, modes
and parameters without a user message or a message pointer are refused without
touching the output.
2026-10-29 14:06:13 +00:00

64 lines
3.4 KiB
C++

#include "prx/libSceMsgDialog/include/MsgDialogRequest.hpp"
#include <cstdio>
#include <cstdlib>
namespace {
void Require(bool value, const char* what) {
if (!value) {
std::fprintf(stderr, "msg_dialog_request: %s\n", what);
std::abort();
}
}
MsgDialog::ParsedParam Parsed(int buttonType, const char* text = "Question?") {
MsgDialog::ParsedParam parsed;
parsed.hasUserMessage = true;
parsed.hasText = true;
parsed.buttonType = buttonType;
parsed.text = text;
return parsed;
}
}
int main() {
ModalDialogRequest request;
Require(MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeOk), request), "OK was refused");
Require(request.message == u"Question?" && request.buttons.size() == 1 && request.buttons[0] == u"OK", "OK buttons");
Require(request.focus == 0 && request.cancel == 0, "OK focus and cancel");
Require(MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeYesNo), request), "Yes and No was refused");
Require(request.buttons.size() == 2 && request.buttons[0] == u"Yes" && request.buttons[1] == u"No", "Yes and No buttons");
Require(request.focus == 0 && request.cancel == 1, "Yes and No focus and cancel");
Require(MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeOkCancel), request), "OK and Cancel was refused");
Require(request.buttons.size() == 2 && request.buttons[0] == u"OK" && request.buttons[1] == u"Cancel", "OK and Cancel buttons");
Require(request.focus == 0 && request.cancel == 1, "OK and Cancel focus and cancel");
Require(MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeYesNoFocusNo), request), "Yes and No with focus on No was refused");
Require(request.buttons.size() == 2 && request.focus == 1 && request.cancel == 1, "Yes and No with focus on No");
Require(MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeOk, "caf\xC3\xA9"), request) && request.message == u"café", "the message is not decoded");
const ModalDialogRequest kept = request;
Require(!MsgDialog::BuildRequest(Parsed(MsgDialog::ButtonTypeNone), request), "a dialog without buttons was presented");
Require(!MsgDialog::BuildRequest(Parsed(5), request), "an unknown button type was presented");
Require(!MsgDialog::BuildRequest(Parsed(-1), request), "a negative button type was presented");
MsgDialog::ParsedParam progress = Parsed(MsgDialog::ButtonTypeOk);
progress.mode = MsgDialog::ModeProgressBar;
Require(!MsgDialog::BuildRequest(progress, request), "a progress bar was presented");
MsgDialog::ParsedParam system = Parsed(MsgDialog::ButtonTypeOk);
system.mode = MsgDialog::ModeSystemMsg;
Require(!MsgDialog::BuildRequest(system, request), "a system message was presented");
MsgDialog::ParsedParam noMessage = Parsed(MsgDialog::ButtonTypeOk);
noMessage.hasText = false;
Require(!MsgDialog::BuildRequest(noMessage, request), "a dialog without a message pointer was presented");
MsgDialog::ParsedParam noUser = Parsed(MsgDialog::ButtonTypeOk);
noUser.hasUserMessage = false;
Require(!MsgDialog::BuildRequest(noUser, request), "a dialog without a user message was presented");
Require(request.message == kept.message && request.buttons == kept.buttons && request.focus == kept.focus, "a refused request changed the output");
Require(MsgDialog::ButtonIdOf(0) == MsgDialog::ButtonIdOk && MsgDialog::ButtonIdOf(1) == MsgDialog::ButtonIdNo, "button ids");
}