Skip to content

Instantly share code, notes, and snippets.

@chsienki
Last active November 19, 2022 10:03
Embed
What would you like to do?
Framework for unit testing generators
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using System.Collections.Immutable;
using System.Linq;
using System.Reflection;
using Xunit;
namespace GeneratorTests.Tests
{
public class GeneratorTests
{
[Fact]
public void SimpleGeneratorTest()
{
string userSource = @"
namespace MyCode
{
public class Program
{
public static void Main(string[] args)
{
}
}
}
";
Compilation comp = CreateCompilation(userSource);
var newComp = RunGenerators(comp, out var generatorDiags, new SimpleGenerator());
Assert.Empty(generatorDiags);
Assert.Empty(newComp.GetDiagnostics());
}
private static Compilation CreateCompilation(string source)
=> CSharpCompilation.Create("compilation",
new[] { CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview)) },
new[] { MetadataReference.CreateFromFile(typeof(Binder).GetTypeInfo().Assembly.Location) },
new CSharpCompilationOptions(OutputKind.ConsoleApplication));
private static GeneratorDriver CreateDriver(Compilation c, params ISourceGenerator[] generators)
=> new CSharpGeneratorDriver(c.SyntaxTrees.First().Options,
ImmutableArray.Create(generators),
null,
ImmutableArray<AdditionalText>.Empty);
private static Compilation RunGenerators(Compilation c, out ImmutableArray<Diagnostic> diagnostics, params ISourceGenerator[] generators)
{
CreateDriver(c, generators).RunGeneratorsAndUpdateCompilation(c, out var d, out diagnostics);
return d;
}
}
}
@Youssef1313
Copy link

Would it be possible to pass AnalyzerConfigOptions using this model? I have a generator that depends on a project property being set, and to test it I am having to comment out the property check in the generator.

@sharwell Does the testing library supports passing .editorconfig for generators? (it does for analyzers & codefixes, but not sure about generators)

@sharwell
Copy link

sharwell commented Aug 6, 2021

@sharwell Does the testing library supports passing .editorconfig for generators? (it does for analyzers & codefixes, but not sure about generators)

Yes, you can add them to TestState.AnalyzerConfigFiles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment