diff options
author | nuits.jp <nuits.jp@live.jp> | 2017-05-26 09:10:38 +0300 |
---|---|---|
committer | nuits.jp <nuits.jp@live.jp> | 2017-05-26 09:10:38 +0300 |
commit | c1f74d5bcdc888e7d809e33c8da3023da8c313da (patch) | |
tree | 10f4e0f897fb485573ba9a4f290372895abec507 | |
parent | 1e9bd24e41bc8e73b7b8c557186978f4173a3c72 (diff) |
Fix Destroy for MasterDetailPage.
3 files changed, 43 insertions, 14 deletions
diff --git a/Source/Xamarin/Prism.Forms.Tests/Common/PageUtilitiesFixture.cs b/Source/Xamarin/Prism.Forms.Tests/Common/PageUtilitiesFixture.cs index b32c6ba..0aa7f72 100644 --- a/Source/Xamarin/Prism.Forms.Tests/Common/PageUtilitiesFixture.cs +++ b/Source/Xamarin/Prism.Forms.Tests/Common/PageUtilitiesFixture.cs @@ -78,32 +78,49 @@ namespace Prism.Forms.Tests.Common public void DestoryMasterDetailPage() { var recorder = new PageNavigationEventRecorder(); - var masterDetailPage = new MasterDetailPageMock(recorder); - var masterDetailPageViewModel = masterDetailPage.BindingContext; - var detailPage = masterDetailPage.Detail; + var masterPage = new ContentPageMock(recorder) {Title = "Master"}; + var masterPageViewModel = masterPage.BindingContext; + var detailPage = new ContentPageMock(recorder) {Title = "Detail"}; var detailPageViewModel = detailPage.BindingContext; + var masterDetailPage = new MasterDetailPageMock(recorder, masterPage, detailPage); + var masterDetailPageViewModel = masterDetailPage.BindingContext; PageUtilities.DestroyPage(masterDetailPage); - // masterDetailPage - Assert.Equal(detailPage, recorder.Records[0].Sender); + // MasterPage + var record = recorder.TakeFirst(); + Assert.Equal(masterPage, record.Sender); + Assert.Null(masterPage.BindingContext); + Assert.Equal(0, masterPage.Behaviors.Count); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); + + record = recorder.TakeFirst(); + Assert.Equal(masterPageViewModel, record.Sender); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); + + // DetailPage + record = recorder.TakeFirst(); + Assert.Equal(detailPage, record.Sender); Assert.Null(detailPage.BindingContext); Assert.Equal(0, detailPage.Behaviors.Count); - Assert.Equal(PageNavigationEvent.Destroy, recorder.Records[0].Event); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); - Assert.Equal(detailPageViewModel, recorder.Records[1].Sender); - Assert.Equal(PageNavigationEvent.Destroy, recorder.Records[1].Event); + record = recorder.TakeFirst(); + Assert.Equal(detailPageViewModel, record.Sender); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); - // detailPage - Assert.Equal(masterDetailPage, recorder.Records[2].Sender); + // MasterDetailPage + record = recorder.TakeFirst(); + Assert.Equal(masterDetailPage, record.Sender); Assert.Null(masterDetailPage.BindingContext); Assert.Equal(0, masterDetailPage.Behaviors.Count); - Assert.Equal(PageNavigationEvent.Destroy, recorder.Records[2].Event); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); - Assert.Equal(masterDetailPageViewModel, recorder.Records[3].Sender); - Assert.Equal(PageNavigationEvent.Destroy, recorder.Records[3].Event); + record = recorder.TakeFirst(); + Assert.Equal(masterDetailPageViewModel, record.Sender); + Assert.Equal(PageNavigationEvent.Destroy, record.Event); - Assert.Equal(4, recorder.Records.Count); + Assert.True(recorder.IsEmpty); } [Fact] diff --git a/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs b/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs index 60f902e..090598b 100644 --- a/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs +++ b/Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs @@ -23,6 +23,17 @@ namespace Prism.Forms.Tests.Mocks.Views ((IPageNavigationEventRecordable)BindingContext).PageNavigationEventRecorder = recorder; } + public MasterDetailPageMock(PageNavigationEventRecorder recorder, Page masterPage, Page detailPage) + { + Master = masterPage; + Detail = detailPage; + + ViewModelLocator.SetAutowireViewModel(this, true); + + PageNavigationEventRecorder = recorder; + ((IPageNavigationEventRecordable)BindingContext).PageNavigationEventRecorder = recorder; + } + public bool IsPresentedAfterNavigation { get; set; } public void Destroy() { diff --git a/Source/Xamarin/Prism.Forms/Common/PageUtilities.cs b/Source/Xamarin/Prism.Forms/Common/PageUtilities.cs index b3747d1..33a220b 100644 --- a/Source/Xamarin/Prism.Forms/Common/PageUtilities.cs +++ b/Source/Xamarin/Prism.Forms/Common/PageUtilities.cs @@ -47,6 +47,7 @@ namespace Prism.Common { if (page is MasterDetailPage) { + DestroyPage(((MasterDetailPage)page).Master); DestroyPage(((MasterDetailPage)page).Detail); } else if (page is TabbedPage) |