Skip to content

Commit

Permalink
Adding tests for Idiom and Platform specific View registrations
Browse files Browse the repository at this point in the history
  • Loading branch information
dansiegel committed Feb 19, 2019
1 parent 508b5c8 commit 8e22c9f
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
using Prism.Navigation;
using Prism.Services;
using Xamarin.Forms;
using Xamarin.Forms.Mocks;
using Xunit;
using Xunit.Abstractions;

Expand Down Expand Up @@ -143,6 +144,40 @@ public async Task Navigate_UnregisteredView_ThrowException()
Assert.Contains("missing", result.Exception.ToString(), StringComparison.OrdinalIgnoreCase);
}

[Theory]
[InlineData(typeof(AutowireView), TargetIdiom.Unsupported)]
[InlineData(typeof(AutowireViewTablet), TargetIdiom.Tablet)]
public async Task NavigationUses_IdiomSpecificView(Type viewType, TargetIdiom idiom)
{
Device.SetIdiom(idiom);
var initializer = new XunitPlatformInitializer(_testOutputHelper);
var app = new PrismApplicationMockPlatformAware(initializer);

Assert.True(app.Initialized);
await app.NavigationService.NavigateAsync("AutowireView");
Assert.IsType(viewType, app.MainPage);
Assert.IsType<AutowireViewModel>(app.MainPage.BindingContext);

Device.SetIdiom(TargetIdiom.Unsupported);
}

[Theory]
[InlineData(typeof(ViewAMock), "Test")]
[InlineData(typeof(ViewAMockAndroid), Device.Android)]
public async Task NavigationUses_PlatformSpecificView(Type viewType, string runtimePlatform)
{
MockForms.UpdateRuntimePlatform(runtimePlatform);
var initializer = new XunitPlatformInitializer(_testOutputHelper);
var app = new PrismApplicationMockPlatformAware(initializer);

Assert.True(app.Initialized);
await app.NavigationService.NavigateAsync("ViewAMock");
Assert.IsType(viewType, app.MainPage);
Assert.IsType<ViewModelAMock>(app.MainPage.BindingContext);

MockForms.UpdateRuntimePlatform("Test");
}

[Fact]
public async Task Navigate_Key()
{
Expand Down
5 changes: 5 additions & 0 deletions Source/Xamarin/Prism.DI.Forms.Tests/MockForms.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ public static void Init(string runtimePlatform = "Test")
OpenUriAction = null;
}

public static void UpdateRuntimePlatform(string runtimePlatform)
{
Device.PlatformServices = new PlatformServices(runtimePlatform);
}

private class PlatformServices : IPlatformServices
{
public PlatformServices(string runtimePlatform)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using Prism.DI.Forms.Tests.Mocks.Modules;
using Prism.DI.Forms.Tests.Mocks.Services;
using Prism.DI.Forms.Tests.Mocks.ViewModels;
using Prism.DI.Forms.Tests.Mocks.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Navigation;
using Xamarin.Forms;
using Prism.Logging;
using Prism.Forms.Tests.Mocks.Logging;
using Prism.Mvvm;
#if Autofac
using Prism.Autofac;
using Autofac;
#elif DryIoc
using Prism.DryIoc;
using DryIoc;
#elif Ninject
using Prism.Ninject;
using Ninject;
#elif Unity
using Prism.Unity;
using Unity;
#endif

namespace Prism.DI.Forms.Tests
{
public class PrismApplicationMockPlatformAware : PrismApplicationMock
{
public PrismApplicationMockPlatformAware(IPlatformInitializer platformInitializer)
: base(platformInitializer)
{
}

public PrismApplicationMockPlatformAware(IPlatformInitializer platformInitializer, Page startPage)
: base(platformInitializer, startPage)
{
}

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();

containerRegistry.RegisterForNavigationOnIdiom<AutowireView, AutowireViewModel>(tabletView: typeof(AutowireViewTablet));
containerRegistry.RegisterForNavigationOnPlatform<ViewAMock, ViewModelAMock>(new Platform<ViewAMockAndroid>(AppModel.RuntimePlatform.Android));

DependencyService.Register<IDependencyServiceMock, DependencyServiceMock>();
ViewModelLocationProvider.Register<PartialView, PartialViewModel>();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Prism.Mvvm;
using Xamarin.Forms;

namespace Prism.DI.Forms.Tests.Mocks.Views
{
public class AutowireViewTablet : Page
{
public AutowireViewTablet()
{
ViewModelLocator.SetAutowireViewModel(this, true);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Prism.Mvvm;
using Xamarin.Forms;

namespace Prism.DI.Forms.Tests.Mocks.Views
{
public class ViewAMockAndroid : Page
{
public ViewAMockAndroid()
{
ViewModelLocator.SetAutowireViewModel(this, true);
}
}
}

0 comments on commit 8e22c9f

Please sign in to comment.