Skip to content

Anim Tools Test Cases

These are validation scenarios for the WBP-owned Anim Tools panel, not a record of completed test runs. Use the current 18-panel inventory to understand supported actions. The shared dashboard is a summary surface, not a nineteenth tool. General FPS conversion and automatic project-wide animation migration are not implemented.

Create or maintain these Widget Blueprints for repeatable testing:

  • WBP_AT_Clean: two widgets, two simple animations, no known issues.
  • WBP_AT_KeyHeavy: repeated keys, dense keys, default-matching curves, linear-looking curves, and out-of-range keys.
  • WBP_AT_BrokenRefs: renamed/deleted widgets, renamed Blueprint variables/functions/events, stale animation bindings, and stray MovieScene bindings.
  • WBP_AT_Materials: images/borders/rich text using template materials, dynamic material setup in Blueprint, valid and invalid animated material parameters.
  • WBP_AT_StateMachine: animations paired with at least one UWbpAnimStateMachineDefinition, including missing clips, shared clips, invalid transition targets, and curve-atlas states.
  • WBP_AT_Purge: broad track coverage, including transform subchannels, color channels, visibility, enabled, material-like tracks, event tracks, empty tracks, and unknown/custom property tracks.

Every mutating test should verify:

  • An undo transaction is created.
  • Backup behavior follows the current backup settings.
  • The WBP is marked dirty only when data actually changes.
  • The scan result refreshes after apply.
  • Disabled tools do not run during automatic refresh.
  • Go To navigates to the most specific available source.

Setup: Open a Widget Blueprint and focus its editor.

Steps: Open the Widget Blueprint editor’s UI Foundry -> Anim Tools entry or the dockable Anim Tools tab.

Expected: Anim Tools opens as a tab owned by that Widget Blueprint editor and targets that WBP without requiring an asset picker.

Regression checks: The tab should not appear as a generic level-editor tool. The old top asset picker, Use Selected button, Refresh button, and pin toggle should not be present.

Setup: Open Anim Tools for any WBP.

Steps: Disable several tools from Tools: X/Y, close the WBP editor, reopen the WBP, and reopen Anim Tools.

Expected: The same tools remain disabled and hidden from the accordion.

Regression checks: Disabled tools should still be available in the dropdown for re-enabling.

Setup: Enable at least three tools.

Steps: Move a middle tool up and down from the tools dropdown, close and reopen the WBP editor.

Expected: The order is preserved and reflected in the accordion when the dropdown closes.

Regression checks: First tool has disabled up action, last tool has disabled down action, reset order restores the default order.

Setup: Dock Anim Tools beside Sequencer and narrow the tab.

Steps: Resize from wide to narrow widths.

Expected: Health, Findings, and Safe Fixes stack vertically when needed; backup controls wrap; no text overlaps help icons, spinners, or checkboxes.

Regression checks: The panel should remain legible in light and dark editor themes.

Setup: Open WBP_AT_Clean.

Steps: Open Anim Tools with all tools enabled.

Expected: Health reports clean or review-free state, findings count is zero, safe fixes count is zero, and no destructive action is suggested.

Regression checks: Summary should not show stale findings from another WBP.

Setup: Open WBP_AT_KeyHeavy or WBP_AT_BrokenRefs.

Steps: Run the visible scans.

Expected: Health moves to review recommended, findings and safe fix counts match visible tool results, and the recommended next action points to a relevant tool.

Regression checks: Counts update after fixes are applied.

Setup: Open any WBP with a mutating issue.

Steps: Change backup location with the folder picker, change backup file name tokens, toggle Save If Unsaved, then apply a safe fix.

Expected: Backup is created at the configured path with the expected formatted name before mutation.

Regression checks: Invalid backup path blocks mutation with clear feedback unless explicit override behavior exists.

Setup: Open any WBP and change the backup path, name format, Backup Before Apply, and Save If Unsaved values.

Steps: Close and reopen the WBP editor, then reopen Anim Tools.

Expected: Backup settings reload from Anim Tools settings and match the previous values.

Regression checks: Tool enablement/order persistence and backup settings should save together without resetting either group.

Setup: In WBP_AT_KeyHeavy, create an opacity or transform channel with three consecutive identical values.

Steps: Set repeated key threshold to 2, scan repeated keys.

Expected: The run is reported with redundant count equal to run length minus one.

Regression checks: The first key is preserved by default.

Setup: Create one pair of repeated keys and one run of three repeated keys.

Steps: Set threshold to 3, scan.

Expected: Only the run of three is reported.

Regression checks: Changing threshold back to 2 reports both.

Setup: Create near-duplicate float keys with tiny differences.

Steps: Scan with low tolerance, then scan with higher tolerance.

