| File: MauiUnsupportedPlatformTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Maui.Tests\Aspire.Hosting.Maui.Tests.csproj (Aspire.Hosting.Maui.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting.Maui.Annotations; namespace Aspire.Hosting.Tests; /// <summary> /// Tests for UnsupportedPlatformAnnotation behavior on MAUI platform resources. /// </summary> public class MauiUnsupportedPlatformTests(ITestOutputHelper outputHelper) { [Fact] public void WindowsDevice_HasUnsupportedPlatformAnnotation_OnlyWhenNotOnWindows() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-windows10.0.19041.0")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var windows = maui.AddWindowsDevice(); var annotation = windows.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); if (OperatingSystem.IsWindows()) { // Windows is supported on a Windows host, so no annotation should be added. Assert.Null(annotation); } else { Assert.NotNull(annotation); Assert.Contains("Windows", annotation.Reason); } } [Fact] public void MacCatalystDevice_HasUnsupportedPlatformAnnotation_OnlyWhenNotOnMac() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-maccatalyst")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var macCatalyst = maui.AddMacCatalystDevice(); var annotation = macCatalyst.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); if (OperatingSystem.IsMacOS()) { // Mac Catalyst is supported on a macOS host, so no annotation should be added. Assert.Null(annotation); } else { Assert.NotNull(annotation); Assert.Contains("Mac Catalyst", annotation.Reason); } } [Fact] public void iOSDevice_HasUnsupportedPlatformAnnotation_OnlyWhenNotOnMac() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-ios")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var iosDevice = maui.AddiOSDevice(); var annotation = iosDevice.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); if (OperatingSystem.IsMacOS()) { // iOS development is supported on a macOS host, so no annotation should be added. Assert.Null(annotation); } else { Assert.NotNull(annotation); Assert.Contains("iOS", annotation.Reason); } } [Fact] public void iOSSimulator_HasUnsupportedPlatformAnnotation_OnlyWhenNotOnMac() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-ios")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var iosSimulator = maui.AddiOSSimulator(); var annotation = iosSimulator.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); if (OperatingSystem.IsMacOS()) { // iOS development is supported on a macOS host, so no annotation should be added. Assert.Null(annotation); } else { Assert.NotNull(annotation); Assert.Contains("iOS", annotation.Reason); } } [Fact] public void AndroidDevice_AlwaysSupported_NoUnsupportedAnnotation() { // Android is always allowed on all platforms (validation happens at dotnet run time) using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-android")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var androidDevice = maui.AddAndroidDevice(); var annotation = androidDevice.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); Assert.Null(annotation); } [Fact] public void AndroidEmulator_AlwaysSupported_NoUnsupportedAnnotation() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-android")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var androidEmulator = maui.AddAndroidEmulator(); var annotation = androidEmulator.Resource.Annotations.OfType<UnsupportedPlatformAnnotation>().FirstOrDefault(); Assert.Null(annotation); } [Fact] public void UnsupportedPlatformAnnotation_StoresReason() { var reason = "Test platform not available"; var annotation = new UnsupportedPlatformAnnotation(reason); Assert.Equal(reason, annotation.Reason); } }