public void CanCreateDiagnosticForAnalyzerLoadFailure( AnalyzerLoadFailureEventArgs.FailureErrorCode errorCode, [CombinatorialValues(LanguageNames.CSharp, LanguageNames.VisualBasic, null)] string?languageName) { // One potential value is None, which isn't actually a valid enum value to test. if (errorCode == AnalyzerLoadFailureEventArgs.FailureErrorCode.None) { return; } var expectsTypeName = errorCode is AnalyzerLoadFailureEventArgs.FailureErrorCode.UnableToCreateAnalyzer or AnalyzerLoadFailureEventArgs.FailureErrorCode.ReferencesFramework; const string analyzerTypeName = "AnalyzerTypeName"; var eventArgs = new AnalyzerLoadFailureEventArgs( errorCode, message: errorCode.ToString(), typeNameOpt: expectsTypeName ? analyzerTypeName : null); // Ensure CreateAnalyzerLoadFailureDiagnostic doesn't fail when called. We don't assert much about the resulting // diagnostic -- this is primarly to ensure we don't forget to update it if a new error code is added. var diagnostic = DocumentAnalysisExecutor.CreateAnalyzerLoadFailureDiagnostic(eventArgs, "Analyzer.dll", null, languageName); Assert.Equal(languageName, diagnostic.Language); if (expectsTypeName) { Assert.Contains(analyzerTypeName, diagnostic.Message); } else { Assert.DoesNotContain(analyzerTypeName, diagnostic.Message); } }
private static AnalyzerLoadFailureEventArgs CreateAnalyzerFailedArgs(Exception e, string typeNameOpt = null) { // unwrap: e = (e as TargetInvocationException) ?? e; // remove all line breaks from the exception message string message = e.Message.Replace("\r", "").Replace("\n", ""); AnalyzerLoadFailureEventArgs.FailureErrorCode errorCode = (typeNameOpt != null) ? AnalyzerLoadFailureEventArgs.FailureErrorCode.UnableToCreateAnalyzer : AnalyzerLoadFailureEventArgs.FailureErrorCode.UnableToLoadAnalyzer; return(new AnalyzerLoadFailureEventArgs(errorCode, message, e, typeNameOpt)); }