Expected: Low tolerance ignores near-duplicates; high tolerance reports them.

Regression checks: Exact duplicate bool and byte keys are unaffected by float tolerance.

Setup: Scan finds redundant float, bool, byte, color, and transform keys.

Steps: Apply visible safe cleanup.

Expected: Duplicate keys are removed, visible curve shape is preserved, undo restores the removed keys.

Regression checks: Boundary keys are preserved when that safety option is enabled.

Setup: Add float keys whose interpolation/tangent metadata matches the channel default but is explicitly authored.

Steps: Enable default-matching curve detection and scan.

Expected: Findings identify the affected keys and suggested metadata simplification.

Regression checks: Keys with intentionally custom curves are not listed as default-matching.

Setup: Add curved float keys whose sampled result is effectively linear under the motion tolerance.

Steps: Enable effectively linear curve detection and scan.

Expected: Findings show issue type Effectively Linear with max motion difference under tolerance.

Regression checks: Lowering tolerance can move the row to review or hide it.

Setup: Include safe linear-like curves and unsafe/non-finite tangent cases.

Steps: Apply safe tangent normalization.

Expected: Safe rows are normalized; unsafe rows remain review-only.

Regression checks: Undo restores original interpolation metadata.

Setup: WBP_AT_BrokenRefs has widgets, Blueprint variables, functions, and events, some animated and some not.

Steps: Enable all reference filters and scan.

Expected: All present WBP/Blueprint-owned references are listed, not only animated ones.

Regression checks: Built-in widget properties such as render opacity and visibility are not treated as Blueprint variables.

Setup: Rename or delete a function/event/variable referenced by an animation track.

Steps: Scan Blueprint references.

Expected: Missing or possible-rename rows are surfaced with distinct status formatting.

Regression checks: Used, no animated use, missing, and possible rename statuses are distinguishable without relying only on color.

Setup: Ensure at least one referenced function/event track exists.

Steps: Use Go To on a reference usage row.

Expected: The WBP editor navigates to the most specific available source.

Regression checks: Failed navigation reports why rather than silently doing nothing.

Setup: WBP_AT_Materials has a widget using a template material with an animated existing scalar or color parameter.

Steps: Scan material parameters.

Expected: The parameter is classified as valid.

Regression checks: Type is reported correctly when discoverable.

Setup: Rename a material parameter used by an animation track.

Steps: Scan material parameters.

Expected: The parameter is classified as missing and can seed the remapper source field.

Regression checks: Missing status remains legible in light and dark themes.

Setup: Create dynamic material setup in Blueprint using common MID nodes.

Steps: Enable Blueprint MID setup checking and scan.

Expected: Runtime or likely MID setup status is reported with confidence language.

Regression checks: Absence of template material inventory should not automatically produce a false broken result when runtime evidence exists.

Setup: Create one widget path that clearly calls dynamic material creation/fetch and another path that only has indirect material assignment evidence.

Steps: Scan material parameters with Blueprint MID setup checking enabled.

Expected: Findings distinguish confirmed runtime material setup from likely runtime material setup in the evidence text.

Regression checks: Turning off MID setup checking should remove runtime-evidence fallback rows without affecting template-material validation.

Setup: WBP_AT_Materials has tracks using old parameter name GlowAmount and available replacement EmissiveStrength.

Steps: Enter source and replacement names, preview remap.

Expected: Dry-run lists exact affected animations, widgets, and tracks.

Regression checks: Non-matching parameter names are not included.

Setup: Preview has valid rows.

Steps: Apply selected remap.

Expected: MovieScene property names/paths are updated, scan no longer reports the old parameter as missing, undo restores old names.

Regression checks: Material assets themselves are not modified.

Setup: Source appears scalar-like and replacement appears color/vector-like.

Steps: Preview with Compatible Only enabled.

Expected: Row is blocked or marked needs review.

Regression checks: Type override is required before applying incompatible remap.

Setup: Delete or rename a widget that has animation tracks.

Steps: Run Find Binding Matches.

Expected: Stale binding appears with old widget name, affected animation, and candidate replacement if available.

Regression checks: Healthy bindings are not listed as broken.

Setup: Rename Image_Icon to Image_Icon_New with same type and similar hierarchy.

Steps: Find matches, apply high-confidence remap.

Expected: Binding points to the replacement widget and tracks remain intact.

Regression checks: Binding GUID preservation is verified where expected.

Setup: Stale binding has no credible replacement.

Steps: Delete orphaned tracks after preview.

Expected: Orphan tracks are removed through undo transaction.

Regression checks: Confirmation or explicit selection is required.

Setup: Two animations share widgets but one is missing a property track.

Steps: Compare against baseline in Coverage mode.

Expected: Missing and extra tracks are shown per animation.

Regression checks: Identical tracks are summarized as matches.

Setup: Same property is keyed in two animations at different times.

Steps: Compare in Timing mode.

Expected: Timing drift is surfaced with animation, widget, property, and time delta.

Regression checks: Differences Only hides matching rows.

Setup: Same key timing but different values.

Steps: Compare in Value mode.

Expected: Value drift is reported.

Regression checks: Go To opens the selected animation/track source.

Setup: Add a property track with no sections.

Steps: Find unused tracks.

Expected: Track is listed as no sections or empty track.

Regression checks: Track with real keys is not listed.

Setup: Add a section that contains no supported keyed data.

Steps: Find unused tracks.

Expected: Track is listed with reason No Keys.

Regression checks: Unsupported but non-empty tracks are review-only, not safe-delete by default.

Setup: Preview includes safe empty tracks.

Steps: Delete selected safe tracks.

Expected: Tracks are removed, undo restores them, scan count decreases.

Regression checks: Suspicious tracks are not removed by the safe action.

Setup: WBP_AT_BrokenRefs has stale widget bindings, missing material parameter names, and stale property path text.

Steps: Run migration preview.

Expected: Candidates are grouped by reference type and routed to the owner tool.

Regression checks: The runner does not hide the specific repair path behind an opaque one-click operation.

Setup: The Widget Blueprint has one stale widget binding and one stale animated material parameter name.

Steps: Review the aggregated findings, then open the dedicated binding or material parameter remapper for the chosen repair.

Expected: The runner reports and routes the findings. Mutation is performed only through the specialized tool and its reviewed source/target selection.

Regression checks: The runner does not apply a rename manifest or perform automatic project-wide migration.

Setup: Create property keys before the playback start and after playback end.

Steps: Use animation playback range and scan.

Expected: Out-of-range keys are listed with before/after classification.

Regression checks: Keys inside the range are not listed.

Setup: Animation playback range is wide, but desired cleanup range is narrower.

Steps: Set custom start/end time and scan.

Expected: Keys outside the custom range are listed even if they are inside the animation playback range.

Regression checks: Switching back to animation range changes the result set.

Setup: Preview includes supported float, bool, byte, color, and transform keys outside range.

Steps: Apply range cleanup.

Expected: Out-of-range keys are deleted; in-range keys remain.

Regression checks: Undo restores deleted keys.

Setup: Add a section extending beyond the target range.

Steps: Enable Trim Sections to Range and apply cleanup.

Expected: Section range is clamped to target range.

Regression checks: Trim should not delete in-range keys unexpectedly.

Setup: Animate both visibility and render opacity on the same widget.

Steps: Inspect interaction states.

Expected: The combination is listed for review with animation, widget, properties, and final/intermediate state.

Regression checks: It is not labeled as automatically wrong.

Setup: Add intermediate opacity changes that resolve to a safe final state.

Steps: Toggle End State Only.

Expected: Intermediate-only rows are hidden when End State Only is enabled.

Regression checks: Include Intermediate Keys shows them again.

Setup: Create an animation with zero or invalid playback range.

Steps: Analyze timing.

Expected: Empty range is reported with repair suggestion.

Regression checks: Normal animations are not reported as empty.

Setup: Create an animation with authored section bounds and an empty playback range.

Steps: Review the duration finding and apply Normalize Duration.

Expected: The playback range is initialized from the authored section bounds.

Regression checks: Undo restores the original range and no general FPS conversion is performed.

Setup: Create an animation with a non-empty playback range.

Steps: Review the Duration / FPS Normalizer panel and run the supported duration action where available.

Expected: The existing non-empty range is preserved.

Regression checks: The panel does not convert the display rate or retime keys through an FPS-preservation mode.

Setup: Select an animation in Sequencer that has keyed channels.

Steps: Build key usage map.

Expected: Current summary shows keyed channel and key counts for the selected animation.

Regression checks: No exhaustive per-key findings list appears.

Setup: WBP has multiple animations with different key counts.

Steps: Build key usage map.

Expected: By Animation rows show keys, channels, and dense counts horizontally.

Regression checks: Rows are readable in narrow layouts.

Setup: Build map with at least two animations.

Steps: Click an animation row.

Expected: Sequencer selects that animation and the Current summary updates without collapsing the Key Usage Map section.

Regression checks: The panel should not flicker or lose expansion state.

Setup: State machine definition references an animation name that does not exist in the WBP.

Steps: Check state compatibility.

Expected: Missing clip is reported with state name and expected animation.

Regression checks: Node/status wording matches state-machine editor validation where applicable.

