From 0c35b6b9cc6e3e5e4b9685734f96e7c07f9104a4 Mon Sep 17 00:00:00 2001 From: Dan Siegel Date: Mon, 14 Oct 2019 12:04:16 +0300 Subject: [PATCH 1/3] fixes #1894 --- .../Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs b/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs index 479b80d2f..4a092b199 100644 --- a/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs +++ b/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs @@ -1,4 +1,4 @@ -using Prism.AppModel; +using Prism.AppModel; using Prism.Common; using Prism.Ioc; using Prism.Mvvm; @@ -287,10 +287,10 @@ private void InsertPopupViewInCurrentPage(ContentPage currentPage, View popupVie var relativeHeight = DialogLayout.GetRelativeHeightRequest(popupView); if (relativeHeight != null) { - popupContainer.SetBinding(DialogContainer.WidthRequestProperty, + popupContainer.SetBinding(DialogContainer.HeightRequestProperty, new Binding("Height", BindingMode.OneWay, - new RelativeContentSizeConverter { RelativeSize = relativeWidth.Value }, + new RelativeContentSizeConverter { RelativeSize = relativeHeight.Value }, source: currentPage)); } From cd42169e1400792ed83db8040649b350f4fb831f Mon Sep 17 00:00:00 2001 From: Dan Siegel Date: Tue, 15 Oct 2019 09:58:47 +0300 Subject: [PATCH 2/3] null handler for callback fixes #1883 --- .../Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs b/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs index 4a092b199..cbb7a4fc5 100644 --- a/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs +++ b/Source/Xamarin/Prism.Forms/Services/Dialogs/DialogService.cs @@ -46,14 +46,14 @@ void DialogAware_RequestClose(IDialogParameters outParameters) } dialogAware.RequestClose -= DialogAware_RequestClose; - callback(result); + callback?.Invoke(result); GC.Collect(); } catch(DialogException dex) { if(dex.Message != DialogException.CanCloseIsFalse) { - callback(new DialogResult + callback?.Invoke(new DialogResult { Exception = dex, Parameters = parameters @@ -62,7 +62,7 @@ void DialogAware_RequestClose(IDialogParameters outParameters) } catch (Exception ex) { - callback(new DialogResult + callback?.Invoke(new DialogResult { Exception = ex, Parameters = parameters @@ -87,7 +87,7 @@ void DialogAware_RequestClose(IDialogParameters outParameters) catch (Exception ex) { var error = ex.ToString(); - callback(new DialogResult { Exception = ex }); + callback?.Invoke(new DialogResult { Exception = ex }); } } From b76062132fdd1031b5da008086fc3e86bc24b79b Mon Sep 17 00:00:00 2001 From: Dan Siegel Date: Tue, 15 Oct 2019 11:19:46 +0300 Subject: [PATCH 3/3] Adding Unit Tests for DialogService --- .../Services/DialogServiceTests.cs | 257 ++++++++++++++++++ .../Services/Mocks/Dialogs/DialogMock.cs | 24 ++ .../Mocks/Dialogs/DialogMockViewModel.cs | 35 +++ .../Mocks/Ioc/DialogContainerExtension.cs | 102 +++++++ .../Services/Mocks/Ioc/IRegistration.cs | 11 + .../Mocks/Ioc/TransientRegistration.cs | 13 + .../Services/Mocks/MockApplication.cs | 30 ++ .../Services/Dialogs/DialogService.cs | 6 +- 8 files changed, 475 insertions(+), 3 deletions(-) create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/DialogServiceTests.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/Dialogs/DialogMock.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/Dialogs/DialogMockViewModel.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/Ioc/DialogContainerExtension.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/Ioc/IRegistration.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/Ioc/TransientRegistration.cs create mode 100644 Source/Xamarin/Prism.Forms.Tests/Services/Mocks/MockApplication.cs diff --git a/Source/Xamarin/Prism.Forms.Tests/Services/DialogServiceTests.cs b/Source/Xamarin/Prism.Forms.Tests/Services/DialogServiceTests.cs new file mode 100644 index 000000000..ee6ce5df8 --- /dev/null +++ b/Source/Xamarin/Prism.Forms.Tests/Services/DialogServiceTests.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Prism.Ioc; +using Prism.Services.Dialogs; +using Xunit; +using Prism.Forms.Tests.Mocks; +using Prism.Common; +using Prism.Forms.Tests.Services.Mocks.Dialogs; +using Xamarin.Forms; +using Prism.Forms.Tests.Services.Mocks; +using Prism.Services.Dialogs.Xaml; + +namespace Prism.Forms.Tests.Services +{ + public class DialogServiceTests + { + private const string DialogMockViewName = nameof(DialogMock); + private MockApplication _currentApp; + + public DialogServiceTests() + { + Xamarin.Forms.Mocks.MockForms.Init(); + } + + [Fact] + public void DoesNotThrowExceptionWithNullParametersAndCallback() + { + SetMainPage(); + var dialogService = CreateDialogService(); + var ex = Record.Exception(() => dialogService.ShowDialog(DialogMockViewName)); + Assert.Null(ex); + ex = Record.Exception(() => DialogMock.Current.ViewModel.SendRequestClose()); + Assert.Null(ex); + _currentApp = null; + } + + [Fact] + public void DoesNotThrowExceptionWithNullParameters() + { + SetMainPage(); + var dialogService = CreateDialogService(); + var ex = Record.Exception(() => dialogService.ShowDialog(DialogMockViewName, null, p => { })); + Assert.Null(ex); + ex = Record.Exception(() => DialogMock.Current.ViewModel.SendRequestClose()); + Assert.Null(ex); + _currentApp = null; + } + + [Fact] + public void DoesNotThrowExceptionWithNullCallback() + { + SetMainPage(); + var dialogService = CreateDialogService(); + var ex = Record.Exception(() => dialogService.ShowDialog(DialogMockViewName, new DialogParameters(), null)); + Assert.Null(ex); + ex = Record.Exception(() => DialogMock.Current.ViewModel.SendRequestClose()); + Assert.Null(ex); + _currentApp = null; + } + + [Fact] + public void MainPageContentPreservedOnClose() + { + SetMainPage(); + var dialogService = CreateDialogService(); + dialogService.ShowDialog(DialogMockViewName); + + Assert.IsType(_currentApp.MainPage); + var mainPage = _currentApp.MainPage as ContentPage; + Assert.IsType(mainPage.Content); + Assert.True((bool)mainPage.Content.GetValue(DialogService.IsPopupHostProperty)); + + DialogMock.Current.ViewModel.SendRequestClose(); + + Assert.IsType