Skip to content

Commit 91715f4

Browse files
[rel/3.8] Use global:: prefix for generated code (#5033)
Co-authored-by: Youssef1313 <youssefvictor00@gmail.com>
1 parent efd5256 commit 91715f4

File tree

4 files changed

+41
-64
lines changed

4 files changed

+41
-64
lines changed

src/Platform/Microsoft.Testing.Platform.MSBuild/Tasks/TestingPlatformAutoRegisteredExtensions.cs

+14-20
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
using Microsoft.Build.Framework;
77
using Microsoft.Build.Utilities;
8+
using Microsoft.Testing.Platform.Helpers;
89

910
namespace Microsoft.Testing.Platform.MSBuild;
1011

@@ -171,7 +172,15 @@ private static void GenerateCode(string language, string rootNamespace, ITaskIte
171172
builder.Append(" ");
172173
}
173174

174-
builder.Append(CultureInfo.InvariantCulture, $"{taskItems[i].GetMetadata(TypeFullNameMetadataName)}.AddExtensions(builder, args){(language == CSharpLanguageSymbol ? ";" : string.Empty)}");
175+
string global = language switch
176+
{
177+
CSharpLanguageSymbol => "global::",
178+
VBLanguageSymbol => "Global.",
179+
FSharpLanguageSymbol => "global.",
180+
_ => throw ApplicationStateGuard.Unreachable(),
181+
};
182+
183+
builder.Append(CultureInfo.InvariantCulture, $"{global}{taskItems[i].GetMetadata(TypeFullNameMetadataName)}.AddExtensions(builder, args){(language == CSharpLanguageSymbol ? ";" : string.Empty)}");
175184
if (i < taskItems.Length - 1)
176185
{
177186
builder.AppendLine();
@@ -226,8 +235,10 @@ public static void AddSelfRegisteredExtensions(this global::Microsoft.Testing.Pl
226235
}
227236
else if (language == VBLanguageSymbol)
228237
{
229-
return string.IsNullOrEmpty(rootNamespace)
230-
? $$"""
238+
// NOTE: We don't use the value of RootNamespace here.
239+
// The compiler *already* wraps types in RootNamespace for Visual Basic
240+
// This is not the case for C# or F#.
241+
return $$"""
231242
'------------------------------------------------------------------------------
232243
' <auto-generated>
233244
' This code was generated by Microsoft.Testing.Platform.MSBuild
@@ -241,23 +252,6 @@ Public Sub AddSelfRegisteredExtensions(ByVal builder As Global.Microsoft.Testing
241252
{{extensionsFragments}}
242253
End Sub
243254
End Module
244-
"""
245-
: $$"""
246-
'------------------------------------------------------------------------------
247-
' <auto-generated>
248-
' This code was generated by Microsoft.Testing.Platform.MSBuild
249-
' </auto-generated>
250-
'------------------------------------------------------------------------------
251-
252-
Namespace {{rootNamespace}}
253-
<System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage>
254-
Friend Module SelfRegisteredExtensions
255-
<System.Runtime.CompilerServices.Extension>
256-
Public Sub AddSelfRegisteredExtensions(ByVal builder As Global.Microsoft.Testing.Platform.Builder.ITestApplicationBuilder, ByVal args As Global.System.String())
257-
{{extensionsFragments}}
258-
End Sub
259-
End Module
260-
End Namespace
261255
""";
262256
}
263257
else if (language == FSharpLanguageSymbol)

src/Platform/Microsoft.Testing.Platform.MSBuild/Tasks/TestingPlatformEntryPointTask.cs

+4-28
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,10 @@ internal sealed class TestingPlatformEntryPoint
143143
}
144144
else if (language == VBLanguageSymbol)
145145
{
146-
return string.IsNullOrEmpty(rootNamespace)
147-
? $$"""
146+
// NOTE: We don't use the value of RootNamespace here.
147+
// The compiler *already* wraps types in RootNamespace for Visual Basic
148+
// This is not the case for C# or F#.
149+
return $$"""
148150
'------------------------------------------------------------------------------
149151
' <auto-generated>
150152
' This code was generated by Microsoft.Testing.Platform.MSBuild
@@ -167,32 +169,6 @@ End Using
167169
End Function
168170
169171
End Module
170-
"""
171-
: $$"""
172-
'------------------------------------------------------------------------------
173-
' <auto-generated>
174-
' This code was generated by Microsoft.Testing.Platform.MSBuild
175-
' </auto-generated>
176-
'------------------------------------------------------------------------------
177-
178-
Namespace {{rootNamespace}}
179-
<System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage>
180-
Module TestingPlatformEntryPoint
181-
182-
Function Main(args As String()) As Integer
183-
Return MainAsync(args).GetAwaiter().GetResult()
184-
End Function
185-
186-
Public Async Function MainAsync(args As String()) As Global.System.Threading.Tasks.Task(Of Integer)
187-
Dim builder = Await Global.Microsoft.Testing.Platform.Builder.TestApplication.CreateBuilderAsync(args)
188-
SelfRegisteredExtensions.AddSelfRegisteredExtensions(builder, args)
189-
Using testApplication = Await builder.BuildAsync()
190-
Return Await testApplication.RunAsync()
191-
End Using
192-
End Function
193-
194-
End Module
195-
End Namespace
196172
""";
197173
}
198174
else if (language == FSharpLanguageSymbol)

test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuild.KnownExtensionRegistration.cs

+9
Original file line numberDiff line numberDiff line change
@@ -124,5 +124,14 @@ internal sealed class Capabilities : ITestFrameworkCapabilities
124124
{
125125
IReadOnlyCollection<ITestFrameworkCapability> ICapabilities<ITestFrameworkCapability>.Capabilities => Array.Empty<ITestFrameworkCapability>();
126126
}
127+
128+
#file DummyClass.cs
129+
130+
namespace MSBuildTests.Microsoft;
131+
132+
// This serves as a test to ensure that we don't regress generation of 'global::'
133+
// If the self registered generation used Microsoft.Testing.Extensions.ExtensionName.TestingPlatformBuilderHook.AddExtension,
134+
// Then, without global::, Microsoft will be referring to MSBuildTests.Microsoft namespace and will fail to compile
135+
public static class DummyClass { }
127136
""";
128137
}

test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.GenerateEntryPoint.cs

+14-16
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,22 @@ public async Task GenerateVBEntryPointAndVerifyTheCacheUsage(string tfm, BuildCo
7171
' </auto-generated>
7272
'------------------------------------------------------------------------------
7373
74-
Namespace MSBuildTests
75-
<System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage>
76-
Module TestingPlatformEntryPoint
74+
<System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage>
75+
Module TestingPlatformEntryPoint
7776
78-
Function Main(args As String()) As Integer
79-
Return MainAsync(args).GetAwaiter().GetResult()
80-
End Function
77+
Function Main(args As String()) As Integer
78+
Return MainAsync(args).GetAwaiter().GetResult()
79+
End Function
8180
82-
Public Async Function MainAsync(args As String()) As Global.System.Threading.Tasks.Task(Of Integer)
83-
Dim builder = Await Global.Microsoft.Testing.Platform.Builder.TestApplication.CreateBuilderAsync(args)
84-
SelfRegisteredExtensions.AddSelfRegisteredExtensions(builder, args)
85-
Using testApplication = Await builder.BuildAsync()
86-
Return Await testApplication.RunAsync()
87-
End Using
88-
End Function
81+
Public Async Function MainAsync(args As String()) As Global.System.Threading.Tasks.Task(Of Integer)
82+
Dim builder = Await Global.Microsoft.Testing.Platform.Builder.TestApplication.CreateBuilderAsync(args)
83+
SelfRegisteredExtensions.AddSelfRegisteredExtensions(builder, args)
84+
Using testApplication = Await builder.BuildAsync()
85+
Return Await testApplication.RunAsync()
86+
End Using
87+
End Function
8988
90-
End Module
91-
End Namespace'", "Vbc");
89+
End Module'", "Vbc");
9290

9391
[DynamicData(nameof(GetBuildMatrixTfmBuildVerbConfiguration), typeof(AcceptanceTestBase<NopAssetFixture>))]
9492
[TestMethod]
@@ -285,7 +283,7 @@ Imports Microsoft.Testing.Platform.Requests
285283
Imports Microsoft.Testing.Platform.Extensions
286284
Imports Microsoft.Testing.Platform
287285
288-
Namespace MyNamespaceRoot.Level1.Level2
286+
Namespace Global.MyNamespaceRoot.Level1.Level2
289287
Public Module DummyTestFrameworkRegistration
290288
Public Sub AddExtensions(builder As ITestApplicationBuilder, args As String())
291289
builder.RegisterTestFramework(Function() New Capabilities(), Function(cap, services) New DummyTestFramework())

0 commit comments

Comments
 (0)