forked from reactiveui/ReactiveUI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoutingState.cs
More file actions
101 lines (80 loc) · 3.12 KB
/
RoutingState.cs
File metadata and controls
101 lines (80 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xunit;
namespace ReactiveUI.Routing.Tests
{
public class TestViewModel : ReactiveObject, IRoutableViewModel
{
string _SomeProp;
public string SomeProp {
get { return _SomeProp; }
set { this.RaiseAndSetIfChanged(ref _SomeProp, value); }
}
public string UrlPathSegment {
get { return "Test"; }
}
public IScreen HostScreen
{
get { return null; }
}
}
public class TestScreen : ReactiveObject, IScreen
{
IRoutingState _Router;
public IRoutingState Router {
get { return _Router; }
set { this.RaiseAndSetIfChanged(ref _Router, value); }
}
}
public class RoutingStateTests
{
[Fact]
public void NavigationPushPopTest()
{
var input = new TestViewModel() {SomeProp = "Foo"};
var fixture = new RoutingState();
Assert.False(fixture.NavigateBack.CanExecute(input));
fixture.Navigate.Execute(new TestViewModel());
Assert.Equal(1, fixture.NavigationStack.Count);
Assert.False(fixture.NavigateBack.CanExecute(null));
fixture.Navigate.Execute(new TestViewModel());
Assert.Equal(2, fixture.NavigationStack.Count);
Assert.True(fixture.NavigateBack.CanExecute(null));
fixture.NavigateBack.Execute(null);
Assert.Equal(1, fixture.NavigationStack.Count);
}
[Fact]
public void CurrentViewModelObservableIsAccurate()
{
var fixture = new RoutingState();
var output = fixture.CurrentViewModel.CreateCollection();
Assert.Equal(1, output.Count);
fixture.Navigate.Execute(new TestViewModel() { SomeProp = "A" });
Assert.Equal(2, output.Count);
fixture.Navigate.Execute(new TestViewModel() { SomeProp = "B" });
Assert.Equal(3, output.Count);
Assert.Equal("B", ((TestViewModel)output.Last()).SomeProp);
fixture.NavigateBack.Execute(null);
Assert.Equal(4, output.Count);
Assert.Equal("A", ((TestViewModel)output.Last()).SomeProp);
}
[Fact]
public void CurrentViewModelObservableIsAccurateViaWhenAnyObservable()
{
var fixture = new TestScreen();
var output = fixture.WhenAnyObservable(x => x.Router.CurrentViewModel).CreateCollection();
fixture.Router = new RoutingState();
Assert.Equal(1, output.Count);
fixture.Router.Navigate.Execute(new TestViewModel() { SomeProp = "A" });
Assert.Equal(2, output.Count);
fixture.Router.Navigate.Execute(new TestViewModel() { SomeProp = "B" });
Assert.Equal(3, output.Count);
Assert.Equal("B", ((TestViewModel)output.Last()).SomeProp);
fixture.Router.NavigateBack.Execute(null);
Assert.Equal(4, output.Count);
Assert.Equal("A", ((TestViewModel)output.Last()).SomeProp);
}
}
}