Skip to content

Commit 2d3f769

Browse files
committed
Fix intermittent SchedulerIsUsedForAllCommands test and remove DynamicData
- Simplified SchedulerIsUsedForAllCommands to check NavigationStack directly instead of using ToObservableChangeSet bindings - Removed all DynamicData usage from RoutingStateTests.cs to eliminate scheduling race conditions - Replaced ToObservableChangeSet().Bind() with simple List<> subscriptions in CurrentViewModel tests - Removed unused DynamicData bindings from RoutingStateThrows test - All 6,155 tests now passing reliably across all frameworks
1 parent 0de56bc commit 2d3f769

File tree

1 file changed

+13
-30
lines changed

1 file changed

+13
-30
lines changed

src/tests/ReactiveUI.Wpf.Tests/Xaml/RoutingStateTests.cs

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
// The .NET Foundation licenses this file to you under the MIT license.
44
// See the LICENSE file in the project root for full license information.
55

6-
using DynamicData;
7-
86
using ReactiveUI.TestGuiMocks.CommonGuiMocks.Mocks;
97
using ReactiveUI.Tests.Utilities.Schedulers;
108
using ReactiveUI.Tests.Wpf;
@@ -61,7 +59,8 @@ public async Task NavigationPushPopTest()
6159
public async Task CurrentViewModelObservableIsAccurate()
6260
{
6361
var fixture = new RoutingState(ImmediateScheduler.Instance);
64-
fixture.CurrentViewModel.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var output).Subscribe();
62+
var output = new List<IRoutableViewModel?>();
63+
fixture.CurrentViewModel.Subscribe(vm => output.Add(vm));
6564

6665
await Assert.That(output).Count().IsEqualTo(1);
6766

@@ -137,10 +136,9 @@ public async Task CurrentViewModelObservableIsAccurate()
137136
public async Task CurrentViewModelObservableIsAccurateViaWhenAnyObservable()
138137
{
139138
var fixture = new TestScreen();
139+
var output = new List<IRoutableViewModel?>();
140140
fixture.WhenAnyObservable(static x => x.Router!.CurrentViewModel)
141-
.ToObservableChangeSet(ImmediateScheduler.Instance)
142-
.Bind(out var output)
143-
.Subscribe();
141+
.Subscribe(vm => output.Add(vm));
144142

145143
fixture.Router = new RoutingState(ImmediateScheduler.Instance);
146144

@@ -199,26 +197,21 @@ public async Task SchedulerIsUsedForAllCommands()
199197
var scheduler = TestContext.Current!.GetScheduler();
200198
var fixture = new RoutingState(scheduler);
201199

202-
fixture
203-
.Navigate
204-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigate).Subscribe();
205-
fixture
206-
.NavigateBack
207-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigateBack).Subscribe();
208-
fixture
209-
.NavigateAndReset
210-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigateAndReset).Subscribe();
211-
200+
// Navigate should execute synchronously on ImmediateScheduler
212201
fixture.Navigate.Execute(new TestViewModel()).Subscribe();
202+
await Assert.That(fixture.NavigationStack).Count().IsEqualTo(1);
213203

214-
// ImmediateScheduler executes synchronously
215-
await Assert.That(navigate).IsNotEmpty();
204+
// Navigate again
205+
fixture.Navigate.Execute(new TestViewModel()).Subscribe();
206+
await Assert.That(fixture.NavigationStack).Count().IsEqualTo(2);
216207

208+
// NavigateBack should execute synchronously on ImmediateScheduler
217209
fixture.NavigateBack.Execute().Subscribe();
218-
await Assert.That(navigateBack).IsNotEmpty();
210+
await Assert.That(fixture.NavigationStack).Count().IsEqualTo(1);
219211

212+
// NavigateAndReset should execute synchronously on ImmediateScheduler
220213
fixture.NavigateAndReset.Execute(new TestViewModel()).Subscribe();
221-
await Assert.That(navigateAndReset).IsNotEmpty();
214+
await Assert.That(fixture.NavigationStack).Count().IsEqualTo(1);
222215
}
223216

224217
[Test]
@@ -228,16 +221,6 @@ public async Task RoutingStateThrows()
228221
var scheduler = TestContext.Current!.GetScheduler();
229222
var fixture = new RoutingState(scheduler);
230223

231-
fixture
232-
.Navigate
233-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigate).Subscribe();
234-
fixture
235-
.NavigateBack
236-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigateBack).Subscribe();
237-
fixture
238-
.NavigateAndReset
239-
.ToObservableChangeSet(ImmediateScheduler.Instance).Bind(out var navigateAndReset).Subscribe();
240-
241224
Exception? thrownException = null;
242225

243226
// Subscribe to ThrownExceptions to prevent global error handler from being triggered

0 commit comments

Comments
 (0)