Skip to content

[Testing] Re-saved ShouldFlyoutBeVisibleAfterMaximizingWindow test case images in PR 33185 - [12/22/2025] Candidate#33271

Merged
sheiksyedm merged 6 commits intodotnet:inflight/candidatefrom
TamilarasanSF4853:candidate-fix-2-33185
Dec 24, 2025
Merged

[Testing] Re-saved ShouldFlyoutBeVisibleAfterMaximizingWindow test case images in PR 33185 - [12/22/2025] Candidate#33271
sheiksyedm merged 6 commits intodotnet:inflight/candidatefrom
TamilarasanSF4853:candidate-fix-2-33185

Conversation

@TamilarasanSF4853
Copy link
Contributor

This PR addresses the UI test image failures that occurred in the inflight/candidate branch #33185 and includes updates to improve rendering and test stability across platforms.

  • Re-saved the ShouldFlyoutBeVisibleAfterMaximizingWindow images on Mac and Windows platforms.

Test cases:

  • ShouldFlyoutBeVisibleAfterMaximizingWindow

@dotnet-policy-service dotnet-policy-service bot added the community ✨ Community Contribution label Dec 23, 2025
@dotnet-policy-service
Copy link
Contributor

Hey there @@TamilarasanSF4853! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed.

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Dec 23, 2025
@Ahamed-Ali Ahamed-Ali added the area-testing Unit tests, device tests label Dec 23, 2025
@sheiksyedm sheiksyedm marked this pull request as ready for review December 23, 2025 12:34
@sheiksyedm
Copy link
Contributor

Summary of unit test failure root cause

   Test: Maui18123.MultiBindingShouldNotThrow
   Status: Hangs indefinitely (infinite loop)
   Triggered by: PR #32961 changes to CommandElement

   -------------------------------------------------------------------------------

Root Cause Analysis

What PR #32961 Changed

   The PR introduced a dependency mechanism to fix issue #31939 (CommandParameter
   TemplateBinding lost during reparenting):

     - Added DependsOn() method to BindableProperty - allows declaring that Command depends on CommandParameter
     - Added ForceBindingApply() method to BindableObject - forces pending bindings to apply immediately
     - Modified CommandElement.GetCanExecute() - now calls ForceBindingApply(CommandParameter) before evaluating CanExecute

Why Maui18123 Test Hangs

   The test has a specific combination that creates an infinite recursion loop:

Test Scenario:

     - 2 Buttons (deleteBtn, editBtn)
     - Both share same Command (TestCommand)
     - Both use MultiBinding for CommandParameter
     - Both have DataTriggers that change CommandParameter based on Mode property

