static List <CodeAction> GetActions(CodeRefactoringProvider action, string input, out DiagnosticTestBase.TestWorkspace workspace, out Document doc, VisualBasicParseOptions parseOptions = null) { TextSpan selectedSpan; TextSpan markedSpan; string text = ParseText(input, out selectedSpan, out markedSpan); workspace = new DiagnosticTestBase.TestWorkspace(); var projectId = ProjectId.CreateNewId(); var documentId = DocumentId.CreateNewId(projectId); if (parseOptions == null) { parseOptions = new VisualBasicParseOptions( LanguageVersion.VisualBasic14, DocumentationMode.Diagnose | DocumentationMode.Parse, SourceCodeKind.Regular, ImmutableArray.Create( new KeyValuePair <string, object>("DEBUG", null), new KeyValuePair <string, object>("TEST", null)) ); } //workspace.Options.WithChangedOption(VisualBasicFormattingOptions.NewLinesForBracesInControlBlocks, false); workspace.Open(ProjectInfo.Create( projectId, VersionStamp.Create(), "TestProject", "TestProject", LanguageNames.VisualBasic, null, null, new VisualBasicCompilationOptions( OutputKind.DynamicallyLinkedLibrary, "", "", "Script", null, null, OptionStrict.Off, true, true, false, parseOptions ), parseOptions, new[] { DocumentInfo.Create( documentId, "a.cs", null, SourceCodeKind.Regular, TextLoader.From(TextAndVersion.Create(SourceText.From(text), VersionStamp.Create())) ) }, null, DiagnosticTestBase.DefaultMetadataReferences ) ); doc = workspace.CurrentSolution.GetProject(projectId).GetDocument(documentId); var actions = new List <CodeAction>(); var context = new CodeRefactoringContext(doc, selectedSpan, actions.Add, default(CancellationToken)); action.ComputeRefactoringsAsync(context).Wait(); if (markedSpan.Start > 0) { foreach (var nra in actions.OfType <NRefactoryCodeAction>()) { Assert.AreEqual(markedSpan, nra.TextSpan, "Activation span does not match."); } } return(actions); }
static List <CodeAction> GetActions(CodeFixProvider action, string input, out DiagnosticTestBase.TestWorkspace workspace, out Document doc, CSharpParseOptions parseOptions = null) { TextSpan selectedSpan; string text = ParseText(input, out selectedSpan); workspace = new DiagnosticTestBase.TestWorkspace(); var projectId = ProjectId.CreateNewId(); var documentId = DocumentId.CreateNewId(projectId); if (parseOptions == null) { parseOptions = new CSharpParseOptions( LanguageVersion.CSharp6, DocumentationMode.Diagnose | DocumentationMode.Parse, SourceCodeKind.Regular, ImmutableArray.Create("DEBUG", "TEST") ); } workspace.Options.WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInControlBlocks, false); workspace.Open(ProjectInfo.Create( projectId, VersionStamp.Create(), "TestProject", "TestProject", LanguageNames.CSharp, null, null, new CSharpCompilationOptions( OutputKind.DynamicallyLinkedLibrary, false, "", "", "Script", null, OptimizationLevel.Debug, false, true ), parseOptions, new[] { DocumentInfo.Create( documentId, "a.cs", null, SourceCodeKind.Regular, TextLoader.From(TextAndVersion.Create(SourceText.From(text), VersionStamp.Create())) ) }, null, CSharpDiagnosticTestBase.DefaultMetadataReferences ) ); doc = workspace.CurrentSolution.GetProject(projectId).GetDocument(documentId); var actions = new List <Tuple <CodeAction, ImmutableArray <Diagnostic> > >(); var model = doc.GetSemanticModelAsync().GetAwaiter().GetResult(); var diagnostics = model.GetDiagnostics(); if (diagnostics.Length == 0) { return(new List <CodeAction>()); } foreach (var d in diagnostics) { if (action.FixableDiagnosticIds.Contains(d.Id)) { if (selectedSpan.Start > 0) { Assert.True(selectedSpan == d.Location.SourceSpan, "Activation span does not match."); } var context = new CodeFixContext(doc, d.Location.SourceSpan, diagnostics.Where(d2 => d2.Location.SourceSpan == d.Location.SourceSpan).ToImmutableArray(), (arg1, arg2) => actions.Add(Tuple.Create(arg1, arg2)), default(CancellationToken)); action.RegisterCodeFixesAsync(context); } } return(actions.Select(a => a.Item1).ToList()); }
static List <CodeAction> GetActions(CodeRefactoringProvider action, string input, out DiagnosticTestBase.TestWorkspace workspace, out Document doc, CSharpParseOptions parseOptions = null) { TextSpan selectedSpan; TextSpan markedSpan; string text = ParseText(input, out selectedSpan, out markedSpan); workspace = new DiagnosticTestBase.TestWorkspace(); var projectId = ProjectId.CreateNewId(); var documentId = DocumentId.CreateNewId(projectId); if (parseOptions == null) { parseOptions = new CSharpParseOptions( LanguageVersion.CSharp6, DocumentationMode.Diagnose | DocumentationMode.Parse, SourceCodeKind.Regular, ImmutableArray.Create("DEBUG", "TEST") ); } workspace.Options = workspace.Options .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInControlBlocks, true) .WithChangedOption(new OptionKey(CodeStyleOptions.PreferIntrinsicPredefinedTypeKeywordInDeclaration, LanguageNames.CSharp), true) .WithChangedOption(new OptionKey(CodeStyleOptions.PreferIntrinsicPredefinedTypeKeywordInMemberAccess, LanguageNames.CSharp), true); workspace.Open(ProjectInfo.Create( projectId, VersionStamp.Create(), "TestProject", "TestProject", LanguageNames.CSharp, null, null, new CSharpCompilationOptions( OutputKind.DynamicallyLinkedLibrary, false, "", "", "Script", null, OptimizationLevel.Debug, false, true ), parseOptions, new[] { DocumentInfo.Create( documentId, "a.cs", null, SourceCodeKind.Regular, TextLoader.From(TextAndVersion.Create(SourceText.From(text), VersionStamp.Create())) ) }, null, DiagnosticTestBase.DefaultMetadataReferences ) ); doc = workspace.CurrentSolution.GetProject(projectId).GetDocument(documentId); var actions = new List <CodeAction>(); var context = new CodeRefactoringContext(doc, selectedSpan, actions.Add, default(CancellationToken)); action.ComputeRefactoringsAsync(context).GetAwaiter().GetResult(); if (markedSpan.Start > 0) { foreach (var nra in actions.OfType <NRefactoryCodeAction>()) { Assert.True(markedSpan == nra.TextSpan, "Activation span does not match."); } } return(actions); }