Re-seat two picks the #1730 revert and the realm's interface displaced

Two follow-ups to the series, both consequences of the same root cause.

**#2150's OptionsFrame.xml hunk, re-ported.** It cherry-picked with no conflict
only because the botched #1730 resolution had already replaced this fork's
`OptionsFrame.xml` with upstream's, so it applied against upstream's file. The
revert then restored ours and took it with it. Ported by hand here: our rows
write `self.applyFunc` where upstream's write `this.applyFunc`, and inherit
`OptionsCheckboxRowTemplate`/`OptionsDropdownRowTemplate` where upstream's
inherit the `Benilla`-prefixed names. Both `TargetofTarget_Update` applyFuncs
are gone and the reference note comes along.

**#1972's blanket dialog test, scoped to our two dialogs.** The fix — this
page's two confirms declaring `timeout`, `whileDead`, `showAlert` — is right and
stands. Its test asserted a numeric `timeout` on *every* entry in
`StaticPopupDialogs`, which holds for stock 1.12.1 FrameXML but not here: this
fork loads the realm's own interface, whose `StaticPopup.lua` leaves `timeout`
off 73 of its dialogs. Those are the realm's to declare, and failing on them
says nothing about this fix.

benilla-app --lib is back to the 269-failure baseline exactly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-10-25 23:43:52 -06:00
co-authored by Claude Opus 5
parent 7a8765aa52
commit 89ae4699bb
2 changed files with 18 additions and 8 deletions
@@ -3888,7 +3888,12 @@
</OnLoad></Scripts>
</Frame>
<!-- Saved globals in 1.12; the mode greys with its switch
(UIOptionsFrame.lua:697-701). -->
(UIOptionsFrame.lua:697-701). Neither row applies anything:
1.12's options only write the uvars (UIOptionsFrame.lua:65),
and the target frames' OnUpdates show or hide the frame on
the next frame (TargetFrame.lua:492-501). Called from a row,
TargetofTarget_Update would refresh the row's debuffs
(RefreshBuffs(this, ...), TargetFrame.lua:538). -->
<Frame name="$parentRowTargetOfTarget" inherits="OptionsCheckboxRowTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentRowStatusText" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-9"/></Offset></Anchor>
@@ -3897,7 +3902,6 @@
<Scripts><OnLoad>
OptionsGlobalRow_OnLoad(self, "SHOW_TARGET_OF_TARGET",
"Show Target of Target", "OPTION_TOOLTIP_SHOW_TARGET_OF_TARGET")
self.applyFunc = "TargetofTarget_Update"
</OnLoad></Scripts>
</Frame>
<!-- The label is ours, since 1.12 never sets this
@@ -3917,7 +3921,6 @@
{ text = "Party or Raid", value = "4", tip = "OPTION_TOOLTIP_TARGETOFTARGET4" },
{ text = "Always", value = "5", tip = "OPTION_TOOLTIP_TARGETOFTARGET5" },
})
self.applyFunc = "TargetofTarget_Update"
</OnLoad></Scripts>
</Frame>
<!-- PLAYER_FLAGS bits, API rows
@@ -356,8 +356,13 @@ fn the_esc_ladder_closes_the_window_and_the_checkbox_switches_sets() {
}
/// `StaticPopup_Show` copies an entry's `timeout` into `timeleft`, and `StaticPopup_OnUpdate`
/// compares it with 0 every frame (`StaticPopup.lua:1713`), so every entry declares one, as each
/// stock entry does.
/// compares it with 0 every frame (`StaticPopup.lua:1713`), so an entry without one raises there
/// every frame it is up. Both of this page's own confirms declare one.
///
/// Scoped to our two entries, where upstream asserts it of every entry in `StaticPopupDialogs`:
/// that holds for stock 1.12.1 FrameXML, but this fork loads the realm's own interface, whose
/// `StaticPopup.lua` leaves `timeout` off 73 of its dialogs. Those are the realm's to declare,
/// not ours, and failing on them would say nothing about this fix.
#[test]
fn every_dialog_declares_a_timeout() {
benilla_formats::wow_data_or_skip!();
@@ -365,13 +370,15 @@ fn every_dialog_declares_a_timeout() {
let missing = s
.eval::<String>(
"local out = {} \
for which, d in pairs(StaticPopupDialogs) do \
if type(d.timeout) ~= 'number' then table.insert(out, which) end \
for _, which in ipairs({'CONFIRM_DELETING_CHARACTER_SPECIFIC_BINDINGS', \
'CONFIRM_RESET_KEYBINDINGS'}) do \
local d = StaticPopupDialogs[which] \
if not d or type(d.timeout) ~= 'number' then table.insert(out, which) end \
end \
table.sort(out) return table.concat(out, ' ')",
)
.unwrap();
assert_eq!(missing, "", "dialogs with no numeric timeout");
assert_eq!(missing, "", "our dialogs with no numeric timeout");
}
#[test]