/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.cs
5 968 строк
237 KB
Cyrus Najmabadi
Make tests synchronous
08 июл 2025, 22:11
08 июл 2025, 22:11
542bfda
Код
Авторство
О чём код?
// 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. using System; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CodeGeneration; using Microsoft.CodeAnalysis.CSharp.Formatting; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Test.Utilities; using Roslyn.Test.Utilities; using Xunit; using CS = Microsoft.CodeAnalysis.CSharp; using VB = Microsoft.CodeAnalysis.VisualBasic; namespace Microsoft.CodeAnalysis.Editor.UnitTests.MetadataAsSource; [UseExportProvider] [Trait(Traits.Feature, Traits.Features.MetadataAsSource)] public sealed partial class MetadataAsSourceTests : AbstractMetadataAsSourceTests { public enum OriginatingProjectLanguage { CSharp, VisualBasic, } private static string ToLanguageName(OriginatingProjectLanguage language) => language switch { OriginatingProjectLanguage.CSharp => LanguageNames.CSharp, OriginatingProjectLanguage.VisualBasic => LanguageNames.VisualBasic, _ => throw ExceptionUtilities.UnexpectedValue(language), }; [WpfTheory, CombinatorialData] public async Task TestClass(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|C|] { public C(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class [|C|] Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C {}", "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546241"), CombinatorialData] public async Task TestInterface(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public interface [|I|] { } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Interface [|I|] End Interface """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public interface [|I|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public interface [|I|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public interface I {}", "I", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestConstructor(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public [|C|](); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Sub [|New|]() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C {}", "C..ctor", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestMethod(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public C(); public void [|Goo|](); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Sub New() Public Sub [|Goo|]() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public void [|Goo|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public void [|Goo|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { public void Goo() {} }", "C.Goo", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestField(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public string [|S|]; public C(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public [|S|] As String Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public string [|S|]; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public string [|S|]; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { public string S; }", "C.S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546240"), CombinatorialData] public async Task TestProperty(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public C(); public string [|S|] { get; protected set; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Sub New() Public Property [|S|] As String End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public string [|S|] { get; protected set; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public string [|S|] { get; protected set; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { public string S { get; protected set; } }", "C.S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546291"), CombinatorialData] [WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546194")] public async Task TestEvent(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; public class C { public C(); public event Action [|E|]; } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System Public Class C Public Sub New() Public Event [|E|] As Action End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public class C { public event Action [|E|]; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public class C { public event Action [|E|]; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("using System; public class C { public event Action E; }", "C.E", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestNestedType(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public C(); protected class [|D|] { public D(); } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Sub New() Protected Class [|D|] Public Sub New() End Class End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { protected class [|D|] { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { protected class [|D|] { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { protected class D { } }", "C+D", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546195"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546269"), CombinatorialData] public async Task TestEnum(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum [|E|] { A = 0, B = 1, C = 2 } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Enum [|E|] A = 0 B = 1 C = 2 End Enum """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum [|E|] { A, B, C } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum [|E|] { A, B, C } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public enum E { A, B, C }", "E", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546195"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546269"), CombinatorialData] public async Task TestEnumFromField(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum E { A = 0, B = 1, [|C|] = 2 } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Enum E A = 0 B = 1 [|C|] = 2 End Enum """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E { A, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E { A, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public enum E { A, B, C }", "E.C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546273"), CombinatorialData] public async Task TestEnumWithUnderlyingType(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum E : short { A = 0, B = 1, [|C|] = 2 } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Enum E As Short A = 0 B = 1 [|C|] = 2 End Enum """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : short { A, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : short { A, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public enum E : short { A = 0, B = 1, C = 2 }", "E.C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/650741"), CombinatorialData] public async Task TestEnumWithOverflowingUnderlyingType(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum E : ulong { [|A|] = 9223372036854775808 } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Enum E As ULong [|A|] = 9223372036854775808UL End Enum """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : ulong { [|A|] = 9223372036854775808uL } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : ulong { [|A|] = 9223372036854775808uL } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public enum E : ulong { A = 9223372036854775808 }", "E.A", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestEnumWithDifferentValues(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum E : short { A = 1, B = 2, [|C|] = 3 } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Enum E As Short A = 1 B = 2 [|C|] = 3 End Enum """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : short { A = 1, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public enum E : short { A = 1, B, [|C|] } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public enum E : short { A = 1, B = 2, C = 3 }", "E.C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546198"), CombinatorialData] public async Task TestTypeInNamespace(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion namespace N { public class [|C|] { public C(); } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Namespace N Public Class [|C|] Public Sub New() End Class End Namespace """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion namespace N; public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion namespace N; public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("namespace N { public class C {} }", "N.C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546198")] public async Task TestTypeInFileScopedNamespace1() { var metadataSource = "namespace N { public class C {} }"; using var context = TestContext.Create( LanguageNames.CSharp, [metadataSource], languageVersion: "10", fileScopedNamespaces: true); await context.GenerateAndVerifySourceAsync("N.C", $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion namespace N; public class [|C|] { public C(); } """); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546198")] public async Task TestTypeInFileScopedNamespace2() { var metadataSource = "namespace N { public class C {} }"; using var context = TestContext.Create( LanguageNames.CSharp, [metadataSource], languageVersion: "9", fileScopedNamespaces: true); await context.GenerateAndVerifySourceAsync("N.C", $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion namespace N { public class [|C|] { public C(); } } """); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546198")] public async Task TestTypeInFileScopedNamespace3() { var metadataSource = "namespace N { public class C {} }"; using var context = TestContext.Create( LanguageNames.CSharp, [metadataSource], languageVersion: "10"); await context.GenerateAndVerifySourceAsync("N.C", $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion namespace N { public class [|C|] { public C(); } } """); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546223"), CombinatorialData] public async Task TestInlineConstant(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public const string [|S|] = "Hello mas"; public C(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Const [|S|] As String = "Hello mas" Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public const string [|S|] = "Hello mas"; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public const string [|S|] = "Hello mas"; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(@"public class C { public const string S = ""Hello mas""; }", "C.S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546221"), CombinatorialData] public async Task TestInlineTypeOf(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion [MyType(typeof(string))] public class [|C|] { public C(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region <MyType(GetType(String))> Public Class [|C|] Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion [MyType(typeof(string))] public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion [MyType(typeof(string))] public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; public class MyTypeAttribute : Attribute { public MyTypeAttribute(Type type) {} } [MyType(typeof(string))] public class C {} """, "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546231"), CombinatorialData] public async Task TestNoDefaultConstructorInStructs(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct [|S|] { } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure [|S|] End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public struct S {}", "S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestReferenceDefinedType(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|C|] { public C(); public static C Create(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class [|C|] Public Sub New() Public Shared Function Create() As C End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { public static C Create() { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|] { public static C Create() { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { public static C Create() { return new C(); } }", "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546227"), CombinatorialData] public async Task TestGenericType(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|G|]<SomeType> { public SomeType S; public G(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class [|G|](Of SomeType) Public S As SomeType Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|G|]<SomeType> { public SomeType S; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|G|]<SomeType> { public SomeType S; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class G<SomeType> { public SomeType S; }", "G`1", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] [WorkItem("https://github.com/dotnet/roslyn/issues/38916")] public async Task TestParameterAttributes(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|C|]<[MyAttribute] T> { public C(); public void Method([MyAttribute] T x, [MyAttribute] T y); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class [|C|](Of T) Public Sub New() Public Sub Method(<MyAttribute> x As T, <MyAttribute> y As T) End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|]<[My] T> { public void Method([My] T x, [My] T y) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|C|]<[My] T> { public void Method([My] T x, [My] T y) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public class C<[My] T> { public void Method([My] T x, [My] T y) { } } internal class MyAttribute : System.Attribute { } """, "C`1", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] [WorkItem("https://github.com/dotnet/roslyn/issues/38916")] public async Task TestGenericWithNullableReferenceTypes(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public interface [|C|]<T> { bool Equals([AllowNullAttribute] T other); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Interface [|C|](Of T) Function Equals(<AllowNullAttribute> other As T) As Boolean End Interface """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public interface [|C|]<T> { bool Equals([AllowNull] T other); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public interface [|C|]<T> { bool Equals([AllowNull] T other); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" #nullable enable public interface C<T> { bool Equals([AllowNull] T other); } internal class AllowNullAttribute : System.Attribute { } """, "C`1", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546227"), CombinatorialData] public async Task TestGenericDelegate(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public C(); public delegate void [|D|]<SomeType>(SomeType s); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Class C Public Sub New() Public Delegate Sub [|D|](Of SomeType)(s As SomeType) End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public delegate void [|D|]<SomeType>(SomeType s); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class C { public delegate void [|D|]<SomeType>(SomeType s); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync("public class C { public delegate void D<SomeType>(SomeType s); }", "C+D`1", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546200"), CombinatorialData] public async Task TestAttribute(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using N; [Working(true)] public class [|C|] { public C(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports N <Working(True)> Public Class [|C|] Public Sub New() End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using N; [Working(true)] public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using N; [Working(true)] public class [|C|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; namespace N { public class WorkingAttribute : Attribute { public WorkingAttribute(bool working) {} } } [N.Working(true)] public class C {} """, "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfFact] public async Task TestSymbolIdMatchesMetadata() { await TestSymbolIdMatchesMetadataAsync(LanguageNames.CSharp); await TestSymbolIdMatchesMetadataAsync(LanguageNames.VisualBasic); } [WpfFact] public async Task TestNotReusedOnAssemblyDiffers() { await TestNotReusedOnAssemblyDiffersAsync(LanguageNames.CSharp); await TestNotReusedOnAssemblyDiffersAsync(LanguageNames.VisualBasic); } [WpfFact] public async Task TestThrowsOnGenerateNamespace() { var namespaceSymbol = CodeGenerationSymbolFactory.CreateNamespaceSymbol("Outerspace"); using var context = TestContext.Create(); await Assert.ThrowsAsync<ArgumentException>(async () => { await context.GenerateSourceAsync(namespaceSymbol); }); } [WpfFact] public async Task TestReuseGenerateMemberOfGeneratedType() { var metadataSource = "public class C { public bool Is; }"; using var context = TestContext.Create(LanguageNames.CSharp, [metadataSource]); var a = await context.GenerateSourceAsync("C"); var b = await context.GenerateSourceAsync("C.Is"); TestContext.VerifyDocumentReused(a, b); } [WpfFact] public async Task TestReuseRepeatGeneration() { using var context = TestContext.Create(); var a = await context.GenerateSourceAsync(); var b = await context.GenerateSourceAsync(); TestContext.VerifyDocumentReused(a, b); } [WpfFact] public async Task TestWorkspaceContextHasReasonableProjectName() { using var context = TestContext.Create(); var compilation = await context.DefaultProject.GetCompilationAsync(); Assert.NotNull(compilation); var result = await context.GenerateSourceAsync(compilation.ObjectType); var openedDocument = context.GetDocument(result); Assert.Equal("mscorlib", openedDocument.Project.AssemblyName); Assert.Equal("mscorlib", openedDocument.Project.Name); } [WpfFact] public async Task TestReuseGenerateFromDifferentProject() { using var context = TestContext.Create(); var projectId = ProjectId.CreateNewId(); var project = context.CurrentSolution.AddProject(projectId, "ProjectB", "ProjectB", LanguageNames.CSharp).GetRequiredProject(projectId) .WithMetadataReferences(context.DefaultProject.MetadataReferences) .WithCompilationOptions(new CS.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); var a = await context.GenerateSourceAsync(project: context.DefaultProject); var b = await context.GenerateSourceAsync(project: project); TestContext.VerifyDocumentReused(a, b); } [WpfFact] public async Task TestNotReusedGeneratingForDifferentLanguage() { using var context = TestContext.Create(LanguageNames.CSharp); var projectId = ProjectId.CreateNewId(); var project = context.CurrentSolution.AddProject(projectId, "ProjectB", "ProjectB", LanguageNames.VisualBasic).GetRequiredProject(projectId) .WithMetadataReferences(context.DefaultProject.MetadataReferences) .WithCompilationOptions(new VB.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); var a = await context.GenerateSourceAsync(project: context.DefaultProject); var b = await context.GenerateSourceAsync(project: project); TestContext.VerifyDocumentNotReused(a, b); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546311")] public async Task FormatMetadataAsSource() { using var context = TestContext.Create(LanguageNames.CSharp); var file = await context.GenerateSourceAsync("System.Console", project: context.DefaultProject); var document = context.GetDocument(file); await Formatter.FormatAsync(document, CSharpSyntaxFormattingOptions.Default, CancellationToken.None); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530829")] public Task IndexedProperty() => GenerateAndVerifySourceAsync(""" Public Class C Public Property IndexProp(ByVal p1 As Integer) As String Get Return Nothing End Get Set(ByVal value As String) End Set End Property End Class """, "C.get_IndexProp", LanguageNames.CSharp, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class C { public C(); public string [|get_IndexProp|](int p1); public void set_IndexProp(int p1, string value); } """); [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/566688")] public Task AttributeReferencingInternalNestedType() => GenerateAndVerifySourceAsync(""" using System; [My(typeof(D))] public class C { public C() { } internal class D { } } public class MyAttribute : Attribute { public MyAttribute(Type t) { } } """, "C", LanguageNames.CSharp, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion [My(typeof(D))] public class [|C|] { public C(); } """); [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530978"), CombinatorialData] public async Task TestAttributesOnMembers(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; using System.Reflection; using System.Runtime.CompilerServices; [DefaultMember("Item")] [Obsolete] public class [|C|] { [Obsolete] [ThreadStatic] public int field1; [Obsolete] public C(); [Obsolete] ~C(); [Obsolete] public int this[int x] { get; set; } [Obsolete] public int prop1 { get; set; } [Obsolete] public int prop2 { get; set; } [Obsolete] public event Action event1; [Obsolete] public event Action event2; [Obsolete] public void method1(); public void method2([CallerMemberName] string name = ""); [Obsolete] public static C operator +(C c1, C c2); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System Imports System.Reflection Imports System.Runtime.CompilerServices <DefaultMember("Item")> <Obsolete> Public Class [|C|] <Obsolete> <ThreadStatic> Public field1 As Integer <Obsolete> Public Sub New() <Obsolete> Public Property prop1 As Integer <Obsolete> Public Property prop2 As Integer <Obsolete> Default Public Property Item(x As Integer) As Integer <Obsolete> Public Event event1 As Action <Obsolete> Public Event event2 As Action <Obsolete> Public Sub method1() Public Sub method2(<CallerMemberName> Optional name As String = "") <Obsolete> Protected Overrides Sub Finalize() <Obsolete> Public Shared Operator +(c1 As C, c2 As C) As C End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.CompilerServices; [Obsolete] public class [|C|] { [Obsolete] [ThreadStatic] public int field1; [Obsolete] public int prop1 { get; set; } [Obsolete] public int prop2 { get { return 10; } set { } } [Obsolete] public int this[int x] { get { return 10; } set { } } [Obsolete] public event Action event1; [Obsolete] public event Action event2 { add { } remove { } } [Obsolete] public void method1() { } [Obsolete] public C() { } [Obsolete] ~C() { } public void method2([CallerMemberName] string name = "") { } [Obsolete] public static C operator +(C c1, C c2) { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.CompilerServices; [Obsolete] public class [|C|] { [Obsolete] [ThreadStatic] public int field1; [Obsolete] public int prop1 { get; set; } [Obsolete] public int prop2 { get { return 10; } set { } } [Obsolete] public int this[int x] { get { return 10; } set { } } [Obsolete] public event Action event1; [Obsolete] public event Action event2 { add { } remove { } } [Obsolete] public void method1() { } [Obsolete] public C() { } [Obsolete] ~C() { } public void method2([CallerMemberName] string name = "") { } [Obsolete] public static C operator +(C c1, C c2) { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; [Obsolete] public class C { [Obsolete] [ThreadStatic] public int field1; [Obsolete] public int prop1 { get; set; } [Obsolete] public int prop2 { get { return 10; } set {} } [Obsolete] public void method1() {} [Obsolete] public C() {} [Obsolete] ~C() {} [Obsolete] public int this[int x] { get { return 10; } set {} } [Obsolete] public event Action event1; [Obsolete] public event Action event2 { add {} remove {}} public void method2([System.Runtime.CompilerServices.CallerMemberName] string name = "") {} [Obsolete] public static C operator + (C c1, C c2) { return new C(); } } """, "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530923"), CombinatorialData] public async Task TestEmptyLineBetweenMembers(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; using System.Reflection; using System.Runtime.CompilerServices; [DefaultMember("Item")] public class [|C|] { public int field1; public int field2; public C(); ~C(); public int this[int x] { get; set; } public int prop1 { get; set; } public int prop2 { get; set; } public event Action event1; public event Action event2; public void method1(); public void method2([CallerMemberName] string name = ""); public static C operator +(C c1, C c2); public static C operator -(C c1, C c2); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System Imports System.Reflection Imports System.Runtime.CompilerServices <DefaultMember("Item")> Public Class [|C|] Public field1 As Integer Public field2 As Integer Public Sub New() Public Property prop1 As Integer Public Property prop2 As Integer Default Public Property Item(x As Integer) As Integer Public Event event1 As Action Public Event event2 As Action Public Sub method1() Public Sub method2(<CallerMemberName> Optional name As String = "") Protected Overrides Sub Finalize() Public Shared Operator +(c1 As C, c2 As C) As C Public Shared Operator -(c1 As C, c2 As C) As C End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.CompilerServices; public class [|C|] { public int field1; public int field2; public int prop1 { get; set; } public int prop2 { get { return 10; } set { } } public int this[int x] { get { return 10; } set { } } public event Action event1; public event Action event2 { add { } remove { } } public void method1() { } public void method2([CallerMemberName] string name = "") { } ~C() { } public static C operator +(C c1, C c2) { return new C(); } public static C operator -(C c1, C c2) { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.CompilerServices; public class [|C|] { public int field1; public int field2; public int prop1 { get; set; } public int prop2 { get { return 10; } set { } } public int this[int x] { get { return 10; } set { } } public event Action event1; public event Action event2 { add { } remove { } } public void method1() { } public void method2([CallerMemberName] string name = "") { } ~C() { } public static C operator +(C c1, C c2) { return new C(); } public static C operator -(C c1, C c2) { return new C(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; public class C { public int field1; public int prop1 { get; set; } public int field2; public int prop2 { get { return 10; } set {} } public void method1() {} public C() {} public void method2([System.Runtime.CompilerServices.CallerMemberName] string name = "") {} ~C() {} public int this[int x] { get { return 10; } set {} } public event Action event1; public static C operator + (C c1, C c2) { return new C(); } public event Action event2 { add {} remove {}} public static C operator - (C c1, C c2) { return new C(); } } """, "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/728644"), CombinatorialData] public async Task TestEmptyLineBetweenMembers2(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; // // {{FeaturesResources.Summary_colon}} // T:IGoo public interface [|IGoo|] { // // {{FeaturesResources.Summary_colon}} // P:IGoo.Prop1 Uri Prop1 { get; set; } // // {{FeaturesResources.Summary_colon}} // M:IGoo.Method1 Uri Method1(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System ' ' {FeaturesResources.Summary_colon} ' T:IGoo Public Interface [|IGoo|] ' ' {FeaturesResources.Summary_colon} ' P:IGoo.Prop1 Property Prop1 As Uri ' ' {FeaturesResources.Summary_colon} ' M:IGoo.Method1 Function Method1() As Uri End Interface """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public interface [|IGoo|] { Uri Prop1 { get; set; } Uri Method1(); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "System.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public interface [|IGoo|] { Uri Prop1 { get; set; } Uri Method1(); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "System.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; /// <summary>T:IGoo</summary> public interface IGoo { /// <summary>P:IGoo.Prop1</summary> Uri Prop1 { get; set; } /// <summary>M:IGoo.Method1</summary> Uri Method1(); } """, "IGoo", ToLanguageName(language), expected, signaturesOnly: signaturesOnly, includeXmlDocComments: true); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/679114"), WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/715013"), CombinatorialData] public async Task TestDefaultValueEnum(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.IO; public class [|Test|] { public Test(); public void goo(FileOptions options = FileOptions.None); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.IO Public Class [|Test|] Public Sub New() Public Sub goo(Optional options As FileOptions = FileOptions.None) End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.IO; public class [|Test|] { public void goo(FileOptions options = FileOptions.None) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.IO; public class [|Test|] { public void goo(FileOptions options = FileOptions.None) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System.IO; public class Test { public void goo(FileOptions options = 0) {} } """, "Test", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/651261"), CombinatorialData] public async Task TestNullAttribute(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; [Test(null)] public class [|TestAttribute|] : Attribute { public TestAttribute(int[] i); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System <Test(Nothing)> Public Class [|TestAttribute|] Inherits Attribute Public Sub New(i() As Integer) End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; [Test(null)] public class [|TestAttribute|] : Attribute { public TestAttribute(int[] i) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; [Test(null)] public class [|TestAttribute|] : Attribute { public TestAttribute(int[] i) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System; [Test(null)] public class TestAttribute : Attribute { public TestAttribute(int[] i) { } } """, "TestAttribute", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/897006")] public async Task TestNavigationViaReducedExtensionMethodCS() { var metadata = """ using System; public static class ObjectExtensions { public static void M(this object o, int x) { } } """; var sourceWithSymbolReference = """ class C { void M() { new object().[|M|](5); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, sourceWithSymbolReference: sourceWithSymbolReference); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public static class ObjectExtensions { public static void [|M|](this object o, int x); } """); } [WpfFact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/897006")] public async Task TestNavigationViaReducedExtensionMethodVB() { var metadata = """ Imports System.Runtime.CompilerServices Namespace NS Public Module StringExtensions <Extension()> Public Sub M(ByVal o As String, x As Integer) End Sub End Module End Namespace """; var sourceWithSymbolReference = """ Imports NS.StringExtensions Public Module C Sub M() Dim s = "Yay" s.[|M|](1) End Sub End Module """; using var context = TestContext.Create( LanguageNames.VisualBasic, [metadata], includeXmlDocComments: false, sourceWithSymbolReference: sourceWithSymbolReference); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Runtime.CompilerServices Namespace NS <Extension> Public Module StringExtensions <Extension> Public Sub [|M|](o As String, x As Integer) End Module End Namespace """); } [WpfTheory, CombinatorialData] public async Task TestIndexersAndOperators(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.Reflection; [DefaultMember("Item")] public class [|Program|] { public Program(); public int this[int x] { get; set; } public static Program operator +(Program p1, Program p2); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Reflection <DefaultMember("Item")> Public Class [|Program|] Public Sub New() Default Public Property Item(x As Integer) As Integer Public Shared Operator +(p1 As Program, p2 As Program) As Program End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|Program|] { public int this[int x] { get { return 0; } set { } } public static Program operator +(Program p1, Program p2) { return new Program(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public class [|Program|] { public int this[int x] { get { return 0; } set { } } public static Program operator +(Program p1, Program p2) { return new Program(); } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public class Program { public int this[int x] { get { return 0; } set { } } public static Program operator + (Program p1, Program p2) { return new Program(); } } """, "Program", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/15387"), CombinatorialData] public async Task TestComImport1(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.Runtime.InteropServices; [Guid("666A175D-2448-447A-B786-CCC82CBEF156")] public interface [|IComImport|] { void MOverload(); void X(); void MOverload(int i); int Prop { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Runtime.InteropServices <Guid("666A175D-2448-447A-B786-CCC82CBEF156")> Public Interface [|IComImport|] ReadOnly Property Prop As Integer Sub MOverload() Sub X() Sub MOverload(i As Integer) End Interface """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [ComImport] [Guid("666A175D-2448-447A-B786-CCC82CBEF156")] public interface [|IComImport|] { void MOverload(); void X(); void MOverload(int i); int Prop { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [ComImport] [Guid("666A175D-2448-447A-B786-CCC82CBEF156")] public interface [|IComImport|] { void MOverload(); void X(); void MOverload(int i); int Prop { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System.Runtime.InteropServices; [ComImport] [Guid("666A175D-2448-447A-B786-CCC82CBEF156")] public interface IComImport { void MOverload(); void X(); void MOverload(int i); int Prop { get; } } """, "IComImport", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, CombinatorialData] public async Task TestOptionalParameterWithDefaultLiteral(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.Threading; public class [|C|] { public C(); public void M(CancellationToken cancellationToken = default); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Threading Public Class [|C|] Public Sub New() Public Sub M(Optional cancellationToken As CancellationToken = Nothing) End Class """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Threading; public class [|C|] { public void M(CancellationToken cancellationToken = default(CancellationToken)) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Threading; public class [|C|] { public void M(CancellationToken cancellationToken = default(CancellationToken)) { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; var languageVersion = language switch { OriginatingProjectLanguage.CSharp => "7.1", OriginatingProjectLanguage.VisualBasic => "15.5", _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" using System.Threading; public class C { public void M(CancellationToken cancellationToken = default(CancellationToken)) { } } """, "C", ToLanguageName(language), expected, signaturesOnly: signaturesOnly, languageVersion: languageVersion); } [WpfTheory, WorkItem("https://devdiv.visualstudio.com/DevDiv/_workitems?id=446567"), CombinatorialData] public async Task TestDocCommentsWithUnixNewLine(OriginatingProjectLanguage language, bool signaturesOnly) { var source = """ using System; /// <summary>T:IGoo """ + """ /// ABCDE """ + """ /// FGHIJK</summary> public interface IGoo { /// <summary>P:IGoo.Prop1 """ + """ /// ABCDE """ + """ /// FGHIJK</summary> Uri Prop1 { get; set; } /// <summary>M:IGoo.Method1 """ + """ /// ABCDE """ + """ /// FGHIJK</summary> Uri Method1(); } """; var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; // // {{FeaturesResources.Summary_colon}} // T:IGoo ABCDE FGHIJK public interface [|IGoo|] { // // {{FeaturesResources.Summary_colon}} // P:IGoo.Prop1 ABCDE FGHIJK Uri Prop1 { get; set; } // // {{FeaturesResources.Summary_colon}} // M:IGoo.Method1 ABCDE FGHIJK Uri Method1(); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System ' ' {FeaturesResources.Summary_colon} ' T:IGoo ABCDE FGHIJK Public Interface [|IGoo|] ' ' {FeaturesResources.Summary_colon} ' P:IGoo.Prop1 ABCDE FGHIJK Property Prop1 As Uri ' ' {FeaturesResources.Summary_colon} ' M:IGoo.Method1 ABCDE FGHIJK Function Method1() As Uri End Interface """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public interface [|IGoo|] { Uri Prop1 { get; set; } Uri Method1(); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "System.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; public interface [|IGoo|] { Uri Prop1 { get; set; } Uri Method1(); } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "System.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(source, "IGoo", ToLanguageName(language), expected, signaturesOnly: signaturesOnly, includeXmlDocComments: true); } [WpfFact] public async Task TestUnmanagedCSharpConstraint_Type() { var metadata = """ using System; public class TestType<T> where T : unmanaged { } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new [|TestType|]<int>(); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "7.3", sourceWithSymbolReference: sourceWithSymbolReference); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|TestType|]<T> where T : unmanaged { public TestType(); } """); } [WpfFact] public async Task TestUnmanagedCSharpConstraint_Method() { var metadata = """ using System; public class TestType { public void M<T>() where T : unmanaged { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M|]<int>(); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "7.3", sourceWithSymbolReference: sourceWithSymbolReference); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M|]<T>() where T : unmanaged; } """); } [WpfFact] public async Task TestUnmanagedCSharpConstraint_Delegate() { var metadata = """ using System; public delegate void D<T>() where T : unmanaged; """; var sourceWithSymbolReference = """ class C { void M([|D|]<int> lambda) { } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "7.3", sourceWithSymbolReference: sourceWithSymbolReference); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $""" #region {FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {CodeAnalysisResources.InMemoryAssembly} #endregion public delegate void [|D|]<T>() where T : unmanaged; """); } [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestSByteMinValue() => GenerateAndVerifySourceLineAsync(""" class C { sbyte Goo = sbyte.[|MinValue|]; } """, LanguageNames.CSharp, "public const SByte MinValue = -128;"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestSByteMinValueVB() => GenerateAndVerifySourceLineAsync(""" Class C Public Goo = SByte.[|MinValue|] End Class """, LanguageNames.VisualBasic, "Public Const MinValue As [SByte] = -128"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt16MinValue() => GenerateAndVerifySourceLineAsync(""" class C { short Goo = short.[|MinValue|]; } """, LanguageNames.CSharp, $"public const Int16 MinValue = -32768;"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt16MinValueVB() => GenerateAndVerifySourceLineAsync(""" Class C Public Goo = Short.[|MinValue|] End Class """, LanguageNames.VisualBasic, $"Public Const MinValue As Int16 = -32768"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt32MinValue() => GenerateAndVerifySourceLineAsync(""" class C { int Goo = int.[|MinValue|]; } """, LanguageNames.CSharp, $"public const Int32 MinValue = -2147483648;"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt32MinValueVB() => GenerateAndVerifySourceLineAsync(""" Class C Public Goo = Integer.[|MinValue|] End Class """, LanguageNames.VisualBasic, $"Public Const MinValue As Int32 = -2147483648"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt64MinValue() => GenerateAndVerifySourceLineAsync(""" class C { long Goo = long.[|MinValue|]; } """, LanguageNames.CSharp, $"public const Int64 MinValue = -9223372036854775808;"); [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/29786")] public Task TestInt64MinValueVB() => GenerateAndVerifySourceLineAsync(""" Class C Public Goo = Long.[|MinValue|] End Class """, LanguageNames.VisualBasic, $"Public Const MinValue As Int64 = -9223372036854775808"); [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyStruct_ReadOnlyField(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public readonly struct [|S|] { public readonly int i; } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region <IsReadOnlyAttribute> Public Structure [|S|] Public ReadOnly i As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public readonly struct [|S|] { public readonly int i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public readonly struct [|S|] { public readonly int i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public readonly struct S { public readonly int i; } """, "S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStruct_ReadOnlyField(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct [|S|] { public readonly int i; } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure [|S|] Public ReadOnly i As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct [|S|] { public readonly int i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct [|S|] { public readonly int i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly int i; } """, "S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestRefStruct(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public ref struct [|S|] { } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System <IsByRefLikeAttribute> <Obsolete("Types with embedded references are not supported in this version of your compiler.", True)> Public Structure [|S|] End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public ref struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public ref struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public ref struct S { } """, "S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyRefStruct(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public readonly ref struct [|S|] { } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System <IsByRefLikeAttribute> <IsReadOnlyAttribute> <Obsolete("Types with embedded references are not supported in this version of your compiler.", True)> Public Structure [|S|] End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly ref struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly ref struct [|S|] { } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public readonly ref struct S { } """, "S", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyMethod(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public readonly void [|M|](); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S <IsReadOnlyAttribute> Public Sub [|M|]() End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly void [|M|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly void [|M|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly void M() {} } """, "S.M", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyMethod_InReadOnlyStruct(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public readonly struct S { public void [|M|](); } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region <IsReadOnlyAttribute> Public Structure S Public Sub [|M|]() End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct S { public void [|M|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct S { public void [|M|]() { } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public readonly struct S { public void M() {} } """, "S.M", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_ReadOnly(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public readonly int [|P|] { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public ReadOnly Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public int P { get; } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_ReadOnly_CSharp7_3(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public int [|P|] { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public ReadOnly Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; var metadataLanguageVersion = language switch { OriginatingProjectLanguage.CSharp => "7.3", OriginatingProjectLanguage.VisualBasic => "Preview", _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public int P { get; } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly, metadataLanguageVersion: metadataLanguageVersion); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_ReadOnlyGet(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public readonly int [|P|] { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public ReadOnly Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly int P { get; } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyStructProperty_ReadOnlyGet(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public readonly struct S { public int [|P|] { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region <IsReadOnlyAttribute> Public Structure S Public ReadOnly Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public readonly struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion public readonly struct S { public int [|P|] { get; } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public readonly struct S { public readonly int P { get; } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_ReadOnlyGet_Set(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public int [|P|] { readonly get; set; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|P|] { readonly get { return 123; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|P|] { readonly get { return 123; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public int P { readonly get => 123; set {} } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_Get_ReadOnlySet(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public int [|P|] { get; readonly set; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|P|] { get { return 123; } readonly set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|P|] { get { return 123; } readonly set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public int P { get => 123; readonly set {} } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructProperty_ReadOnlyGet_ReadOnlySet(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public struct S { public readonly int [|P|] { get; set; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Public Structure S Public Property [|P|] As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly int [|P|] { get { return 123; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly int [|P|] { get { return 123; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly int P { get => 123; set {} } } """, "S.P", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructIndexer_ReadOnlyGet(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.Reflection; [DefaultMember("Item")] public struct S { public readonly int [|this|][int i] { get; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Reflection <DefaultMember("Item")> Public Structure S Default Public ReadOnly Property [|Item|](i As Integer) As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly int [|this|][int i] => i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly int [|this|][int i] => i; } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly int this[int i] => i; } """, "S.Item", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStructIndexer_ReadOnlyGet_Set(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System.Reflection; [DefaultMember("Item")] public struct S { public int [|this|][int i] { readonly get; set; } } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System.Reflection <DefaultMember("Item")> Public Structure S Default Public Property [|Item|](i As Integer) As Integer End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|this|][int i] { readonly get { return i; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public int [|this|][int i] { readonly get { return i; } set { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public int this[int i] { readonly get => i; set {} } } """, "S.Item", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestStruct_ReadOnlyEvent(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; public struct S { public readonly event Action [|E|]; } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System Public Structure S Public Event [|E|] As Action End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly event Action [|E|] { add { } remove { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public struct S { public readonly event Action [|E|] { add { } remove { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public struct S { public readonly event System.Action E { add {} remove {} } } """, "S.E", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfTheory, WorkItem("https://github.com/dotnet/roslyn/issues/34650"), CombinatorialData] public async Task TestReadOnlyStruct_ReadOnlyEvent(OriginatingProjectLanguage language, bool signaturesOnly) { var expected = (language, signaturesOnly) switch { (OriginatingProjectLanguage.CSharp, true) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion using System; public readonly struct S { public event Action [|E|]; } """, (OriginatingProjectLanguage.VisualBasic, true) => $""" #Region "{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" ' {CodeAnalysisResources.InMemoryAssembly} #End Region Imports System <IsReadOnlyAttribute> Public Structure S Public Event [|E|] As Action End Structure """, (OriginatingProjectLanguage.CSharp, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct S { public event Action [|E|] { add { } remove { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 6)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, (OriginatingProjectLanguage.VisualBasic, false) => $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{FeaturesResources.location_unknown}} // Decompiled with ICSharpCode.Decompiler {{ICSharpCodeDecompilerVersion}} #endregion using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct S { public event Action [|E|] { add { } remove { } } } #if false // {{FeaturesResources.Decompilation_log}} {{string.Format(FeaturesResources._0_items_in_cache, 9)}} ------------------ {{string.Format(FeaturesResources.Resolve_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Found_single_assembly_0, "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")}} {{string.Format(FeaturesResources.Load_from_0, "mscorlib.v4_6_1038_0.dll")}} #endif """, _ => throw ExceptionUtilities.Unreachable(), }; await GenerateAndVerifySourceAsync(""" public readonly struct S { public event System.Action E { add {} remove {} } } """, "S.E", ToLanguageName(language), expected, signaturesOnly: signaturesOnly); } [WpfFact] public async Task TestNotNullCSharpConstraint_Type() { var metadata = """ using System; public class TestType<T> where T : notnull { } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new [|TestType|]<int>(); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class [|TestType|]<T> where T : notnull { public TestType(); } """); } [WpfFact] public async Task TestNotNullCSharpConstraint_Method() { var metadata = """ using System; public class TestType { public void M<T>() where T : notnull { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M|]<int>(); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M|]<T>() where T : notnull; } """); } [WpfFact] public async Task TestNotNullCSharpConstraint_Delegate() { var metadata = """ using System; public delegate void D<T>() where T : notnull; """; var sourceWithSymbolReference = """ class C { void M([|D|]<int> lambda) { } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $""" #region {FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {CodeAnalysisResources.InMemoryAssembly} #endregion public delegate void [|D|]<T>() where T : notnull; """); } [WpfFact] public async Task TestNullableEnableDisable1() { var metadata = """ #nullable enable using System; public class TestType { public void M1(string s) { } #nullable disable public void M2(string s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); public void [|M1|](string s); #nullable disable public void M2(string s); #nullable enable } """); } [WpfFact] public async Task TestNullableEnableDisable2() { var metadata = """ using System; public class TestType { public void M1(string s) { } #nullable enable public void M2(string s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); #nullable disable public void [|M1|](string s); #nullable enable public void M2(string s); } """); } [WpfFact] public async Task TestNullableEnableDisable3() { var metadata = """ #nullable enable using System; public class TestType { public void M1(string s) { } #nullable disable public void M2(string s) { } public void M3(string s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); public void [|M1|](string s); #nullable disable public void M2(string s); public void M3(string s); #nullable enable } """); } [WpfFact] public async Task TestNullableEnableDisable4() { var metadata = """ #nullable enable using System; public class TestType { public void M1(ICloneable s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable using System; public class TestType { public TestType(); public void [|M1|](ICloneable s); } """); } [WpfFact] public async Task TestNullableEnableDisable5() { var metadata = """ #nullable enable using System; public class TestType { public void M1(ICloneable s) { #nullable disable } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable using System; public class TestType { public TestType(); public void [|M1|](ICloneable s); } """); } [WpfFact] public async Task TestNullableEnableDisable6() { var metadata = """ #nullable enable using System; public class TestType { public void M1<T>(T? s) where T : class { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](""); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); public void [|M1|]<T>(T? s) where T : class; } """); } [WpfFact] public async Task TestNullableEnableDisable7() { var metadata = """ #nullable enable using System; public class TestType { public void M1<T>(T s) where T : class { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](""); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); public void [|M1|]<T>(T s) where T : class; } """); } [WpfFact] public async Task TestNullableEnableDisable8() { var metadata = """ #nullable enable using System; public class TestType { public void M1<T>(T? s) where T : struct { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|]((int?)0); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M1|]<T>(T? s) where T : struct; } """); } [WpfFact] public async Task TestNullableEnableDisable9() { var metadata = """ #nullable enable using System; public class TestType { public void M1<T>(T s) where T : struct { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](0); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M1|]<T>(T s) where T : struct; } """); } [WpfFact] public async Task TestNullableEnableDisable10() { var metadata = """ #nullable enable using System; public class TestType { public void M1<T>(T s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](""); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M1|]<T>(T s); } """); } [WpfFact] public async Task TestNullableEnableDisable11() { var metadata = """ using System; public class TestType { public void M1<T>(T s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](""); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M1|]<T>(T s); } """); } [WpfFact] public async Task TestNullableEnableDisable12() { var metadata = """ #nullable enable using System; namespace N { public class TestType { public void M1(string s) { } #nullable disable public void M2(string s) { } } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new N.TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable namespace N { public class TestType { public TestType(); public void [|M1|](string s); #nullable disable public void M2(string s); #nullable enable } } """); } [WpfFact] public async Task TestNullableEnableDisable13() { var metadata = """ #nullable enable using System; public class TestType { public void M1(string s) { } #nullable disable public class Nested { public void NestedM(string s) { } } #nullable enable public void M2(string s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion #nullable enable public class TestType { public TestType(); public void [|M1|](string s); public void M2(string s); public class Nested { public Nested(); #nullable disable public void NestedM(string s); #nullable enable } } """); } [WpfFact] public async Task TestDynamic1() { var metadata = """ using System; public class TestType { public void M1(dynamic s) { } } """; var sourceWithSymbolReference = """ class C { void M() { var obj = new TestType().[|M1|](null); } } """; using var context = TestContext.Create( LanguageNames.CSharp, [metadata], includeXmlDocComments: false, languageVersion: "8", sourceWithSymbolReference: sourceWithSymbolReference, metadataLanguageVersion: "8"); var navigationSymbol = await context.GetNavigationSymbolAsync(); var metadataAsSourceFile = await context.GenerateSourceAsync(navigationSymbol); TestContext.VerifyResult(metadataAsSourceFile, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public class TestType { public TestType(); public void [|M1|](dynamic s); } """); } [WpfFact, WorkItem("https://github.com/dotnet/roslyn/issues/22431")] public Task TestCDATAComment() => GenerateAndVerifySourceAsync(""" public enum BinaryOperatorKind { /// <summary> /// Represents the <![CDATA['<<']]> operator. /// </summary> LeftShift = 0x8, } """, "BinaryOperatorKind.LeftShift", LanguageNames.CSharp, $$""" #region {{FeaturesResources.Assembly}} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // {{CodeAnalysisResources.InMemoryAssembly}} #endregion public enum BinaryOperatorKind { // // {{FeaturesResources.Summary_colon}} // Represents the '<<' operator. [|LeftShift|] = 8 } """, includeXmlDocComments: true); }