diff --git a/src/modules/Elsa.Expressions/Extensions/TypeExtensions.cs b/src/modules/Elsa.Expressions/Extensions/TypeExtensions.cs index 9b4ae2283..09b5990a4 100644 --- a/src/modules/Elsa.Expressions/Extensions/TypeExtensions.cs +++ b/src/modules/Elsa.Expressions/Extensions/TypeExtensions.cs @@ -85,6 +85,14 @@ public static class TypeExtensions /// public static string GetFriendlyTypeName(this Type type, Brackets brackets) { + if (type.IsArray) + { + var elementTypeName = GetFriendlyTypeName(type.GetElementType()!, brackets); + var rank = type.GetArrayRank(); + var commas = rank > 1 ? new string(',', rank - 1) : string.Empty; + return elementTypeName + "[" + commas + "]"; + } + if (!type.IsGenericType) return type.FullName!; diff --git a/test/unit/Elsa.Expressions.UnitTests/Extensions/TypeExtensionsTests.cs b/test/unit/Elsa.Expressions.UnitTests/Extensions/TypeExtensionsTests.cs new file mode 100644 index 000000000..c8f48006e --- /dev/null +++ b/test/unit/Elsa.Expressions.UnitTests/Extensions/TypeExtensionsTests.cs @@ -0,0 +1,63 @@ +using Elsa.Expressions.Models; +using Elsa.Extensions; + +namespace Elsa.Expressions.UnitTests.Extensions; + +public class TypeExtensionsTests +{ + [Fact] + public void GetFriendlyTypeName_NonGenericType_ReturnsFullName() + { + var result = typeof(string).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal(typeof(string).FullName, result); + } + + [Fact] + public void GetFriendlyTypeName_GenericType_ReturnsFriendlyName() + { + var result = typeof(List).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.Collections.Generic.List", result); + } + + [Fact] + public void GetFriendlyTypeName_ArrayOfGenericType_ReturnsFriendlyName() + { + var result = typeof(List[]).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.Collections.Generic.List[]", result); + } + + [Fact] + public void GetFriendlyTypeName_ArrayOfNonGenericType_ReturnsFullNameWithBrackets() + { + var result = typeof(string[]).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.String[]", result); + } + + [Fact] + public void GetFriendlyTypeName_NestedGenericArray_ReturnsFriendlyName() + { + var result = typeof(Dictionary[]).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.Collections.Generic.Dictionary[]", result); + } + + [Fact] + public void GetFriendlyTypeName_MultiDimensionalArray_PreservesRank() + { + var result = typeof(int[,]).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.Int32[,]", result); + } + + [Fact] + public void GetFriendlyTypeName_MultiDimensionalGenericArray_PreservesRank() + { + var result = typeof(List[,]).GetFriendlyTypeName(Brackets.Angle); + Assert.Equal("System.Collections.Generic.List[,]", result); + } + + [Fact] + public void GetFriendlyTypeName_SquareBrackets_UsesCorrectBrackets() + { + var result = typeof(List).GetFriendlyTypeName(Brackets.Square); + Assert.Equal("System.Collections.Generic.List[System.String]", result); + } +}