public void FakeCorLib() { var assemblies = MetadataTestHelpers.GetSymbolsForReferences(new[] { TestReferences.SymbolsTests.CorLibrary.FakeMsCorLib.dll }); MetadataOrSourceAssemblySymbol msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; for (int i = 1; i <= (int)SpecialType.Count; i++) { Assert.True(msCorLibRef.KeepLookingForDeclaredSpecialTypes); var t = msCorLibRef.GetSpecialType((SpecialType)i); Assert.Equal((SpecialType)i, t.SpecialType); if (t.SpecialType == SpecialType.System_Object) { Assert.NotEqual(TypeKind.Error, t.TypeKind); } else { Assert.Equal(TypeKind.Error, t.TypeKind); Assert.Same(msCorLibRef, t.ContainingAssembly); } Assert.Same(msCorLibRef, t.ContainingAssembly); } Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); }
public void PresentCorLib() { using (var @lock = MetadataCache.LockAndClean()) { var assemblies = MetadataTestHelpers.GetSymbolsForReferences(new[] { TestReferences.NetFx.v4_0_21006.mscorlib }); MetadataOrSourceAssemblySymbol msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; for (int i = 1; i <= (int)SpecialType.Count; i++) { var t = msCorLibRef.GetSpecialType((SpecialType)i); Assert.Equal((SpecialType)i, t.SpecialType); Assert.Same(msCorLibRef, t.ContainingAssembly); } Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); @lock.CleanCaches(); assemblies = MetadataTestHelpers.GetSymbolsForReferences(mrefs: new[] { new MetadataImageReference(ProprietaryTestResources.NetFX.v4_0_30316_17626.mscorlib.AsImmutableOrNull()) }); msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; Assert.True(msCorLibRef.KeepLookingForDeclaredSpecialTypes); Queue <NamespaceSymbol> namespaces = new Queue <NamespaceSymbol>(); namespaces.Enqueue(msCorLibRef.Modules[0].GlobalNamespace); int count = 0; while (namespaces.Count > 0) { foreach (var m in namespaces.Dequeue().GetMembers()) { NamespaceSymbol ns = m as NamespaceSymbol; if (ns != null) { namespaces.Enqueue(ns); } else if (((NamedTypeSymbol)m).SpecialType != SpecialType.None) { count++; } if (count >= (int)SpecialType.Count) { Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); } } } Assert.Equal(count, (int)SpecialType.Count); Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); } }
public void PresentCorLib() { var assemblies = MetadataTestHelpers.GetSymbolsForReferences(new[] { TestReferences.NetStandard30.SystemRuntimeRef }); MetadataOrSourceAssemblySymbol msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; for (int i = 1; i <= (int)SpecialType.Count; i++) { var t = msCorLibRef.GetSpecialType((SpecialType)i); Assert.Equal((SpecialType)i, t.SpecialType); Assert.Same(msCorLibRef, t.ContainingAssembly); } Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); assemblies = MetadataTestHelpers.GetSymbolsForReferences(mrefs: new[] { MetadataReference.CreateFromImage(TestResources.NetFX.netstandard30.System_Runtime.AsImmutableOrNull()) }); msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; Assert.True(msCorLibRef.KeepLookingForDeclaredSpecialTypes); Queue <NamespaceSymbol> namespaces = new Queue <NamespaceSymbol>(); namespaces.Enqueue(msCorLibRef.Modules[0].GlobalNamespace); int count = 0; while (namespaces.Count > 0) { foreach (var m in namespaces.Dequeue().GetMembers()) { NamespaceSymbol ns = m as NamespaceSymbol; if (ns != null) { namespaces.Enqueue(ns); } else if (((NamedTypeSymbol)m).SpecialType != SpecialType.None) { count++; } if (count >= (int)SpecialType.Count) { Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); } } } Assert.Equal(count, (int)SpecialType.Count); Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); }
public void SourceCorLib() { string source = @" namespace System { public class Object { } } "; var c1 = CSharpCompilation.Create("CorLib", syntaxTrees: new[] { Parse(source) }); Assert.Same(c1.Assembly, c1.Assembly.CorLibrary); MetadataOrSourceAssemblySymbol msCorLibRef = (MetadataOrSourceAssemblySymbol)c1.Assembly; for (int i = 1; i <= (int)SpecialType.Count; i++) { if (i != (int)SpecialType.System_Object) { Assert.True(msCorLibRef.KeepLookingForDeclaredSpecialTypes); var t = c1.GetSpecialType((SpecialType)i); Assert.Equal((SpecialType)i, t.SpecialType); Assert.Equal(TypeKind.Error, t.TypeKind); Assert.Same(msCorLibRef, t.ContainingAssembly); } } var system_object = msCorLibRef.Modules[0].GlobalNamespace .GetMembers("System") .Select(m => (NamespaceSymbol)m) .Single() .GetTypeMembers("Object") .Single(); Assert.Equal(SpecialType.System_Object, system_object.SpecialType); Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); Assert.Same(system_object, c1.GetSpecialType(SpecialType.System_Object)); Assert.Throws <ArgumentOutOfRangeException>(() => c1.GetSpecialType(SpecialType.None)); Assert.Throws <ArgumentOutOfRangeException>( () => c1.GetSpecialType(SpecialType.Count + 1) ); }
public void PresentCorLib() { var assemblies = MetadataTestHelpers.GetSymbolsForReferences(new[] { TestMetadata.NetCoreApp.SystemRuntime }); MetadataOrSourceAssemblySymbol msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; var knownMissingTypes = new HashSet <int>() { }; for (int i = 1; i <= (int)SpecialType.Count; i++) { var t = msCorLibRef.GetSpecialType((SpecialType)i); Assert.Equal((SpecialType)i, t.SpecialType); Assert.Same(msCorLibRef, t.ContainingAssembly); if (knownMissingTypes.Contains(i)) { // not present on dotnet core 3.1 Assert.Equal(TypeKind.Error, t.TypeKind); } else { Assert.NotEqual(TypeKind.Error, t.TypeKind); } } Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); assemblies = MetadataTestHelpers.GetSymbolsForReferences(mrefs: new[] { MetadataReference.CreateFromImage(TestMetadata.ResourcesNetCoreApp.SystemRuntime.AsImmutableOrNull()) }); msCorLibRef = (MetadataOrSourceAssemblySymbol)assemblies[0]; Assert.True(msCorLibRef.KeepLookingForDeclaredSpecialTypes); Queue <NamespaceSymbol> namespaces = new Queue <NamespaceSymbol>(); namespaces.Enqueue(msCorLibRef.Modules[0].GlobalNamespace); int count = 0; while (namespaces.Count > 0) { foreach (var m in namespaces.Dequeue().GetMembers()) { NamespaceSymbol ns = m as NamespaceSymbol; if (ns != null) { namespaces.Enqueue(ns); } else if (((NamedTypeSymbol)m).SpecialType != SpecialType.None) { count++; } if (count >= (int)SpecialType.Count) { Assert.False(msCorLibRef.KeepLookingForDeclaredSpecialTypes); } } } Assert.Equal(count + knownMissingTypes.Count, (int)SpecialType.Count); Assert.Equal(knownMissingTypes.Any(), msCorLibRef.KeepLookingForDeclaredSpecialTypes); }