34 lines
1.7 KiB
C++
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.");
|
|
}
|