Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .github/workflows/build_uno.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ jobs:
uno-check: false
uno-check-version: 1.33.1
uno-check-parameters: '--skip xcode --skip gtk3 --skip vswin --skip androidemulator --skip androidsdk --skip vsmac --skip dotnetnewunotemplates'
run-tests: false
run-tests: true
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
uno-check: false
uno-check-version: 1.33.1
uno-check-parameters: '--skip xcode --skip gtk3 --skip vswin --skip androidemulator --skip androidsdk --skip vsmac --skip dotnetnewunotemplates'
run-tests: false
run-tests: true
code-sign: false
artifact-name: Uno
secrets:
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
<!-- Tests -->
<ItemGroup>
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="coverlet.msbuild" Version="6.0.2" />
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
<PackageVersion Include="Xamarin.Forms.Mocks" Version="4.7.0.1" />
<PackageVersion Include="Humanizer.Core" Version="2.14.1" />
Expand Down
39 changes: 39 additions & 0 deletions PrismLibrary.sln
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.IocContainer.Avalonia
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Avalonia", "Avalonia", "{904D5094-55F9-4581-90AC-D6C1131F8152}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Uno", "Uno", "{8B763117-8E13-0D1A-AFE0-5BC3FACCF29C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prism.Uno.WinUI.Tests", "tests\Uno\Prism.Uno.WinUI.Tests\Prism.Uno.WinUI.Tests.csproj", "{05132055-211C-42D4-B40A-39E4BB066E7B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Prism.Uno", "Prism.Uno", "{1E1EDCAE-FD32-8442-764F-7F151A12D8D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prism.DryIoc.Uno.WinUI.Tests", "tests\Uno\Prism.DryIoc.Uno.WinUI.Tests\Prism.DryIoc.Uno.WinUI.Tests.csproj", "{158173F6-E776-422C-9127-8994C504867B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Prism.DryIoc.Uno", "Prism.DryIoc.Uno", "{064C69BC-4576-336C-79BF-6771226CD9DC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -372,6 +382,30 @@ Global
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x64.Build.0 = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x86.ActiveCfg = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x86.Build.0 = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|x64.ActiveCfg = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|x64.Build.0 = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|x86.ActiveCfg = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Debug|x86.Build.0 = Debug|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|Any CPU.Build.0 = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|x64.ActiveCfg = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|x64.Build.0 = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|x86.ActiveCfg = Release|Any CPU
{05132055-211C-42D4-B40A-39E4BB066E7B}.Release|x86.Build.0 = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|x64.ActiveCfg = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|x64.Build.0 = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|x86.ActiveCfg = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Debug|x86.Build.0 = Debug|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|Any CPU.Build.0 = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|x64.ActiveCfg = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|x64.Build.0 = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|x86.ActiveCfg = Release|Any CPU
{158173F6-E776-422C-9127-8994C504867B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -409,6 +443,11 @@ Global
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{887E0794-798D-4127-847E-6F68D5C9B334} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{904D5094-55F9-4581-90AC-D6C1131F8152} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
{8B763117-8E13-0D1A-AFE0-5BC3FACCF29C} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
{05132055-211C-42D4-B40A-39E4BB066E7B} = {8B763117-8E13-0D1A-AFE0-5BC3FACCF29C}
{1E1EDCAE-FD32-8442-764F-7F151A12D8D4} = {8F959801-D494-4CAF-9437-90F30472E169}
{158173F6-E776-422C-9127-8994C504867B} = {8B763117-8E13-0D1A-AFE0-5BC3FACCF29C}
{064C69BC-4576-336C-79BF-6771226CD9DC} = {8F959801-D494-4CAF-9437-90F30472E169}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C7433AE2-B1A0-4C1A-887E-5CAA7AAF67A6}
Expand Down
4 changes: 3 additions & 1 deletion PrismLibrary_Uno.slnf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
"src\\Uno\\Prism.DryIoc.Uno\\Prism.DryIoc.Uno.WinUI.csproj",
"src\\Uno\\Prism.Uno\\Prism.Uno.WinUI.csproj",
"src\\Uno\\Prism.Uno.Markup\\Prism.Uno.WinUI.Markup.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj"
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj",
"tests\\Uno\\Prism.DryIoc.Uno.WinUI.Tests\\Prism.DryIoc.Uno.WinUI.Tests.csproj",
"tests\\Uno\\Prism.Uno.WinUI.Tests\\Prism.Uno.WinUI.Tests.csproj"
]
}
}
18 changes: 18 additions & 0 deletions tests/Uno/Prism.DryIoc.Uno.WinUI.Tests/ContainerHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using DryIoc;
using Prism.Container.DryIoc;
using Prism.Ioc;

namespace Prism.Container.Uno.Tests;

public static class ContainerHelper
{
private static Rules CreateContainerRules() => Rules.Default.WithAutoConcreteTypeResolution()
.With(Made.Of(FactoryMethod.ConstructorWithResolvableArguments))
.WithDefaultIfAlreadyRegistered(IfAlreadyRegistered.Replace);

public static IContainer CreateContainer() => new global::DryIoc.Container(CreateContainerRules());

public static IContainerExtension CreateContainerExtension() => new DryIocContainerExtension(CreateContainer());

public static Type RegisteredFrameworkException => typeof(ContainerException);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="GitHubActionsTestLogger">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Moq" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Xunit.StaFact" />
</ItemGroup>

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

</Project>
63 changes: 63 additions & 0 deletions tests/Uno/Prism.DryIoc.Uno.WinUI.Tests/PrismApplicationFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System.Reflection;
using System.Runtime.Serialization;
using DryIoc;
using Prism.Container.DryIoc;
using Prism.Ioc;
using Xunit;
using static Prism.Container.Uno.Tests.ContainerHelper;
using ExceptionExtensions = System.ExceptionExtensions;

namespace Prism.DryIoc.Uno.WinUI.Tests;

public class PrismApplicationFixture
{
[Fact]
public void CreateContainerExtensionReturnsDryIocContainerExtension()
{
var app = (PrismApplication)FormatterServices.GetUninitializedObject(typeof(PrismApplicationProxy));
var method = typeof(PrismApplication).GetMethod("CreateContainerExtension", BindingFlags.NonPublic | BindingFlags.Instance);

var container = method!.Invoke(app, null);

Assert.IsType<DryIocContainerExtension>(container!);
}

[Fact]
public void RegisterFrameworkExceptionTypesRegistersContainerException()
{
var app = (PrismApplication)FormatterServices.GetUninitializedObject(typeof(PrismApplicationProxy));
var method = typeof(PrismApplication).GetMethod("RegisterFrameworkExceptionTypes", BindingFlags.NonPublic | BindingFlags.Instance);

method!.Invoke(app, null);

Assert.True(ExceptionExtensions.IsFrameworkExceptionRegistered(RegisteredFrameworkException));
}

[Fact]
public void CreateContainerRulesReturnsDryIocRules()
{
var app = (PrismApplication)FormatterServices.GetUninitializedObject(typeof(PrismApplicationProxy));
var method = typeof(PrismApplication).GetMethod("CreateContainerRules", BindingFlags.NonPublic | BindingFlags.Instance);

var rules = method!.Invoke(app, null);

Assert.NotNull(rules);
Assert.IsType<Rules>(rules);
}

[Fact]
public void PrismApplicationRemainsAbstractAndExtendsPrismApplicationBase()
{
Assert.True(typeof(PrismApplication).IsAbstract);
Assert.Equal(typeof(PrismApplicationBase), typeof(PrismApplication).BaseType);
}

private sealed class PrismApplicationProxy : PrismApplication
{
protected override UIElement CreateShell() => null!;

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
}
}
}
61 changes: 61 additions & 0 deletions tests/Uno/Prism.Uno.WinUI.Tests/ApiContractInventoryFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System.Reflection;
using Xunit;

namespace Prism.Uno.WinUI.Tests;

public class ApiContractInventoryFixture
{
private static readonly Assembly PrismAssembly = typeof(PrismApplicationBase).Assembly;

public static IEnumerable<object[]> ExportedPrismTypeCases()
{
return PrismAssembly
.GetExportedTypes()
.Where(t => t.Namespace is not null && t.Namespace.StartsWith("Prism", StringComparison.Ordinal))
.OrderBy(t => t.FullName, StringComparer.Ordinal)
.Select(t => new object[] { t.FullName! });
}

public static IEnumerable<object[]> PublicMemberCases()
{
const BindingFlags memberFlags =
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.DeclaredOnly;

return PrismAssembly
.GetExportedTypes()
.Where(t => t.Namespace is not null && t.Namespace.StartsWith("Prism", StringComparison.Ordinal))
.OrderBy(t => t.FullName, StringComparer.Ordinal)
.SelectMany(t => t
.GetMembers(memberFlags)
.Where(m => m.MemberType is MemberTypes.Method or MemberTypes.Property or MemberTypes.Field or MemberTypes.Event)
.OrderBy(m => m.Name, StringComparer.Ordinal)
.Select(m => new object[] { t.FullName!, m.Name, m.MemberType.ToString() }))
.Take(450);
}

[Theory]
[MemberData(nameof(ExportedPrismTypeCases))]
public void ExportedPrismTypeIsLoadable(string fullTypeName)
{
Assert.NotNull(PrismAssembly.GetType(fullTypeName));
}

[Theory]
[MemberData(nameof(PublicMemberCases))]
public void PublicContractMemberIsDiscoverable(string fullTypeName, string memberName, string memberKind)
{
var type = PrismAssembly.GetType(fullTypeName);
Assert.NotNull(type);

const BindingFlags lookupFlags =
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.Static;

var members = type!.GetMember(memberName, lookupFlags);
Assert.Contains(members, m => string.Equals(m.MemberType.ToString(), memberKind, StringComparison.Ordinal));
}
}
Loading
Loading