Example #1
0
        private async Task <QuickFix[]> GetBuildCommandAsync(string source)
        {
            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var rh = SharedOmniSharpTestHost.GetRequestHandler <BuildCommandService>(OmniSharpEndpoints.BuildCommand);
            var cc = rh._config.MSBuildPath = new BuildPath()
            {
                Path = "path\\to\\msbuild"
            };


            var point          = testFile.Content.GetPointFromPosition();
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new BuildCommandRequest
            {
                Type     = BuildType.Build,
                Line     = point.Line,
                Column   = point.Offset,
                FileName = testFile.FileName,
                Buffer   = testFile.Content.Code
            };

            var response = await requestHandler.Handle(request);

            return(response.QuickFixes.ToArray());
        }
Example #2
0
        private async Task AssertTextChanges(string source, params LinePositionSpanTextChange[] expected)
        {
            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var span  = testFile.Content.GetSpans().Single();
            var range = testFile.Content.GetRangeFromSpan(span);

            var request = new FormatRangeRequest()
            {
                Buffer    = testFile.Content.Code,
                FileName  = testFile.FileName,
                Line      = range.Start.Line,
                Column    = range.Start.Offset,
                EndLine   = range.End.Line,
                EndColumn = range.End.Offset
            };

            var requestHandler = SharedOmniSharpTestHost.GetRequestHandler <FormatRangeService>(OmniSharpEndpoints.FormatRange);

            var response = await requestHandler.Handle(request);

            var actual = response.Changes.ToArray();

            Assert.Equal(expected.Length, actual.Length);

            for (var i = 0; i < expected.Length; i++)
            {
                Assert.Equal(expected[i].NewText, actual[i].NewText);
                Assert.Equal(expected[i].StartLine, actual[i].StartLine);
                Assert.Equal(expected[i].StartColumn, actual[i].StartColumn);
                Assert.Equal(expected[i].EndLine, actual[i].EndLine);
                Assert.Equal(expected[i].EndColumn, actual[i].EndColumn);
            }
        }
Example #3
0
        public async Task CodeCheckSpecifiedFileOnly(string filename)
        {
            var testFile = new TestFile(filename, "class C { int n = true; }");

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var messages  = new List <DiagnosticMessage>();
            var emitter   = new DiagnosticTestEmitter(messages);
            var forwarder = new DiagnosticEventForwarder(emitter)
            {
                IsEnabled = true
            };

            var service = new CSharpDiagnosticService(SharedOmniSharpTestHost.Workspace, forwarder, this.LoggerFactory);

            service.QueueDiagnostics(filename);

            await emitter.Emitted;

            Assert.Single(messages);
            var message = messages.First();

            Assert.Single(message.Results);
            var result = message.Results.First();

            Assert.Single(result.QuickFixes);
            Assert.Equal(filename, result.FileName);
        }
Example #4
0
        public async Task CheckAllFiles(string filename1, string filename2)
        {
            var testFile1 = new TestFile(filename1, "class C1 { int n = true; }");
            var testFile2 = new TestFile(filename2, "class C2 { int n = true; }");

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile1, testFile2);
            var messages  = new List <DiagnosticMessage>();
            var emitter   = new DiagnosticTestEmitter(messages);
            var forwarder = new DiagnosticEventForwarder(emitter);
            var service   = new CSharpDiagnosticService(SharedOmniSharpTestHost.Workspace, forwarder, this.LoggerFactory);

            var controller = new DiagnosticsService(SharedOmniSharpTestHost.Workspace, forwarder, service);
            var response   = await controller.Handle(new DiagnosticsRequest());

            await emitter.Emitted;

            Assert.Single(messages);
            var message = messages.First();

            Assert.Equal(2, message.Results.Count());

            var a = message.Results.First(x => x.FileName == filename1);

            Assert.Single(a.QuickFixes);
            Assert.Equal(filename1, a.FileName);

            var b = message.Results.First(x => x.FileName == filename2);

            Assert.Single(b.QuickFixes);
            Assert.Equal(filename2, b.FileName);
        }
        public async Task OmitsNamespaceForTypesInGlobalNamespace()
        {
            const string source = @"namespace Bar {
            class Foo {}
            }
            class Baz {}";

            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var requestInNormalNamespace = new QuickInfoRequest {
                FileName = testFile.FileName, Line = 1, Column = 19
            };
            var responseInNormalNamespace = await requestHandler.Handle(requestInNormalNamespace);

            var requestInGlobalNamespace = new QuickInfoRequest {
                FileName = testFile.FileName, Line = 3, Column = 19
            };
            var responseInGlobalNamespace = await requestHandler.Handle(requestInGlobalNamespace);

            Assert.Equal("```csharp\nclass Bar.Foo\n```", responseInNormalNamespace.Markdown);
            Assert.Equal("```csharp\nclass Baz\n```", responseInGlobalNamespace.Markdown);
        }