The Infinite Loop:

     - Button.SendClicked() → executes Command → changes Mode property
     - Mode change → triggers DataTrigger on BOTH buttons
     - DataTrigger → sets new CommandParameter (MultiBinding) on button
     - CommandParameter change → calls OnCommandParameterChanged()
     - OnCommandParameterChanged() → calls CanExecuteChanged()
     - CanExecuteChanged() → refreshes IsEnabled property
     - IsEnabled evaluation → calls GetCanExecute()
     - GetCanExecute() → calls ForceBindingApply(CommandParameter) (NEW in PR #32961)
     - ForceBindingApply() → applies the MultiBinding
     - MultiBinding application → triggers property changes that loop back to step 4

   The critical issue: Step 8's ForceBindingApply() is being called on a
   CommandParameter that was just set by a DataTrigger (step 3), not by a pending
   binding. This causes the MultiBinding to be re-applied unnecessarily, triggering
   another round of property changes.

   -------------------------------------------------------------------------------

Fix Attempts

   Attempt 1: Add _applying guard in ForceBindingApply ✗

     if (_applying) return;

   Why it failed: _applying is only set during SetValueActual(), not during the
   broader binding application flow.

   Attempt 2: Track force-applying properties per instance ✗

     HashSet _forceApplyingProperties;

   Why it failed: The recursion happens across different code paths (DataTrigger →
   CommandParameter change → CanExecute → ForceBindingApply), not just within
   ForceBindingApply itself.

   Attempt 3: ThreadStatic guard in GetCanExecute ✗

     [ThreadStatic] static bool _isEvaluatingCanExecute;

   Why it failed: Doesn't prevent the issue when multiple button instances share
   the same Command and trigger each other's evaluations.

   Attempt 4: Instance-level HashSet in GetCanExecute ✓ (Partially)

     [ThreadStatic] static HashSet? _evaluatingInstances;

   Current status: This SHOULD work theoretically, but tests still hang. The issue
   might be more complex than simple recursion - possibly a deadlock in the xUnit
   test runner or during XAML compilation.

   -------------------------------------------------------------------------------
The Real Problem

   The fundamental design issue is:

   ForceBindingApply() doesn't distinguish between:

     - ❌ Pending bindings that haven't resolved yet (what it was designed to fix)
     - ✅ Bindings that were just set by DataTriggers/Setters and don't need forcing

   When a DataTrigger sets a new MultiBinding as CommandParameter, that binding IS
   in the Bindings collection, so ForceBindingApply() tries to apply it again, even
   though it was just applied by the trigger system.

   -------------------------------------------------------------------------------

Summary

   PR #32961's ForceBindingApply() mechanism creates an infinite loop with the
   Maui18123 test's complex scenario (MultiBinding + DataTriggers + shared
   Commands).

   The test needs to either be:

     - Skipped with documentation of the known issue
     - Revert the PR and fix the ForceBindingApply() logic to detect when bindings don't actually need forcing
     
   