Setup: Two states reference the same WBP animation.

Steps: Check state compatibility.

Expected: Shared clip reuse is reported as review-level unless configured otherwise.

Regression checks: Intentional shared clips are not auto-fixed.

Setup: Definition has transition target that is not a defined state.

Steps: Check state compatibility.

Expected: Invalid target is reported.

Regression checks: Same issue appears consistently in state-machine validation surfaces.

Setup: State has curve-atlas duration with no bindings, or bindings with zero duration.

Steps: Check state compatibility.

Expected: Invalid curve-atlas timing or missing binding issues are reported.

Regression checks: Valid curve-atlas-only states are not reported as missing clips.

Setup: Create or simulate an animation with missing MovieScene data.

Steps: Inspect Sequencer tracks.

Expected: Missing MovieScene is reported as manual recovery.

Regression checks: Tool does not attempt destructive repair.

Setup: MovieScene has a possessable/binding not present in the WBP animation binding table.

Steps: Inspect Sequencer tracks.

Expected: Stray binding is reported with raw GUID available in advanced detail.

Regression checks: Remove Strays removes only orphaned bindings.

Setup: Add or simulate a property track with empty property path.

Steps: Inspect Sequencer tracks.

Expected: Empty property path is listed and routed to appropriate owner tool or manual review.

Regression checks: Healthy property tracks are not flagged.

Setup: Animation event/function track references a function that no longer exists.

Steps: Audit event tracks.

Expected: Missing function is reported with animation, event name, and time/frame when available.

Regression checks: Go To Function should report failure clearly if the function no longer exists.

Setup: Add state-machine entry, exit, or transition condition callbacks as normal Blueprint-authored functions or Ubergraph-callable events.

Steps: Run Event Track Auditor and State Compatibility Checker.

Expected: Existing callbacks are treated as callable instead of missing.

Regression checks: Deleted or renamed callbacks are still reported as missing, and findings stay navigable where a source track or section exists.

Setup: Event key exists outside selected animation or custom range.

Steps: Audit with out-of-range events enabled.

Expected: Event is reported and routed to Range Guard.

Regression checks: Range Guard can locate the same event source.

Setup: Two event keys call the same function at the same frame.

Steps: Audit event tracks.

Expected: Duplicate event finding is reported as review or safe-delete depending on implementation.

Regression checks: Deletion, if available, is selected-row only and undoable.

Setup: Loop-like animation has first and last values that differ on the same float channel.

Steps: Scan state values with loop seam enabled.

Expected: Mismatch is reported with expected value, actual value, delta, and property/channel.

Regression checks: Difference below tolerance is not reported.

Setup: First key differs from designer default or selected baseline.

Steps: Scan first-frame checks.

Expected: First-frame pop candidate is listed.

Regression checks: Baseline mode changes expected value calculation.

Setup: Loop seam finding is selected.

Steps: Apply Match Loop Seam.

Expected: Selected channel’s boundary value is repaired according to chosen baseline.

Regression checks: Undo restores previous boundary values.

Setup: WBP_AT_Purge has transform tracks with translation X/Y, scale X/Y, rotation, and shear keys.

Steps: Select only Transform > Scale X, preview purge.

Expected: Preview lists only Scale X targets.

Regression checks: Translation, rotation, Scale Y, and shear are not included.

Setup: Transform child channels are visible.

Steps: Check Transform > Translation.

Expected: Translation X/Y are visually covered and disabled as duplicate child selections.

Regression checks: Unchecking parent re-enables children.

Setup: Translation X/Y are both unchecked.

Steps: Check both child channels.

Expected: Parent Translation becomes checked and children become disabled to avoid duplicate selection.

Regression checks: Removing one child selection clears parent coverage.

Setup: Preview lists selected purge candidates.

Steps: Apply purge.

Expected: Selected channels/tracks are removed, optional empty track cleanup follows settings, undo restores removed data.

Regression checks: Unselected channel types remain untouched.

Setup: Select filters that affect many keys/tracks.

Steps: Apply purge.

Expected: High-impact confirmation or warning appears before mutation.

Regression checks: Backup is created before mutation when backup is enabled.

Run this pass after any visual update:

  • Light editor theme: text, chips, help icons, disabled controls, and selected rows remain readable.
  • Dark editor theme: strokes are subtle, expanded tool backers are visible, and status colors have sufficient contrast.
  • Narrow dock: checkboxes wrap, summary cards stack, backup path truncates gracefully, and no question mark help icon overlaps an input.
  • Reorder dropdown: remains open during reorder, does not flicker noticeably, and updates the accordion after closing.
  • Accordion state: selecting animations, using Go To, or applying a scan should not collapse unrelated expanded tools.