Example #6
0
        private async Task AssertTextChanges(string source, string expected)
        {
            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var span  = testFile.Content.GetSpans().Single();
            var range = testFile.Content.GetRangeFromSpan(span);

            var request = new FormatRangeRequest()
            {
                Buffer    = testFile.Content.Code,
                FileName  = testFile.FileName,
                Line      = range.Start.Line,
                Column    = range.Start.Offset,
                EndLine   = range.End.Line,
                EndColumn = range.End.Offset
            };

            var requestHandler = SharedOmniSharpTestHost.GetRequestHandler <FormatRangeService>(OmniSharpEndpoints.FormatRange);

            var response = await requestHandler.Handle(request);

            var actual = response.Changes.ToArray();

            var oldText     = testFile.Content.Text;
            var textChanges = GetTextChanges(oldText, response.Changes);
            var actualText  = oldText.WithChanges(textChanges).ToString();

            Assert.Equal(expected.Replace("\r\n", "\n"), actualText.Replace("\r\n", "\n"));
        }
        public async Task ParameterDocumentation()
        {
            const string source = @"namespace N
{
    class C
    {
        /// <param name=""i"">Some content <see cref=""C""/></param>
        public void M(int i)
        {
            _ = i;
        }
    }
}";

            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var request = new QuickInfoRequest {
                FileName = testFile.FileName, Line = 7, Column = 17
            };
            var response = await requestHandler.Handle(request);

            Assert.Equal("```csharp\n(parameter) int i\n```\n\nSome content `C`", response.Markdown);
        }
        private Document CreateTestDocumentId()
        {
            string fileName = $"{Guid.NewGuid()}";
            var    newFile  = new TestFile(fileName, "");

            _ = SharedOmniSharpTestHost.AddFilesToWorkspace(newFile).Single();
            return(SharedOmniSharpTestHost.Workspace.GetDocument(fileName));
        }
        private async Task <QuickFix[]> GetFilesAsync(params TestFile[] testFiles)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFiles);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var response       = await requestHandler.Handle(new GotoFileRequest());

            return(response.QuickFixes.ToArray());
        }
        private async Task <QuickFixResponse> FindSymbolsAsync(string code, string filename)
        {
            var testFile = new TestFile(filename, code);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(await requestHandler.Handle(null));
        }
