using Avalonia.Controls; using Avalonia.Media; using Avalonia.Platform; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions; public class OnPlatformExtensionTests : XamlTestBase { [Fact] public void Should_Resolve_Default_Value() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.Unknown)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = (TextBlock)userControl.Content!; Assert.Equal("Hello World", textBlock.Text); } } [Fact] public void Should_Resolve_Default_Value_From_Ctor() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.Unknown)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = (TextBlock)userControl.Content!; Assert.Equal("Hello World", textBlock.Text); } } [Theory] [InlineData(OperatingSystemType.WinNT, "Im Windows")] [InlineData(OperatingSystemType.OSX, "Im macOS")] [InlineData(OperatingSystemType.Linux, "Im Linux")] [InlineData(OperatingSystemType.Android, "Im Android")] [InlineData(OperatingSystemType.iOS, "Im iOS")] [InlineData(OperatingSystemType.Browser, "Im Browser")] [InlineData(OperatingSystemType.Unknown, "Default value")] public void Should_Resolve_Expected_Value_Per_Platform(OperatingSystemType currentPlatform, string expectedResult) { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(currentPlatform)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = (TextBlock)userControl.Content!; Assert.Equal(expectedResult, textBlock.Text); } } [Fact] public void Should_Convert_Bcl_Type() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(50.1, border.Height); } } [Fact] public void Should_Convert_Avalonia_Type() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(new Thickness(10, 8, 10, 8), border.Padding); } } [Fact] public void Should_Respect_Custom_TypeArgument() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = (TextBlock)userControl.Content!; Assert.Equal(new Thickness(10, 10, 10, 10), textBlock.DataContext); } } [Fact] public void Should_Allow_Nester_Markup_Extensions() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" #ff506070 "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(Color.Parse("#ff506070"), ((ISolidColorBrush)border.Background!).Color); } } [Fact] public void Should_Allow_Nester_On_Platform_Markup_Extensions() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(new Thickness(10), border.Margin); } } [Fact] public void Should_Support_Xml_Syntax() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(Color.Parse("#ff506070"), ((ISolidColorBrush)border.Background!).Color); } } [Fact] public void Should_Support_Xml_Syntax_With_Custom_TypeArguments() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(new Thickness(10, 10, 10, 10), border.Tag); } } [Theory] [InlineData(OperatingSystemType.OSX, "#ff506070")] [InlineData(OperatingSystemType.Linux, "#000")] public void Should_Support_Special_On_Syntax(OperatingSystemType os, string color) { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(os)); var xaml = @" "; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)userControl.Content!; Assert.Equal(Color.Parse(color), ((ISolidColorBrush)border.Background!).Color); } } [Fact] public void Should_Support_Control_Inside_Xml_Syntax() { using (AvaloniaLocator.EnterScope()) { AvaloniaLocator.CurrentMutable.Bind() .ToConstant(new TestRuntimePlatform(OperatingSystemType.WinNT)); var xaml = @"