2using Microsoft.VisualStudio.TestTools.UnitTesting;
5using System.Threading.Tasks;
16 var diagnostics = analyzer.SupportedDiagnostics;
17 Assert.AreEqual(2, diagnostics.Length);
19 var saveDiagnostic = diagnostics.Single(_ => _.Id == Constants.AnalyzerIdentifiers.FindSaveAssignmentIssue);
20 Assert.AreEqual(FindSaveAssignmentIssueAnalyzerConstants.Title, saveDiagnostic.Title.ToString(),
21 nameof(DiagnosticDescriptor.Title));
22 Assert.AreEqual(FindSaveAssignmentIssueAnalyzerConstants.Message, saveDiagnostic.MessageFormat.ToString(),
23 nameof(DiagnosticDescriptor.MessageFormat));
24 Assert.AreEqual(Constants.Categories.Usage, saveDiagnostic.Category,
25 nameof(DiagnosticDescriptor.Category));
26 Assert.AreEqual(DiagnosticSeverity.Error, saveDiagnostic.DefaultSeverity,
27 nameof(DiagnosticDescriptor.DefaultSeverity));
29 saveDiagnostic.HelpLinkUri,
30 nameof(DiagnosticDescriptor.HelpLinkUri));
32 var saveAsyncDiagnostic = diagnostics.Single(_ => _.Id == Constants.AnalyzerIdentifiers.FindSaveAsyncAssignmentIssue);
33 Assert.AreEqual(FindSaveAsyncAssignmentIssueAnalyzerConstants.Title, saveAsyncDiagnostic.Title.ToString(),
34 nameof(DiagnosticDescriptor.Title));
35 Assert.AreEqual(FindSaveAsyncAssignmentIssueAnalyzerConstants.Message, saveAsyncDiagnostic.MessageFormat.ToString(),
36 nameof(DiagnosticDescriptor.MessageFormat));
37 Assert.AreEqual(Constants.Categories.Usage, saveAsyncDiagnostic.Category,
38 nameof(DiagnosticDescriptor.Category));
39 Assert.AreEqual(DiagnosticSeverity.Error, saveAsyncDiagnostic.DefaultSeverity,
40 nameof(DiagnosticDescriptor.DefaultSeverity));
42 saveAsyncDiagnostic.HelpLinkUri,
43 nameof(DiagnosticDescriptor.HelpLinkUri));
52 public A Save() => null;
64 code, Array.Empty<
string>());
71@"using System.Threading.Tasks;
75 public async Task<A> SaveAsync() => await Task.FromResult<A>(null);
80 public async Task Call()
87 code, Array.Empty<
string>());
96public class A : BusinessBase<A> { }
107 code, Array.Empty<
string>());
115using System.Threading.Tasks;
117public class A : BusinessBase<A> { }
121 public async Task Call()
124 x = await x.SaveAsync();
128 code, Array.Empty<
string>());
137public class A : BusinessBase<A> { }
148 code,
new[] { Constants.AnalyzerIdentifiers.FindSaveAssignmentIssue });
156using System.Threading.Tasks;
158public class A : BusinessBase<A> { }
162 public async Task Call()
169 code,
new[] { Constants.AnalyzerIdentifiers.FindSaveAsyncAssignmentIssue });
178public class A : BusinessBase<A>{ }
189 code, Array.Empty<
string>());
197using System.Threading.Tasks;
199public class A : BusinessBase<A>{ }
203 public async Task<A> Call()
206 return await x.SaveAsync();
210 code, Array.Empty<
string>());
220public class A : BusinessBase<A>{ }
228 this.Run(() => x.Save());
231 private B Run(Func<B> code) => code();
234 code, Array.Empty<
string>());
243using System.Threading.Tasks;
245public class A : BusinessBase<A>{ }
249 public async Task Call()
253 await this.Run(async () => await x.SaveAsync());
256 private async Task<A> Run(Func<Task<A>> code) => await code();
259 code, Array.Empty<
string>());
269public class A : BusinessBase<A>{ }
282 private A Run(Func<A> code) => code();
286 code, Array.Empty<
string>());
295using System.Threading.Tasks;
297public class A : BusinessBase<A>{ }
301 public async Task Call()
303 await this.Run(async () =>
306 return await x.SaveAsync();
310 private async Task<A> Run(Func<Task<A>> code) => await code();
313 code, Array.Empty<
string>());
322public class A : BusinessBase<A>
324 public void Foo() => Save();
327 code, Array.Empty<
string>());
335using System.Threading.Tasks;
337public class A : BusinessBase<A>
339 public async Task Foo() => await SaveAsync();
342 code, Array.Empty<
string>());
351public class A : BusinessBase<A>
353 public void Foo() => this.Save();
356 code, Array.Empty<
string>());
364using System.Threading.Tasks;
366public class A : BusinessBase<A>
368 public async Task Foo() => this.SaveAsync();
371 code, Array.Empty<
string>());
383 public void Foo() => base.Save();
386 code, Array.Empty<
string>());
394using System.Threading.Tasks;
396public class A : BusinessBase<A>
398 public async Task Foo() => await base.SaveAsync();
401 code, Array.Empty<
string>());
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturned()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturned()
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsABusinessBaseAndResultIsAssigned()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturnedInLambda()
async Task AnalyzeWhenSaveIsCalledOnABusinessObjectWithinItself()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsABusinessBaseAndResultIsNotAssigned()
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsABusinessBaseAndResultIsNotAssigned()
async Task AnalyzeWhenSaveIsCalledOnABusinessObjectAsBase()
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturnedInLambdaWithBlock()
async Task AnalyzeWhenSaveAsyncIsCalledOnABusinessObjectAsBase()
async Task AnalyzeWhenSaveIsCalledOnABusinessObjectAsThis()
async Task AnalyzeWhenSaveAsyncIsCalledOnABusinessObjectWithinItself()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturnedInLambdaWithBlock()
void VerifySupportedDiagnostics()
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsABusinessBaseAndResultIsReturnedInLambda()
async Task AnalyzeWhenSaveAsyncIsCalledOnABusinessObjectAsThis()
async Task AnalyzeWhenSaveAsyncIsCalledOnAnObjectThatIsNotABusinessBase()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsABusinessBaseAndResultIsAssigned()
async Task AnalyzeWhenSaveIsCalledOnAnObjectThatIsNotABusinessBase()