Files
EVEngine/test/dialogue_text.cpp
T

34 lines
1.7 KiB
C++

#include "dialogue/ConversationText.h"
#include "zeroerr/assert.h"
#include "zeroerr/unittest.h"
using namespace eve;
using namespace eve::dialogue;
TEST_CASE("dialogueText.parametersFallbackAndTransforms") {
StateValue bindings = StateValue::object();
REQUIRE(bindings.setPath("speaker.name", StateValue::string("mara")));
REQUIRE(bindings.setPath("listener.name", StateValue::string("Iris")));
REQUIRE(bindings.setPath("location.name", StateValue::string("harbor")));
StateValue locals = StateValue::object();
REQUIRE(locals.setPath("speaker.name", StateValue::string("local mara")));
ConversationTextRenderer renderer;
CHECK(renderer.render("{speaker.name|capitalize} greets {listener.name} at {location.name|upper}.", bindings,
locals) == "Local mara greets Iris at HARBOR.");
CHECK(renderer.render("Welcome, {listener.title??traveler}.", bindings, locals) == "Welcome, traveler.");
CHECK(renderer.render("Keep {unknown.value} visible.", bindings, locals) == "Keep {unknown.value} visible.");
}
TEST_CASE("dialogueText.stateDrivenCharacterTone") {
ConversationTextRenderer renderer;
renderer.addToneRule("speaker.tired", "... ", " ...", "Good", "Fine");
renderer.addToneRule("speaker.formal", "Captain, ", {}, {}, {});
StateValue values = StateValue::object();
CHECK(renderer.render("Good morning.", values, values, [](const std::string& expression) {
return expression == "speaker.tired";
}) == "... Fine morning. ...");
CHECK(renderer.render("Good morning.", values, values, [](const std::string& expression) {
return expression == "speaker.formal";
}) == "Captain, Good morning.");
}