Example #11
0
        private async Task <FileMemberElement[]> GetStructureAsync(string source, string fileName = "d.cs")
        {
            var testFile = new TestFile(fileName, source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var nodes = await StructureComputer.Compute(SharedOmniSharpTestHost.Workspace.GetDocuments(testFile.FileName));

            return(nodes.ToArray());
        }
Example #12
0
        private async Task <QuickFixResponse> FindSymbolsWithFilterAsync(string code, string filter)
        {
            var testFile = new TestFile("dummy.cs", code);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(await requestHandler.Handle(new FindSymbolsRequest { Filter = filter }));
        }
Example #13
0
 private async Task <RenameResponse> PerformRename(
     TestFile[] testFiles, string renameTo,
     bool wantsTextChanges = false,
     bool applyTextChanges = true,
     bool updateBuffer     = false)
 {
     SharedOmniSharpTestHost.AddFilesToWorkspace(testFiles);
     return(await PerformRename(SharedOmniSharpTestHost, testFiles, renameTo, wantsTextChanges, applyTextChanges, updateBuffer));
 }
Example #14
0
        public async Task ReturnsResultsForSourceGenerators()
        {
            const string Source            = @"
public class {|generatedClassName:Generated|}
{
    public int {|propertyName:Property|} { get; set; }
}
";
            const string FileName          = "real.cs";
            TestFile     generatedTestFile = new("GeneratedFile.cs", Source);
            var          testFile          = new TestFile(FileName, @"
class C
{
    public void M(Generated g)
    {
        _ = g.P$$roperty;
    }
}
");

            TestHelpers.AddProjectToWorkspace(SharedOmniSharpTestHost.Workspace,
                                              "project.csproj",
                                              new[] { "netcoreapp3.1" },
                                              new[] { testFile },
                                              analyzerRefs: ImmutableArray.Create <AnalyzerReference>(new TestGeneratorReference(
                                                                                                          context => context.AddSource("GeneratedFile", generatedTestFile.Content.Code))));

            var point = testFile.Content.GetPointFromPosition();

            var gotoDefRequest = CreateRequest(FileName, point.Line, point.Offset, wantMetadata: true);
            var gotoDefHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var response       = await gotoDefHandler.Handle(gotoDefRequest);

            var info = GetInfo(response).Single();

            Assert.NotNull(info.SourceGeneratorInfo);

            var expectedSpan  = generatedTestFile.Content.GetSpans("propertyName").Single();
            var expectedRange = generatedTestFile.Content.GetRangeFromSpan(expectedSpan);

            Assert.Equal(expectedRange.Start.Line, info.Line);
            Assert.Equal(expectedRange.Start.Offset, info.Column);

            var sourceGeneratedFileHandler = SharedOmniSharpTestHost.GetRequestHandler <SourceGeneratedFileService>(OmniSharpEndpoints.SourceGeneratedFile);
            var sourceGeneratedRequest     = new SourceGeneratedFileRequest
            {
                DocumentGuid = info.SourceGeneratorInfo.DocumentGuid,
                ProjectGuid  = info.SourceGeneratorInfo.ProjectGuid
            };

            var sourceGeneratedFileResponse = await sourceGeneratedFileHandler.Handle(sourceGeneratedRequest);

            Assert.NotNull(sourceGeneratedFileResponse);
            Assert.Equal(generatedTestFile.Content.Code, sourceGeneratedFileResponse.Source);
            Assert.Equal(@"OmniSharp.Roslyn.CSharp.Tests\OmniSharp.Roslyn.CSharp.Tests.TestSourceGenerator\GeneratedFile.cs", sourceGeneratedFileResponse.SourceName.Replace("/", @"\"));
        }
        private async Task <QuickInfoResponse> GetTypeLookUpResponse(int line, int column)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(s_testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new QuickInfoRequest {
                FileName = s_testFile.FileName, Line = line, Column = column
            };

            return(await requestHandler.Handle(request));
        }
        public async Task CheckAllFiles()
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(
                new TestFile("a.cs", "class C1 { int n = true; }"),
                new TestFile("b.cs", "class C2 { int n = true; }"));

            var handler    = GetRequestHandler(SharedOmniSharpTestHost);
            var quickFixes = await handler.Handle(new CodeCheckRequest());

            Assert.Equal(2, quickFixes.QuickFixes.Count());
        }
        private async Task <FixUsingsResponse> RunFixUsingsAsync(string code)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(new TestFile(TestFileName, code));
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new FixUsingsRequest
            {
                FileName = TestFileName
            };

            return(await requestHandler.Handle(request));
        }
Example #18
0
        protected async Task <TGotoDefinitionResponse> GetResponseAsync(TestFile[] testFiles, bool wantMetadata)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFiles);
            var source = testFiles.Single(tf => tf.Content.HasPosition);
            var point  = source.Content.GetPointFromPosition();

            var request = CreateRequest(source.FileName, point.Line, point.Offset, timeout: 60000, wantMetadata: wantMetadata);

            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(await requestHandler.Handle(request));
        }
        private Task <BlockStructureResponse> GetResponseAsync(TestFile testFile)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var request = new BlockStructureRequest
            {
                FileName = testFile.FileName,
            };

            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(requestHandler.Handle(request));
        }
        public async Task CodeCheckSpecifiedFileOnly()
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(new TestFile("a.cs", "class C { int n = true; }"));
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var quickFixes     = await requestHandler.Handle(new CodeCheckRequest()
            {
                FileName = "a.cs"
            });

            Assert.Single(quickFixes.QuickFixes);
            Assert.Equal("a.cs", quickFixes.QuickFixes.First().FileName);
        }
Example #21
0
        private async Task <QuickFixResponse> FindSymbolsWithFilterAsync(string code, string filename, string filter, int?minFilterLength, int?maxItemsToReturn)
        {
            var testFile = new TestFile(filename, code);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(await requestHandler.Handle(new FindSymbolsRequest {
                Filter = filter,
                MinFilterLength = minFilterLength,
                MaxItemsToReturn = maxItemsToReturn
            }));
        }
        private async Task <QuickInfoResponse> GetTypeLookUpResponse(string content)
        {
            TestFile testFile = new TestFile("dummy.cs", content);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var point          = testFile.Content.GetPointFromPosition();
            var request        = new QuickInfoRequest {
                FileName = testFile.FileName, Line = point.Line, Column = point.Offset
            };

            return(await requestHandler.Handle(request));
        }
