From abf09308fcec58f394e6c9b181b28be1e769f9ca Mon Sep 17 00:00:00 2001 From: Tracy Pearson Date: Tue, 30 Aug 2022 11:55:08 -0400 Subject: [PATCH] Working with passing tests! --- .../MainWindowViewModelTests.cs | 19 +++++++++---------- WpfViewModelFirst/IViewModelFactory.cs | 2 +- WpfViewModelFirst/MainWindowViewModel.cs | 13 ++++++++----- WpfViewModelFirst/Part1/Part1ViewModel.cs | 4 ++-- WpfViewModelFirst/ViewModelFactory.cs | 2 +- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/WpfViewModelFirst.Tests/MainWindowViewModelTests.cs b/WpfViewModelFirst.Tests/MainWindowViewModelTests.cs index 0f29c79..999ca64 100644 --- a/WpfViewModelFirst.Tests/MainWindowViewModelTests.cs +++ b/WpfViewModelFirst.Tests/MainWindowViewModelTests.cs @@ -9,9 +9,9 @@ namespace WpfViewModelFirst.Tests [Fact] public void Part1WillSetPart1ViewModelToCurrentViewModel() { - Part1ViewModel part1ViewModel = new(() => Task.CompletedTask); + Part1ViewModel part1ViewModel = new(() => { }); Mock mockViewModelFactory = new Mock(); - mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny>())) + mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny())) .Returns(part1ViewModel); MainWindowViewModel main = new(mockViewModelFactory.Object); main.Part1(null); @@ -22,24 +22,23 @@ namespace WpfViewModelFirst.Tests { TaskCompletionSource taskCompletionSource = new TaskCompletionSource(); Mock mockViewModelFactory = new Mock(); - mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny>())) + mockViewModelFactory.Setup(vmf => vmf.GetPart1ViewModel(It.IsAny())) .Returns(() => new Part1ViewModel(() => { - taskCompletionSource.SetResult(true); - return Task.CompletedTask; + //taskCompletionSource.SetResult(true); + })) - .Callback>(c => + .Callback(c => { - c.Invoke().ContinueWith(t => - { - taskCompletionSource.SetResult(true); - }); + //taskCompletionSource.SetResult(true); + c.Invoke(); }) ; mockViewModelFactory.Setup(vmf => vmf.GetPart2ViewModel()) .Returns(() => new Part2ViewModel()); MainWindowViewModel main = new(mockViewModelFactory.Object); + main.ItHappened += () => taskCompletionSource.SetResult(true); main.Part1(null); await taskCompletionSource.Task.WaitAsync(CancellationToken.None); Assert.IsType(main.CurrentViewModel); diff --git a/WpfViewModelFirst/IViewModelFactory.cs b/WpfViewModelFirst/IViewModelFactory.cs index 7e71f78..22749b4 100644 --- a/WpfViewModelFirst/IViewModelFactory.cs +++ b/WpfViewModelFirst/IViewModelFactory.cs @@ -7,7 +7,7 @@ namespace WpfViewModelFirst { public interface IViewModelFactory { - Part1ViewModel GetPart1ViewModel(Func finishAction); + Part1ViewModel GetPart1ViewModel(Action finishAction); Part2ViewModel GetPart2ViewModel(); } } \ No newline at end of file diff --git a/WpfViewModelFirst/MainWindowViewModel.cs b/WpfViewModelFirst/MainWindowViewModel.cs index d9c96cb..affc6d4 100644 --- a/WpfViewModelFirst/MainWindowViewModel.cs +++ b/WpfViewModelFirst/MainWindowViewModel.cs @@ -27,23 +27,26 @@ namespace WpfViewModelFirst public void Part1(object? e) { CurrentViewModel = null; - CurrentViewModel = _viewModelFactory.GetPart1ViewModel(async () => await Part1Action()); + CurrentViewModel = _viewModelFactory.GetPart1ViewModel(Part1Action); } - private Task Part1Action() + private void Part1Action() { - var currentDispatcher = Dispatcher.CurrentDispatcher; CurrentViewModel = null; - return LongDelay().ContinueWith((c) => + var currentDispatcher = Dispatcher.CurrentDispatcher; + LongDelay().ContinueWith((c) => { //System.Diagnostics.Debug.WriteLine(c.Result); CurrentViewModel = _viewModelFactory.GetPart2ViewModel(); + ItHappened?.Invoke(); currentDispatcher.Invoke(() => { Strings.Add($"{DateTime.Now}"); }); - },TaskContinuationOptions.OnlyOnRanToCompletion); + }, TaskContinuationOptions.OnlyOnRanToCompletion); } + public event Action ItHappened; + private async Task LongDelay() { await Task.Delay(500); diff --git a/WpfViewModelFirst/Part1/Part1ViewModel.cs b/WpfViewModelFirst/Part1/Part1ViewModel.cs index b9f4bd9..7d8c7e2 100644 --- a/WpfViewModelFirst/Part1/Part1ViewModel.cs +++ b/WpfViewModelFirst/Part1/Part1ViewModel.cs @@ -9,9 +9,9 @@ namespace WpfViewModelFirst.Part1 { public class Part1ViewModel : ViewModelBase { - private readonly Func _finishAction; + private readonly Action _finishAction; - public Part1ViewModel(Func finishAction) + public Part1ViewModel(Action finishAction) { _finishAction = finishAction; FinishCommand = new CustomCommand(Finish); diff --git a/WpfViewModelFirst/ViewModelFactory.cs b/WpfViewModelFirst/ViewModelFactory.cs index eaa1f31..8f2ceb5 100644 --- a/WpfViewModelFirst/ViewModelFactory.cs +++ b/WpfViewModelFirst/ViewModelFactory.cs @@ -8,7 +8,7 @@ namespace WpfViewModelFirst { public class ViewModelFactory : IViewModelFactory { - public Part1.Part1ViewModel GetPart1ViewModel(Func finishAction) + public Part1.Part1ViewModel GetPart1ViewModel(Action finishAction) { return new(finishAction); }