@@ -71,4 +71,89 @@ TEST(Stores, AddStoreHoldRepair_normal)
7171 EXPECT_EQ (1 , item->_ivalue );
7272 EXPECT_EQ (1 , item->_iIvalue );
7373}
74+
75+ TEST (Stores, TownerNameForTalkID_knownTowners)
76+ {
77+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Smith), " griswold" );
78+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Witch), " adria" );
79+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Boy), " wirt" );
80+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Healer), " pepin" );
81+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Storyteller), " cain" );
82+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Tavern), " ogden" );
83+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Drunk), " farnham" );
84+ EXPECT_STREQ (TownerNameForTalkID (TalkID::Barmaid), " gillian" );
85+ }
86+
87+ TEST (Stores, TownerNameForTalkID_subPagesReturnNull)
88+ {
89+ // Sub-pages (buy/sell screens) should not fire StoreOpened
90+ EXPECT_EQ (TownerNameForTalkID (TalkID::None), nullptr );
91+ EXPECT_EQ (TownerNameForTalkID (TalkID::SmithBuy), nullptr );
92+ EXPECT_EQ (TownerNameForTalkID (TalkID::SmithSell), nullptr );
93+ EXPECT_EQ (TownerNameForTalkID (TalkID::SmithRepair), nullptr );
94+ EXPECT_EQ (TownerNameForTalkID (TalkID::WitchBuy), nullptr );
95+ EXPECT_EQ (TownerNameForTalkID (TalkID::Gossip), nullptr );
96+ EXPECT_EQ (TownerNameForTalkID (TalkID::StorytellerIdentify), nullptr );
97+ EXPECT_EQ (TownerNameForTalkID (TalkID::StorytellerIdentifyShow), nullptr );
98+ }
99+
100+ TEST (Stores, RegisterTownerDialogOption_storesOption)
101+ {
102+ ExtraTownerOptions.clear ();
103+
104+ RegisterTownerDialogOption (" farnham" ,
105+ []() { return std::string (" Go to Tiny Town" ); },
106+ []() {});
107+
108+ ASSERT_EQ (ExtraTownerOptions.count (" farnham" ), 1u );
109+ ASSERT_EQ (ExtraTownerOptions.at (" farnham" ).size (), 1u );
110+ EXPECT_EQ (ExtraTownerOptions.at (" farnham" )[0 ].getLabel (), " Go to Tiny Town" );
111+
112+ ExtraTownerOptions.clear ();
113+ }
114+
115+ TEST (Stores, RegisterTownerDialogOption_callsOnSelect)
116+ {
117+ ExtraTownerOptions.clear ();
118+
119+ bool called = false ;
120+ RegisterTownerDialogOption (" farnham" ,
121+ []() { return std::string (" Travel" ); },
122+ [&called]() { called = true ; });
123+
124+ ExtraTownerOptions.at (" farnham" )[0 ].onSelect ();
125+ EXPECT_TRUE (called);
126+
127+ ExtraTownerOptions.clear ();
128+ }
129+
130+ TEST (Stores, RegisterTownerDialogOption_emptyLabelHidesOption)
131+ {
132+ ExtraTownerOptions.clear ();
133+
134+ RegisterTownerDialogOption (" farnham" ,
135+ []() { return std::string (" " ); },
136+ []() {});
137+
138+ ASSERT_EQ (ExtraTownerOptions.at (" farnham" ).size (), 1u );
139+ EXPECT_TRUE (ExtraTownerOptions.at (" farnham" )[0 ].getLabel ().empty ());
140+
141+ ExtraTownerOptions.clear ();
142+ }
143+
144+ TEST (Stores, RegisterTownerDialogOption_multipleTowners)
145+ {
146+ ExtraTownerOptions.clear ();
147+
148+ RegisterTownerDialogOption (" farnham" , []() { return std::string (" A" ); }, []() {});
149+ RegisterTownerDialogOption (" griswold" , []() { return std::string (" B" ); }, []() {});
150+
151+ EXPECT_EQ (ExtraTownerOptions.at (" farnham" ).size (), 1u );
152+ EXPECT_EQ (ExtraTownerOptions.at (" griswold" ).size (), 1u );
153+ EXPECT_EQ (ExtraTownerOptions.at (" farnham" )[0 ].getLabel (), " A" );
154+ EXPECT_EQ (ExtraTownerOptions.at (" griswold" )[0 ].getLabel (), " B" );
155+
156+ ExtraTownerOptions.clear ();
157+ }
158+
74159} // namespace
0 commit comments