Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SunboX/Prism.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Lagunas <brianlagunas@users.noreply.github.com>2017-05-26 19:23:37 +0300
committerGitHub <noreply@github.com>2017-05-26 19:23:37 +0300
commit35f77c1cceeebcb2bd83da3b39784f2b16b9fd5d (patch)
tree10f4e0f897fb485573ba9a4f290372895abec507
parent1e9bd24e41bc8e73b7b8c557186978f4173a3c72 (diff)
parentc1f74d5bcdc888e7d809e33c8da3023da8c313da (diff)
Merge pull request #1064 from nuitsjp/fix-destroy-master-detail-page
Fix Destroy for MasterDetailPage.
-rw-r--r--Source/Xamarin/Prism.Forms.Tests/Common/PageUtilitiesFixture.cs45
-rw-r--r--Source/Xamarin/Prism.Forms.Tests/Mocks/Views/MasterDetailPageMock.cs11
-rw-r--r--Source/Xamarin/Prism.Forms/Common/PageUtilities.cs1
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)