public void RegistersAllInterfacesAndTheClassIfTheClassIsPublicIfOpenServiceTypeIsNotDefined() { var compilation = GetCompilation() .AddSyntaxTrees(SyntaxFactory.ParseSyntaxTree(SourceText.From(@"namespace Temp.Providers { public interface IProviderA<T> { decimal GetValue(); } public interface IProviderB<T> { decimal GetValue2(); } [ServiceDescriptor( Lifecycle = LifecycleKind.Singleton )] public class ProviderA<T> : IProviderB<T>, IProviderA<T> { public decimal GetValue() { return 9000.99M; } public decimal GetValue2() { return 9000.99M; } } }", Encoding.UTF8), CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Experimental))); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); Assert.False(context.Diagnostics.Any()); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); Assert.Equal(@"namespace Temp { public class Startup { void Configure(IServiceCollection services) { services.AddSingleton(typeof (Temp.Providers.IProviderB<>), typeof (Temp.Providers.ProviderA<>)); services.AddSingleton(typeof (Temp.Providers.IProviderA<>), typeof (Temp.Providers.ProviderA<>)); services.AddSingleton(typeof (Temp.Providers.ProviderA<>), typeof (Temp.Providers.ProviderA<>)); } public static int Main() { return 0; } } }", context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); }
public void AddAssemblyIsReplacedByDefault() { var compilation = GetCompilation() .AddSyntaxTrees(SyntaxFactory.ParseSyntaxTree(SourceText.From(@" namespace Temp { public class Startup2 { void Configure(IServiceCollection collection) { collection.AddAssembly(typeof(Startup2)); } } }", Encoding.UTF8), CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Experimental))); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); Assert.False(context.Diagnostics.Any()); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.Last().GetText().ToString()); Assert.Equal(@"namespace Temp { public class Startup2 { void Configure(IServiceCollection collection) { } } }", context.CSharpCompilation.SyntaxTrees.Last().GetText().ToString()); }
public void Compiles() { var compilation = GetCompilation(); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); Assert.False(context.Diagnostics.Any()); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); Assert.Equal(@"namespace Temp { public class Startup { void Configure(IServiceCollection services) { } public static int Main() { return 0; } } }", context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); }
public void DefaultsToTransient() { var compilation = GetCompilation() .AddSyntaxTrees(SyntaxFactory.ParseSyntaxTree(SourceText.From(@"namespace Temp.Providers { public interface IProviderA { decimal GetValue(); } [ServiceDescriptor(typeof(IProviderA))] public class ProviderA : IProviderA { public decimal GetValue() { return 9000.99M; } } }", Encoding.UTF8), CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Experimental))); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); Assert.False(context.Diagnostics.Any()); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); Assert.Equal(@"namespace Temp { public class Startup { void Configure(IServiceCollection services) { services.AddTransient(typeof (Temp.Providers.IProviderA), typeof (Temp.Providers.ProviderA)); } public static int Main() { return 0; } } }", context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); }
public void ReportsOpenDiagnostics() { var compilation = GetCompilation() .AddSyntaxTrees(SyntaxFactory.ParseSyntaxTree(SourceText.From(@"namespace Temp.Providers { public interface IProviderA<T> { decimal GetValue(); } public interface IProviderB<T> { decimal GetValue(); } [ServiceDescriptor(typeof(IProviderA<>), Lifecycle = LifecycleKind.Singleton)] public class ProviderA<T> : IProviderB<T> { public decimal GetValue() { return 9000.99M; } } }", Encoding.UTF8), CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Experimental))); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); Assert.True(context.Diagnostics.Any()); }
public void OpenDiagnosticsStillFunctionEvenIfReplacementNeverHappens() { var compilation = GetCompilation() .AddSyntaxTrees(SyntaxFactory.ParseSyntaxTree(SourceText.From(@"namespace Temp.Providers { public interface IProviderA<T> { decimal GetValue(); } public interface IProviderB<T> { decimal GetValue(); } [ServiceDescriptor(typeof(IProviderA<>), Lifecycle = LifecycleKind.Singleton)] public class ProviderA<T> : IProviderB<T> { public decimal GetValue() { return 9000.99M; } } }", Encoding.UTF8), CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Experimental))); var context = new BeforeCompileContext() { CSharpCompilation = compilation }; var unit = new PreprocessAnnotation(); unit.BeforeCompile((IBeforeCompileContext)context); //Console.WriteLine(context.CSharpCompilation.SyntaxTrees.First(x => x.GetText().ToString().Contains("class Startup")).GetText().ToString()); Assert.True(context.Diagnostics.Any()); }