use prosaic_core::{Context, Engine, Session, Strictness, Value, Variation};
use prosaic_grammar_en::English;
fn engine() -> Engine {
Engine::new(English::new())
.strictness(Strictness::Strict)
.variation(Variation::Fixed)
}
#[test]
fn rule_1_single_entity_pronominalizes_normally() {
let mut engine = engine();
engine
.register_template("t", "{name|refer} was modified")
.unwrap();
let mut session = Session::new();
let mut ctx = Context::new();
ctx.insert("entity_type", Value::String("class".into()));
ctx.insert("name", Value::String("Foo".into()));
let r1 = engine.render(&mut session, "t", &ctx).unwrap();
let r2 = engine.render(&mut session, "t", &ctx).unwrap();
assert!(r1.contains("Foo"), "r1 should contain Foo; got: {r1}");
assert!(
r2.to_lowercase().starts_with("it "),
"expected pronoun for single-entity continuation; got: {r2}"
);
}
#[test]
fn rule_1_demotes_pronoun_when_referent_not_cb() {
let mut engine = engine();
engine
.register_template("t", "{name|refer} was modified")
.unwrap();
let mut session = Session::new();
let mut c_foo = Context::new();
c_foo.insert("entity_type", Value::String("class".into()));
c_foo.insert("name", Value::String("Foo".into()));
let mut c_bar = Context::new();
c_bar.insert("entity_type", Value::String("class".into()));
c_bar.insert("name", Value::String("Bar".into()));
let _r1 = engine.render(&mut session, "t", &c_foo).unwrap(); let _r2 = engine.render(&mut session, "t", &c_bar).unwrap(); let r3 = engine.render(&mut session, "t", &c_bar).unwrap();
assert!(
!r3.to_lowercase().starts_with("it"),
"Rule 1 should demote Bar to ShortName (Cb is Foo); got: {r3}"
);
assert!(r3.contains("Bar"), "expected ShortName 'Bar'; got: {r3}");
}
#[test]
fn rule_1_resets_cb_on_session_reset() {
let mut engine = engine();
engine
.register_template("t", "{name|refer} was modified")
.unwrap();
let mut session = Session::new();
let mut ctx = Context::new();
ctx.insert("entity_type", Value::String("class".into()));
ctx.insert("name", Value::String("Foo".into()));
engine.render(&mut session, "t", &ctx).unwrap();
session.reset();
let r = engine.render(&mut session, "t", &ctx).unwrap();
assert!(
r.contains("The class Foo") || r.contains("the class Foo"),
"post-reset should produce full reference form; got: {r}"
);
}