From 443c237b43236459fa56c95dc79f31526f71408c Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Sat, 20 Sep 2025 10:35:18 +0200 Subject: [PATCH 1/3] Add test --- .../KnownTypeConvertersTests.cs | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs b/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs index 6f54636ee946..66c098b23e04 100644 --- a/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs +++ b/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs @@ -288,5 +288,47 @@ public TestPage() Assert.That(generated, Does.Contain("global::Microsoft.Maui.GridLength.Auto"), "Generated code should contain GridLength.Auto for 'Auto' value"); } + + [Test] + public void EnumTypeConverter() + { + const string xaml = """ + + + + + """; + + const string code = """ + using System; + using Microsoft.Maui.Controls; + using Microsoft.Maui.Controls.Xaml; + + namespace Test; + + [XamlProcessing(XamlInflator.SourceGen)] + public partial class TestPage : ContentPage + { + public TestPage() + { + InitializeComponent(); + } + } + """; + + var (result, generated) = RunGenerator(xaml, code); + + Assert.IsFalse(result.Diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error), + $"Generated code should not have errors. Diagnostics: {string.Join(", ", result.Diagnostics.Select(d => d.ToString()))}"); + + Assert.IsNotNull(generated, "Generated code should not be null"); + + // Should generate GridLength.Auto for "Auto" value + Assert.That(generated, Does.Contain("flexLayout.SetValue(global::Microsoft.Maui.Controls.FlexLayout.DirectionProperty, global::Microsoft.Maui.Layouts.FlexDirection.Row);"), + "Generated code should contain FlexDirection.Row for 'Row' value"); + } } } From 6fc4b6a8abe9711cd8e3419d19e203ba2e7411ec Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Sat, 20 Sep 2025 10:37:35 +0200 Subject: [PATCH 2/3] Fix enum converter --- src/Controls/src/SourceGen/TypeConverters/EnumConverter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Controls/src/SourceGen/TypeConverters/EnumConverter.cs b/src/Controls/src/SourceGen/TypeConverters/EnumConverter.cs index 013196188362..915fe33774d4 100644 --- a/src/Controls/src/SourceGen/TypeConverters/EnumConverter.cs +++ b/src/Controls/src/SourceGen/TypeConverters/EnumConverter.cs @@ -16,12 +16,12 @@ public string Convert(string value, BaseNode node, ITypeSymbol toType, SourceGen var xmlLineInfo = (IXmlLineInfo)node; if (!string.IsNullOrWhiteSpace(value) && toType is not null && toType.TypeKind == TypeKind.Enum) { - var detectedEnumValue = toType.GetFields().FirstOrDefault( + IFieldSymbol? detectedEnumValue = toType.GetFields().FirstOrDefault( f => string.Equals(f.Name, value, StringComparison.OrdinalIgnoreCase)); if (detectedEnumValue is not null) { - return $"{toType.ToFQDisplayString()}.{detectedEnumValue}"; + return $"{toType.ToFQDisplayString()}.{detectedEnumValue.Name}"; } } From 4ef5cf31219993a43e89606f3f92387aeb5e0c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Rozs=C3=ADval?= Date: Sat, 20 Sep 2025 10:44:02 +0200 Subject: [PATCH 3/3] Update src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs b/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs index 66c098b23e04..aa3e65f490e4 100644 --- a/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs +++ b/src/Controls/tests/SourceGen.UnitTests/KnownTypeConvertersTests.cs @@ -326,7 +326,7 @@ public TestPage() Assert.IsNotNull(generated, "Generated code should not be null"); - // Should generate GridLength.Auto for "Auto" value + // Should generate FlexDirection.Row for "Row" value Assert.That(generated, Does.Contain("flexLayout.SetValue(global::Microsoft.Maui.Controls.FlexLayout.DirectionProperty, global::Microsoft.Maui.Layouts.FlexDirection.Row);"), "Generated code should contain FlexDirection.Row for 'Row' value"); }