Example #23
0
        private async Task <SemanticHighlightSpan[]> GetSemanticHighlightsAsync(TestFile testFile, Range range)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new SemanticHighlightRequest
            {
                FileName = testFile.FileName,
                Range    = range
            };

            var response = await requestHandler.Handle(request);

            return(response.Spans);
        }
Example #24
0
        private async Task <HighlightSpan[]> GetHighlightsAsync(TestFile testFile, int?line = null, HighlightClassification?exclude = null)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new HighlightRequest
            {
                FileName = testFile.FileName,
                Lines    = line != null ? new[] { line.Value } : null,
                ExcludeClassifications = exclude != null ? new[] { exclude.Value } : null
            };

            var response = await requestHandler.Handle(request);

            return(response.Highlights);
        }
        private async Task AssertEndPosition(string source, Direction direction)
        {
            var testFile = new TestFile("test.cs", source);

            var start = testFile.Content.GetSpans("start").Single().Start;
            var end   = testFile.Content.GetSpans("end").Single().Start;

            var startPoint = testFile.Content.Text.GetPointFromPosition(start);
            var endPoint   = testFile.Content.Text.GetPointFromPosition(end);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var response = await SendRequest(SharedOmniSharpTestHost, testFile, startPoint.Line, startPoint.Offset, direction);

            Assert.Equal(endPoint.Line, response.Line);
            Assert.Equal(endPoint.Offset, response.Column);
        }
Example #26
0
        public async Task EnablesWhenEndPointIsHit(string filename1, string filename2)
        {
            var testFile1 = new TestFile(filename1, "class C1 { int n = true; }");
            var testFile2 = new TestFile(filename2, "class C2 { int n = true; }");

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile1, testFile2);
            var messages  = new List <DiagnosticMessage>();
            var emitter   = new DiagnosticTestEmitter(messages);
            var forwarder = new DiagnosticEventForwarder(emitter);
            var service   = new CSharpDiagnosticService(SharedOmniSharpTestHost.Workspace, forwarder, this.LoggerFactory);

            var controller = new DiagnosticsService(SharedOmniSharpTestHost.Workspace, forwarder, service);
            var response   = await controller.Handle(new DiagnosticsRequest());

            Assert.True(forwarder.IsEnabled);
        }
Example #27
0
        private async Task TestMetadataAsync(string filename, string assemblyName, string typeName)
        {
            var testFile = new TestFile(filename, "class C {}");

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var request = new MetadataRequest
            {
                AssemblyName = assemblyName,
                TypeName     = typeName,
                Timeout      = 60000
            };

            var response = await requestHandler.Handle(request);

            Assert.NotNull(response.Source);
        }
        public async Task EnablesWhenEndPointIsHit(string filename1, string filename2)
        {
            SharedOmniSharpTestHost.ClearWorkspace();

            var testFile1 = new TestFile(filename1, "class C1 { int n = true; }");
            var testFile2 = new TestFile(filename2, "class C2 { int n = true; }");

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile1, testFile2);

            var emitter   = new TestEventEmitter <DiagnosticMessage>();
            var forwarder = new DiagnosticEventForwarder(emitter);
            var service   = CreateDiagnosticService(forwarder);

            var controller = new DiagnosticsService(forwarder, service);
            var response   = await controller.Handle(new DiagnosticsRequest());

            Assert.True(forwarder.IsEnabled);
        }
        public async Task IncludesNamespaceForRegularCSharpSyntax()
        {
            const string source = @"namespace Bar {
            class Foo {}
            }";

            var testFile = new TestFile("dummy.cs", source);

            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            var request = new QuickInfoRequest {
                FileName = testFile.FileName, Line = 1, Column = 19
            };
            var response = await requestHandler.Handle(request);

            Assert.Equal("```csharp\nclass Bar.Foo\n```", response.Markdown);
        }
Example #30
0
        private async Task <GotoDefinitionResponse> GetResponseAsync(TestFile[] testFiles, bool wantMetadata)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFiles);
            var source = testFiles.Single(tf => tf.Content.HasPosition);
            var point  = source.Content.GetPointFromPosition();

            var request = new GotoDefinitionRequest
            {
                FileName     = source.FileName,
                Line         = point.Line,
                Column       = point.Offset,
                Timeout      = 60000,
                WantMetadata = wantMetadata
            };

            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);

            return(await requestHandler.Handle(request));
        }