This reverts commit 33ecfef.
@sheiksyedm sheiksyedm merged commit f565d2d into dotnet:inflight/candidate Dec 24, 2025
36 of 39 checks passed
PureWeen pushed a commit that referenced this pull request Dec 29, 2025
…se images in PR 33185 - [12/22/2025] Candidate (#33271)

This PR addresses the UI test image failures that occurred in the inflight/candidate branch #33185 and includes updates to improve rendering and test stability across platforms.

- Re-saved the ShouldFlyoutBeVisibleAfterMaximizingWindow images on Mac and Windows platforms.

### Test cases:

- ShouldFlyoutBeVisibleAfterMaximizingWindow
PureWeen pushed a commit that referenced this pull request Dec 29, 2025
…se images in PR 33185 - [12/22/2025] Candidate (#33271)

This PR addresses the UI test image failures that occurred in the inflight/candidate branch #33185 and includes updates to improve rendering and test stability across platforms.

- Re-saved the ShouldFlyoutBeVisibleAfterMaximizingWindow images on Mac and Windows platforms.

### Test cases:

- ShouldFlyoutBeVisibleAfterMaximizingWindow
PureWeen added a commit that referenced this pull request Dec 29, 2025
## CollectionView
- Fixed the NRE in CarouselViewController on iOS 15.5 & 16.4 by
@Ahamed-Ali in #30838
  <details>
  <summary>🔧 Fixes</summary>

- [NRE in CarouselViewController on iOS 15.5 &
16.4](#28557)
  </details>

- [iOS, macOS] Fixed CollectionView group header size changes with
ItemSizingStrategy by @NanthiniMahalingam in
#33161
  <details>
  <summary>🔧 Fixes</summary>

- [[NET 10] I6_Grouping - Grouping_with_variable_sized_items changing
the 'ItemSizingStrategy' also changes the header
size.](#33130)
  </details>

## Flyout
- Add unit tests for TabBar and FlyoutItem navigation
ApplyQueryAttributes (#25663) by @StephaneDelcroix in
#33006

## Flyoutpage
- Fixed the FlyoutPage.Flyout Disappearing When Maximizing the Window on
Mac Platform by @NanthiniMahalingam in
#26701
  <details>
  <summary>🔧 Fixes</summary>

- [FlyoutPage.Flyout - navigation corrupted when running om mac , on
window ok](#22719)
  </details>

## Mediapicker
- [Windows] Fix for PickPhotosAsync throws exception if image is
modified by @HarishwaranVijayakumar in
#32952
  <details>
  <summary>🔧 Fixes</summary>

- [PickPhotosAsync throws exception if image is
modified.](#32408)
  </details>

## Navigation
- Fix for TabBar Navigation does not invoke its
IQueryAttributable.ApplyQueryAttributes(query) by @SuthiYuvaraj in
#25663
  <details>
  <summary>🔧 Fixes</summary>

- [Tabs defined in AppShell.xaml does not invoke its view model's
IQueryAttributable.ApplyQueryAttributes(query)
implementaion](#13537)
- [`ShellContent` routes do not call
`ApplyQueryAttributes`](#28453)
  </details>

## ScrollView
- Fix ScrollToPosition.Center behavior in ScrollView on iOS and
MacCatalyst by @devanathan-vaithiyanathan in
#26825
  <details>
  <summary>🔧 Fixes</summary>

- [ScrollToPosition.Center Centers the First Item too in iOS and
Catalyst](#26760)
- [On iOS - ScrollView.ScrollToAsync Element,
ScrollToPosition.MakeVisible shifts view to the right, instead of just
scrolling vertically](#28965)
  </details>

## Searchbar
- [iOS, Mac, Windows] Fixed CharacterSpacing for SearchBar text and
placeholder text by @Dhivya-SF4094 in
#30407
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac, Windows] SearchBar CharacterSpacing property is not
working as expected](#30366)
  </details>

## Shell
- Update logic for large title display mode on iOS - shell by @kubaflo
in #33039

## TitleView
- [iOS] Fixed memory leak with PopToRootAsync when using TitleView by
@Vignesh-SF3580 in #28547
  <details>
  <summary>🔧 Fixes</summary>

- [NavigationPage.TitleView causes memory leak with
PopToRootAsync](#28201)
  </details>

## Xaml
- [C] Fix binding to interface-inherited properties like
IReadOnlyList<T>.Count by @StephaneDelcroix in
#32912
  <details>
  <summary>🔧 Fixes</summary>

- [Compiled Binding to Array.Count provides no
result](#13872)
  </details>

- Fix #31939: CommandParameter TemplateBinding lost during reparenting
by @StephaneDelcroix in #32961
  <details>
  <summary>🔧 Fixes</summary>

- [CommandParameter TemplateBinding Lost During ControlTemplate
Reparenting](#31939)
  </details>


<details>
<summary>🧪 Testing (4)</summary>

- [Testing] Fixed Test case failure in PR 33185 - [12/22/2025] Candidate
by @TamilarasanSF4853 in #33257
- [Testing] Re-saved ShouldFlyoutBeVisibleAfterMaximizingWindow test
case images in PR 33185 - [12/22/2025] Candidate by @TamilarasanSF4853
in #33271
- [Testing] Fixed Test case failure in PR 33185 - [12/22/2025] Candidate
- 2 by @TamilarasanSF4853 in #33299
- [Testing] Fixed Test case failure in PR 33185 - [12/22/2025] Candidate
- 3 by @TamilarasanSF4853 in #33311

</details>

<details>
<summary>📦 Other (2)</summary>

- [XSG][BindingSourceGen] Add support for RelayCommand to compiled
bindings by @simonrozsival via @Copilot in
#32954
  <details>
  <summary>🔧 Fixes</summary>

  - [Issue #25818](#25818)
  </details>
- Revert "Update logic for large title display mode on iOS - shell
(#33039)" in cff7f35

</details>
**Full Changelog**:
main...inflight/candidate
StephaneDelcroix pushed a commit that referenced this pull request Jan 5, 2026
…se images in PR 33185 - [12/22/2025] Candidate (#33271)

This PR addresses the UI test image failures that occurred in the inflight/candidate branch #33185 and includes updates to improve rendering and test stability across platforms.

- Re-saved the ShouldFlyoutBeVisibleAfterMaximizingWindow images on Mac and Windows platforms.

### Test cases:

- ShouldFlyoutBeVisibleAfterMaximizingWindow
@github-actions github-actions bot locked and limited conversation to collaborators Jan 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-testing Unit tests, device tests community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants