/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/LoadingFields.cs
159 строк
7 KB
Jared Parsons
Move to basic ref assemblies for net40 (#74796)
19 авг 2024, 18:39
Не верифицирован
19 авг 2024, 18:39
2d074ba
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Linq; using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE; using Microsoft.CodeAnalysis.CSharp.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities; using Roslyn.Test.Utilities; using Xunit; using Basic.Reference.Assemblies; namespace Microsoft.CodeAnalysis.CSharp.UnitTests.Symbols.Metadata.PE { public class LoadingFields : CSharpTestBase { [Fact] public void Test1() { var assemblies = MetadataTestHelpers.GetSymbolsForReferences(mrefs: new[] { TestReferences.SymbolsTests.Fields.CSFields.dll, TestReferences.SymbolsTests.Fields.VBFields.dll, Net40.References.mscorlib }, options: TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.Internal)); var module1 = assemblies[0].Modules[0]; var module2 = assemblies[1].Modules[0]; var module3 = assemblies[2].Modules[0]; var vbFields = module2.GlobalNamespace.GetTypeMembers("VBFields").Single(); var csFields = module1.GlobalNamespace.GetTypeMembers("CSFields").Single(); var f1 = (FieldSymbol)vbFields.GetMembers("F1").Single(); var f2 = (FieldSymbol)vbFields.GetMembers("F2").Single(); var f3 = (FieldSymbol)vbFields.GetMembers("F3").Single(); var f4 = (FieldSymbol)vbFields.GetMembers("F4").Single(); var f5 = (FieldSymbol)vbFields.GetMembers("F5").Single(); var f6 = (FieldSymbol)csFields.GetMembers("F6").Single(); Assert.Equal("F1", f1.Name); Assert.Same(vbFields.TypeParameters[0], f1.Type); Assert.False(f1.IsAbstract); Assert.False(f1.IsConst); Assert.True(f1.IsDefinition); Assert.False(f1.IsExtern); Assert.False(f1.IsOverride); Assert.False(f1.IsReadOnly); Assert.False(f1.IsSealed); Assert.True(f1.IsStatic); Assert.False(f1.IsVirtual); Assert.False(f1.IsVolatile); Assert.Equal(SymbolKind.Field, f1.Kind); Assert.Equal(module2.Locations, f1.Locations); Assert.Same(f1, f1.OriginalDefinition); Assert.Equal(Accessibility.Public, f1.DeclaredAccessibility); Assert.Same(vbFields, f1.ContainingSymbol); Assert.Equal(0, f1.TypeWithAnnotations.CustomModifiers.Length); Assert.Equal("F2", f2.Name); Assert.Same(((PEModuleSymbol)module2).GetCorLibType(SpecialType.System_Int32), f2.Type); Assert.False(f2.IsConst); Assert.True(f2.IsReadOnly); Assert.False(f2.IsStatic); Assert.False(f2.IsVolatile); Assert.Equal(Accessibility.Protected, f2.DeclaredAccessibility); Assert.Equal(0, f2.TypeWithAnnotations.CustomModifiers.Length); Assert.Equal("F3", f3.Name); Assert.False(f3.IsConst); Assert.False(f3.IsReadOnly); Assert.False(f3.IsStatic); Assert.False(f3.IsVolatile); Assert.Equal(Accessibility.Internal, f3.DeclaredAccessibility); Assert.Equal(0, f3.TypeWithAnnotations.CustomModifiers.Length); Assert.Equal("F4", f4.Name); Assert.False(f4.IsConst); Assert.False(f4.IsReadOnly); Assert.False(f4.IsStatic); Assert.False(f4.IsVolatile); Assert.Equal(Accessibility.ProtectedOrInternal, f4.DeclaredAccessibility); Assert.Equal(0, f4.TypeWithAnnotations.CustomModifiers.Length); Assert.Equal("F5", f5.Name); Assert.True(f5.IsConst); Assert.False(f5.IsReadOnly); Assert.True(f5.IsStatic); Assert.False(f5.IsVolatile); Assert.Equal(Accessibility.Protected, f5.DeclaredAccessibility); Assert.Equal(0, f5.TypeWithAnnotations.CustomModifiers.Length); Assert.Equal("F6", f6.Name); Assert.False(f6.IsConst); Assert.False(f6.IsReadOnly); Assert.False(f6.IsStatic); Assert.True(f6.IsVolatile); Assert.Equal(1, f6.TypeWithAnnotations.CustomModifiers.Length); CustomModifier mod = f6.TypeWithAnnotations.CustomModifiers[0]; Assert.False(mod.IsOptional); Assert.Equal("System.Runtime.CompilerServices.IsVolatile", mod.Modifier.ToTestDisplayString()); Assert.Equal(SymbolKind.NamedType, csFields.GetMembers("FFF").Single().Kind); Assert.Equal(SymbolKind.Field, csFields.GetMembers("Fff").Single().Kind); Assert.Equal(SymbolKind.Method, csFields.GetMembers("FfF").Single().Kind); } [Fact] [WorkItem(193333, "https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?_a=edit&id=193333")] public void EnumWithPrivateValueField() { var il = @" .class public auto ansi sealed TestEnum extends [mscorlib]System.Enum { .field private specialname rtspecialname int32 value__ .field public static literal valuetype TestEnum Value1 = int32(0x00000000) .field public static literal valuetype TestEnum Value2 = int32(0x00000001) } // end of class TestEnum "; var text = @" class Program { static void Main() { TestEnum val = TestEnum.Value1; System.Console.WriteLine(val.ToString()); val = TestEnum.Value2; System.Console.WriteLine(val.ToString()); } } "; var compilation = CreateCompilationWithILAndMscorlib40(text, il, options: TestOptions.DebugExe); CompileAndVerify(compilation, expectedOutput: @"Value1 Value2"); } [Fact] public void TestLoadFieldsOfReadOnlySpanFromCorlib() { var comp = CreateCompilation("", targetFramework: TargetFramework.Net60); var readOnlySpanType = comp.GetSpecialType(InternalSpecialType.System_ReadOnlySpan_T); Assert.False(readOnlySpanType.IsErrorType()); Assert.Equal(SpecialType.None, readOnlySpanType.SpecialType); Assert.Equal((ExtendedSpecialType)InternalSpecialType.System_ReadOnlySpan_T, readOnlySpanType.ExtendedSpecialType); var fields = readOnlySpanType.GetMembers().OfType<FieldSymbol>(); Assert.NotEmpty(fields); } } }