mirror of https://github.com/dapr/dotnet-sdk.git
83 lines
3.3 KiB
C#
83 lines
3.3 KiB
C#
// ------------------------------------------------------------------------
|
|
// Copyright 2023 The Dapr Authors
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
// ------------------------------------------------------------------------
|
|
|
|
using System.Collections.Immutable;
|
|
using Microsoft.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis.CSharp;
|
|
using Microsoft.CodeAnalysis.CSharp.Testing;
|
|
using Microsoft.CodeAnalysis.Testing;
|
|
|
|
/// <remarks>
|
|
/// From Roslyn Source Generators Cookbook: https://github.com/dotnet/roslyn/blob/main/docs/features/source-generators.cookbook.md#unit-testing-of-generators
|
|
/// </remarks>
|
|
internal static class CSharpSourceGeneratorVerifier<TSourceGenerator>
|
|
where TSourceGenerator : IIncrementalGenerator, new()
|
|
{
|
|
public class Test : CSharpSourceGeneratorTest<TSourceGenerator, DefaultVerifier>
|
|
{
|
|
public Test()
|
|
{
|
|
int frameworkVersion =
|
|
#if NET6_0
|
|
6;
|
|
#elif NET7_0
|
|
7;
|
|
#elif NET8_0
|
|
8;
|
|
#elif NET9_0
|
|
9;
|
|
#endif
|
|
|
|
//
|
|
// NOTE: Ordinarily we'd use the following:
|
|
//
|
|
// this.ReferenceAssemblies = Microsoft.CodeAnalysis.Testing.ReferenceAssemblies.Net.Net60;
|
|
//
|
|
// However, Net70 and Net80 are not yet available in the current version of the Roslyn SDK.
|
|
//
|
|
|
|
this.ReferenceAssemblies =
|
|
new ReferenceAssemblies(
|
|
$"net{frameworkVersion}.0",
|
|
new PackageIdentity(
|
|
"Microsoft.NETCore.App.Ref",
|
|
$"{frameworkVersion}.0.0"),
|
|
Path.Combine("ref", $"net{frameworkVersion}.0"));
|
|
}
|
|
|
|
protected override CompilationOptions CreateCompilationOptions()
|
|
{
|
|
var compilationOptions = base.CreateCompilationOptions();
|
|
|
|
return compilationOptions
|
|
.WithSpecificDiagnosticOptions(compilationOptions.SpecificDiagnosticOptions.SetItems(GetNullableWarningsFromCompiler()));
|
|
}
|
|
|
|
public LanguageVersion LanguageVersion { get; set; } = LanguageVersion.Default;
|
|
|
|
private static ImmutableDictionary<string, ReportDiagnostic> GetNullableWarningsFromCompiler()
|
|
{
|
|
string[] args = { "/warnaserror:nullable" };
|
|
var commandLineArguments = CSharpCommandLineParser.Default.Parse(args, baseDirectory: Environment.CurrentDirectory, sdkDirectory: Environment.CurrentDirectory);
|
|
var nullableWarnings = commandLineArguments.CompilationOptions.SpecificDiagnosticOptions;
|
|
|
|
return nullableWarnings;
|
|
}
|
|
|
|
protected override ParseOptions CreateParseOptions()
|
|
{
|
|
return ((CSharpParseOptions)base.CreateParseOptions()).WithLanguageVersion(LanguageVersion);
|
|
}
|
|
}
|
|
}
|