示例#1
0
        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));
        }