diff --git a/src/libraries/Fuzzing/DotnetFuzzing/Fuzzers/AssemblyNameInfoFuzzer.cs b/src/libraries/Fuzzing/DotnetFuzzing/Fuzzers/AssemblyNameInfoFuzzer.cs index 2e8d3fc102f76a..4dd81c01864a46 100644 --- a/src/libraries/Fuzzing/DotnetFuzzing/Fuzzers/AssemblyNameInfoFuzzer.cs +++ b/src/libraries/Fuzzing/DotnetFuzzing/Fuzzers/AssemblyNameInfoFuzzer.cs @@ -61,9 +61,21 @@ private static void Test(Span span) Assert.Equal(fromTryParse.ToAssemblyName().CultureName, fromParse.ToAssemblyName().CultureName); Assert.Equal(fromTryParse.Name, fromParse.ToAssemblyName().Name); - Assert.Equal(fromTryParse.CultureName, fromParse.ToAssemblyName().CultureName); Assert.Equal(fromTryParse.Version, fromParse.ToAssemblyName().Version); + if (fromTryParse.CultureName is not null) + { + // When converting to AssemblyName, the culture name is lower-cased + // by the CultureInfo ctor that calls CultureData.GetCultureData + // which lowers the name for caching and normalization purposes. + Assert.Equal(fromTryParse.CultureName.ToLower(), fromParse.ToAssemblyName().CultureName); + } + else + { + Assert.True(fromParse.ToAssemblyName().CultureName is null); + } + + // AssemblyNameInfo.FullName can be different than AssemblyName.FullName: // AssemblyNameInfo includes public key, AssemblyName only its Token. diff --git a/src/libraries/System.Reflection.Metadata/tests/Metadata/AssemblyNameInfoTests.cs b/src/libraries/System.Reflection.Metadata/tests/Metadata/AssemblyNameInfoTests.cs index c766e6bd4d5593..76448ee80a3565 100644 --- a/src/libraries/System.Reflection.Metadata/tests/Metadata/AssemblyNameInfoTests.cs +++ b/src/libraries/System.Reflection.Metadata/tests/Metadata/AssemblyNameInfoTests.cs @@ -105,6 +105,17 @@ public void EmptyInputIsInvalid() Assert.Throws(() => AssemblyNameInfo.Parse("".AsSpan())); } + [Fact] + public void CultureNameGetLoweredByToAssemblyName() + { + AssemblyNameInfo assemblyNameInfo = AssemblyNameInfo.Parse("test,culture=aA".AsSpan()); + Assert.Equal("aA", assemblyNameInfo.CultureName); + // When converting to AssemblyName, the culture name is lower-cased + // by the CultureInfo ctor that calls CultureData.GetCultureData + // which lowers the name for caching and normalization purposes. + Assert.Equal("aa", assemblyNameInfo.ToAssemblyName().CultureName); + } + static void Roundtrip(AssemblyName source) { AssemblyNameInfo parsed = AssemblyNameInfo.Parse(source.FullName.AsSpan());