Skip to content
This repository has been archived by the owner on Feb 16, 2023. It is now read-only.

Implement View Registries #47

Merged
merged 8 commits into from
May 30, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add tests
  • Loading branch information
dansiegel committed May 29, 2022
commit 99db143854861437a891929e157dd2bd34ba99c1
21 changes: 20 additions & 1 deletion Prism.Maui.sln
Original file line number Diff line number Diff line change
@@ -32,7 +32,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiModule", "sample\MauiMo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui.Rx", "src\Prism.Maui.Rx\Prism.Maui.Rx.csproj", "{D364B3F0-2D41-4EF8-BE1D-D83825322F61}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MauiRegionsModule", "sample\MauiRegionsModule\MauiRegionsModule.csproj", "{90FD1190-DE0D-413E-9E30-B899BB67A82D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRegionsModule", "sample\MauiRegionsModule\MauiRegionsModule.csproj", "{90FD1190-DE0D-413E-9E30-B899BB67A82D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prism.DryIoc.Maui.Tests", "tests\Prism.DryIoc.Maui.Tests\Prism.DryIoc.Maui.Tests.csproj", "{4AC48AAE-8730-4B45-93D8-9AD463820285}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -159,6 +161,22 @@ Global
{90FD1190-DE0D-413E-9E30-B899BB67A82D}.Release|x64.Build.0 = Release|Any CPU
{90FD1190-DE0D-413E-9E30-B899BB67A82D}.Release|x86.ActiveCfg = Release|Any CPU
{90FD1190-DE0D-413E-9E30-B899BB67A82D}.Release|x86.Build.0 = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|arm64.ActiveCfg = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|arm64.Build.0 = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|x64.ActiveCfg = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|x64.Build.0 = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|x86.ActiveCfg = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Debug|x86.Build.0 = Debug|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|Any CPU.Build.0 = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|arm64.ActiveCfg = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|arm64.Build.0 = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|x64.ActiveCfg = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|x64.Build.0 = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|x86.ActiveCfg = Release|Any CPU
{4AC48AAE-8730-4B45-93D8-9AD463820285}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -172,6 +190,7 @@ Global
{EB8CD219-0CA7-4AE3-A7B7-6D883400CCE0} = {06F06128-578F-449D-B3D6-D04A531B1018}
{D364B3F0-2D41-4EF8-BE1D-D83825322F61} = {6CAB3327-8C0A-4D0B-BF18-CEFD15B84BA7}
{90FD1190-DE0D-413E-9E30-B899BB67A82D} = {06F06128-578F-449D-B3D6-D04A531B1018}
{4AC48AAE-8730-4B45-93D8-9AD463820285} = {7CB47440-CCBC-4E16-B2B9-9FD472154117}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7E696A15-8B47-4BC2-8997-071E61157406}
24 changes: 20 additions & 4 deletions src/Prism.DryIoc.Shared/DryIocContainerExtension.cs
Original file line number Diff line number Diff line change
@@ -295,7 +295,11 @@ public object Resolve(Type type, params (Type Type, object Instance)[] parameter
try
{
var container = _currentScope?.Resolver ?? Instance;
return container.Resolve(type, args: parameters.Select(p => p.Instance).ToArray());
var args = parameters.Where(x => x.Instance is not IContainerProvider)
.Select(x => x.Instance)
.ToList();
args.Add(this);
return container.Resolve(type, args: args.ToArray());
}
catch (Exception ex)
{
@@ -315,7 +319,11 @@ public object Resolve(Type type, string name, params (Type Type, object Instance
try
{
var container = _currentScope?.Resolver ?? Instance;
return container.Resolve(type, name, args: parameters.Select(p => p.Instance).ToArray());
var args = parameters.Where(x => x.Instance is not IContainerProvider)
.Select(x => x.Instance)
.ToList();
args.Add(this);
return container.Resolve(type, name, args: args.ToArray());
}
catch (Exception ex)
{
@@ -409,7 +417,11 @@ public object Resolve(Type type, params (Type Type, object Instance)[] parameter
{
try
{
return Resolver.Resolve(type, args: parameters.Select(p => p.Instance).ToArray());
var args = parameters.Where(x => x.Instance is not IContainerProvider)
.Select(x => x.Instance)
.ToList();
args.Add(this);
return Resolver.Resolve(type, args: args.ToArray());
}
catch (Exception ex)
{
@@ -421,7 +433,11 @@ public object Resolve(Type type, string name, params (Type Type, object Instance
{
try
{
return Resolver.Resolve(type, name, args: parameters.Select(p => p.Instance).ToArray());
var args = parameters.Where(x => x.Instance is not IContainerProvider)
.Select(x => x.Instance)
.ToList();
args.Add(this);
return Resolver.Resolve(type, name, args: args.ToArray());
}
catch (Exception ex)
{
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using Prism.Controls;
using Prism.DryIoc.Maui.Tests.Mocks;

namespace Prism.DryIoc.Maui.Tests.Fixtures.Navigation;

public class NavigationTests
{
[Theory]
[InlineData("NavigationPage/MockViewA/MockViewB/MockViewC")]
[InlineData("MockHome/NavigationPage/MockViewA")]
public void PagesInjectScopedInstanceOfIPageAccessor(string uri)
{
var mauiApp = CreateBuilder()
.OnAppStart(navigation => navigation.NavigateAsync(uri))
.Build();
var app = mauiApp.Services.GetRequiredService<IApplication>() as Application;
var window = app!.Windows.First();

var rootPage = window.Page;

if(rootPage is FlyoutPage flyoutPage)
{
TestPage(flyoutPage);
rootPage = flyoutPage.Detail;
}

TestPage(rootPage!);

foreach (var page in rootPage!.Navigation.NavigationStack)
{
TestPage(page);
}
}

private void TestPage(Page page)
{
if (page is NavigationPage)
{
Assert.IsType<PrismNavigationPage>(page);
return;
}

var viewModel = page.BindingContext as MockViewModelBase;
Assert.NotNull(viewModel);
Assert.Same(page, viewModel!.Page);
}

private PrismAppBuilder CreateBuilder() =>
MauiApp.CreateBuilder()
.UsePrismApp<Application>()
.RegisterTypes(container =>
{
container.RegisterForNavigation<MockHome, MockHomeViewModel>()
.RegisterForNavigation<MockViewA, MockViewAViewModel>()
.RegisterForNavigation<MockViewB, MockViewBViewModel>()
.RegisterForNavigation<MockViewC, MockViewCViewModel>();
});
}
9 changes: 9 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockHome.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockHome : FlyoutPage
{
public MockHome()
{
Flyout = new ContentPage { Title = "Menu" };
}
}
10 changes: 10 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockHomeViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Prism.Common;

namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockHomeViewModel : MockViewModelBase
{
public MockHomeViewModel(IPageAccessor pageAccessor, INavigationService navigationService) : base(pageAccessor, navigationService)
{
}
}
3 changes: 3 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewA.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewA : ContentPage { }
10 changes: 10 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewAViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Prism.Common;

namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewAViewModel : MockViewModelBase
{
public MockViewAViewModel(IPageAccessor pageAccessor, INavigationService navigationService) : base(pageAccessor, navigationService)
{
}
}
3 changes: 3 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewB.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewB : ContentPage { }
10 changes: 10 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewBViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Prism.Common;

namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewBViewModel : MockViewModelBase
{
public MockViewBViewModel(IPageAccessor pageAccessor, INavigationService navigationService) : base(pageAccessor, navigationService)
{
}
}
3 changes: 3 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewC.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewC : ContentPage { }
10 changes: 10 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewCViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Prism.Common;

namespace Prism.DryIoc.Maui.Tests.Mocks;

public class MockViewCViewModel : MockViewModelBase
{
public MockViewCViewModel(IPageAccessor pageAccessor, INavigationService navigationService) : base(pageAccessor, navigationService)
{
}
}
23 changes: 23 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Mocks/MockViewModelBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Prism.Common;

namespace Prism.DryIoc.Maui.Tests.Mocks;

public abstract class MockViewModelBase : IConfirmNavigation
{
private readonly IPageAccessor _pageAccessor;

protected MockViewModelBase(IPageAccessor pageAccessor, INavigationService navigationService)
{
_pageAccessor = pageAccessor;
NavigationService = navigationService;
}

public INavigationService NavigationService { get; }

public Page? Page => _pageAccessor.Page;

public bool StopNavigation { get; set; }

public bool CanNavigate(INavigationParameters parameters) =>
!StopNavigation;
}
44 changes: 44 additions & 0 deletions tests/Prism.DryIoc.Maui.Tests/Prism.DryIoc.Maui.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<UseMaui>true</UseMaui>
</PropertyGroup>

<ItemGroup>
<Using Include="Xunit" />
<Using Include="Xunit.Abstractions" />
<Using Include="Prism" />
<Using Include="Prism.AppModel" />
<Using Include="Prism.Commands" />
<Using Include="Prism.Events" />
<Using Include="Prism.Ioc" />
<Using Include="Prism.Modularity" />
<Using Include="Prism.Mvvm" />
<Using Include="Prism.Navigation" />
<Using Include="Prism.Regions" />
<Using Include="Prism.Regions.Navigation" />
<Using Include="Prism.Services" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\Prism.DryIoc.Maui\Prism.DryIoc.Maui.csproj" />
</ItemGroup>

</Project>