mirror of
https://github.com/Mudlet/Mudlet
synced 2026-08-13 18:26:27 -04:00
198 lines
6 KiB
C++
198 lines
6 KiB
C++
|
|
#include <QTest>
|
|
#include "TMxpSendTagHandler.h"
|
|
#include "TMxpStubClient.h"
|
|
#include <TMxpTagParser.h>
|
|
#include <TMxpTagProcessor.h>
|
|
#include <TMxpProcessor.h>
|
|
|
|
class TMxpSendTagHandlerTest : public QObject {
|
|
Q_OBJECT
|
|
|
|
private:
|
|
|
|
private slots:
|
|
void testSendHrefUTF8FromMxpProcessor()
|
|
{
|
|
// issue #4368
|
|
TMxpStubClient stub;
|
|
TMxpProcessor processor(&stub);
|
|
|
|
std::string input = "<SEND href=\"áéíóúñ\" >test link: áéíóúñ</SEND>";
|
|
for (char &ch : input) {
|
|
processor.processMxpInput(ch);
|
|
}
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "send([[áéíóúñ]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "áéíóúñ");
|
|
|
|
}
|
|
|
|
void testSendHrefUTF8()
|
|
{
|
|
// issue #4368
|
|
QString input = "<SEND href=\"áéíóúñ\" >test link: áéíóúñ</SEND>";
|
|
|
|
TMxpTagParser parser;
|
|
TMxpTagProcessor processor;
|
|
TMxpStubClient stub;
|
|
|
|
auto nodes = parser.parseToMxpNodeList(input, false);
|
|
for (const auto &node : nodes) {
|
|
processor.handleNode(processor, stub, node.get());
|
|
}
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "send([[áéíóúñ]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "áéíóúñ");
|
|
}
|
|
|
|
void testStaticText()
|
|
{
|
|
// <SEND "tell Zugg " PROMPT>Zugg</SEND>
|
|
TMxpStubContext ctx;
|
|
TMxpStubClient stub;
|
|
|
|
TMxpTagParser parser;
|
|
MxpStartTag* startTag = parser.parseStartTag("<SEND \"tell Zugg \" PROMPT>");
|
|
MxpEndTag* endTag = parser.parseEndTag("</SEND>");
|
|
|
|
TMxpSendTagHandler sendTagHandler;
|
|
TMxpTagHandler& tagHandler = sendTagHandler;
|
|
tagHandler.handleTag(ctx, stub, startTag);
|
|
tagHandler.handleContent("Zugg");
|
|
tagHandler.handleTag(ctx, stub, endTag);
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "printCmdLine([[tell Zugg ]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "tell Zugg ");
|
|
}
|
|
|
|
void testSimpleSend()
|
|
{
|
|
// <SEND>north</SEND>
|
|
TMxpStubContext ctx;
|
|
TMxpStubClient stub;
|
|
|
|
MxpStartTag startTag("SEND");
|
|
MxpEndTag endTag("SEND");
|
|
|
|
TMxpSendTagHandler sendTagHandler;
|
|
TMxpTagHandler& tagHandler = sendTagHandler;
|
|
|
|
tagHandler.handleTag(ctx, stub, &startTag);
|
|
tagHandler.handleContent("north");
|
|
tagHandler.handleTag(ctx, stub, &endTag);
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "send([[north]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "north");
|
|
}
|
|
|
|
void testSendPrompt()
|
|
{
|
|
// <SEND href="&text;" PROMPT>north</SEND>
|
|
TMxpStubContext ctx;
|
|
TMxpStubClient stub;
|
|
|
|
TMxpTagParser parser;
|
|
MxpStartTag* startTag = parser.parseStartTag("<SEND href=\"&text;\" PROMPT>");
|
|
MxpEndTag* endTag = parser.parseEndTag("</SEND>");
|
|
|
|
TMxpSendTagHandler sendTagHandler;
|
|
TMxpTagHandler& tagHandler = sendTagHandler;
|
|
tagHandler.handleTag(ctx, stub, startTag);
|
|
tagHandler.handleContent("north");
|
|
tagHandler.handleTag(ctx, stub, endTag);
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "printCmdLine([[north]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "north");
|
|
}
|
|
|
|
void testSendHrefTextEntity() {
|
|
// Example from Age of Elements
|
|
QString input = "<send 'push &text;' HINT='push button'>button</send>";
|
|
|
|
TMxpTagParser parser;
|
|
TMxpTagProcessor processor;
|
|
TMxpStubClient stub;
|
|
|
|
|
|
auto nodes = parser.parseToMxpNodeList(input, false);
|
|
for (const auto& node : nodes) {
|
|
processor.handleNode(processor, stub, node.get());
|
|
}
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "send([[push button]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "push button");
|
|
}
|
|
|
|
void testResolvingEntity()
|
|
{
|
|
TMxpStubContext ctx;
|
|
TMxpStubClient stub;
|
|
|
|
ctx.getEntityResolver().registerEntity("&charName;", "Gandalf");
|
|
|
|
TMxpTagParser parser;
|
|
MxpStartTag* startTag = parser.parseStartTag("<SEND href=\"say I am &charName;\">");
|
|
MxpEndTag* endTag = parser.parseEndTag("</SEND>");
|
|
|
|
TMxpSendTagHandler sendTagHandler;
|
|
TMxpTagHandler& tagHandler = sendTagHandler;
|
|
tagHandler.handleTag(ctx, stub, startTag);
|
|
tagHandler.handleContent("TAG CONTENT");
|
|
tagHandler.handleTag(ctx, stub, endTag);
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 1);
|
|
QCOMPARE(stub.mHrefs[0], "send([[say I am Gandalf]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 1);
|
|
QCOMPARE(stub.mHints[0], "say I am Gandalf");
|
|
}
|
|
|
|
void testSendHrefHintMismatch() {
|
|
// Example from starmourn on WARES command from NPCs
|
|
// <SEND HREF="PROBE SUSPENDERS30901|BUY SUSPENDERS30901" hint="Click to see command menu">30901</SEND>
|
|
TMxpStubContext ctx;
|
|
TMxpStubClient stub;
|
|
|
|
TMxpTagParser parser;
|
|
MxpStartTag* startTag = parser.parseStartTag(R"(<SEND HREF="PROBE SUSPENDERS30901|BUY SUSPENDERS30901" hint="Click to see command menu">)");
|
|
MxpEndTag* endTag = parser.parseEndTag("</SEND>");
|
|
|
|
TMxpSendTagHandler sendTagHandler;
|
|
TMxpTagHandler& tagHandler = sendTagHandler;
|
|
tagHandler.handleTag(ctx, stub, startTag);
|
|
tagHandler.handleContent("3091");
|
|
tagHandler.handleTag(ctx, stub, endTag);
|
|
|
|
QCOMPARE(stub.mHrefs.size(), 2);
|
|
QCOMPARE(stub.mHrefs[0], "send([[PROBE SUSPENDERS30901]])");
|
|
QCOMPARE(stub.mHrefs[1], "send([[BUY SUSPENDERS30901]])");
|
|
|
|
QCOMPARE(stub.mHints.size(), 2);
|
|
QCOMPARE(stub.mHints[0], "PROBE SUSPENDERS30901");
|
|
QCOMPARE(stub.mHints[1], "BUY SUSPENDERS30901");
|
|
}
|
|
|
|
};
|
|
|
|
#include "TMxpSendTagHandlerTest.moc"
|
|
QTEST_MAIN(TMxpSendTagHandlerTest)
|
|
|