Skip to content

Commit 178ce11

Browse files
authored
Update textDocument/definition tests (#203)
* tests/CSharpLanguageServer.Tests/ReferenceTests.fs: update * tests/CSharpLanguageServer.Tests/DefinitionTests.fs: update definition tests to actually test things * tests/CSharpLanguageServer.Tests/Tooling.fs: move Request() to ClientController
1 parent f2f559d commit 178ce11

File tree

17 files changed

+139
-70
lines changed

17 files changed

+139
-70
lines changed

tests/CSharpLanguageServer.Tests/CodeActionTests.fs

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ let testCodeActionOnMethodNameWorks() =
2626
PartialResultToken = None
2727
}
2828

29-
let caResult0 : TextDocumentCodeActionResult option = classFile.Request("textDocument/codeAction", caParams0)
29+
let caResult0 : TextDocumentCodeActionResult option =
30+
client.Request("textDocument/codeAction", caParams0)
31+
3032
Assert.IsTrue(caResult0.IsSome)
3133

3234
match caResult0 with

tests/CSharpLanguageServer.Tests/DefinitionTests.fs

+28-22
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ open NUnit.Framework
44
open Ionide.LanguageServerProtocol.Types
55

66
open CSharpLanguageServer.Tests.Tooling
7-
open System
87

98
[<TestCase>]
109
let testDefinitionWorks () =
11-
use client = setupServerClient defaultClientProfile "TestData/testDefinitionWorks"
10+
use client = setupServerClient defaultClientProfile
11+
"TestData/testDefinitionWorks"
1212
client.StartAndWaitForSolutionLoad()
1313

1414
use classFile = client.Open("Project/Class.cs")
@@ -20,7 +20,9 @@ let testDefinitionWorks () =
2020
PartialResultToken = None
2121
}
2222

23-
let declaration0: Declaration option = classFile.Request("textDocument/definition", definitionParams0)
23+
let declaration0: Declaration option =
24+
client.Request("textDocument/definition", definitionParams0)
25+
2426
Assert.IsTrue(declaration0.IsNone)
2527

2628
let definitionParams1: DefinitionParams =
@@ -30,7 +32,8 @@ let testDefinitionWorks () =
3032
PartialResultToken = None
3133
}
3234

33-
let declaration1: Declaration option = classFile.Request("textDocument/definition", definitionParams1)
35+
let declaration1: Declaration option =
36+
client.Request("textDocument/definition", definitionParams1)
3437

3538
match declaration1.Value with
3639
| U2.C1 _ -> failwith "Location[] was expected"
@@ -45,32 +48,35 @@ let testDefinitionWorks () =
4548

4649
Assert.AreEqual(expectedLocations1, declaration1Locations)
4750

51+
4852
[<TestCase>]
4953
let testDefinitionWorksInAspNetProject () =
5054
use client = setupServerClient defaultClientProfile
5155
"TestData/testDefinitionWorksInAspNetProject"
5256
client.StartAndWaitForSolutionLoad()
5357

54-
use indexCsHtmlCs = client.Open("Project/Pages/Index.cshtml.cs")
58+
use testIndexViewModelCsFile = client.Open("Project/Models/Test/IndexViewModel.cs")
59+
use testControllerCsFile = client.Open("Project/Controllers/TestController.cs")
5560

56-
let definitionParams1: DefinitionParams =
57-
{ TextDocument = { Uri = indexCsHtmlCs.Uri }
58-
Position = { Line = 7u; Character = 8u }
61+
let definitionParams0: DefinitionParams =
62+
{ TextDocument = { Uri = testControllerCsFile.Uri }
63+
Position = { Line = 11u; Character = 12u }
5964
WorkDoneToken = None
6065
PartialResultToken = None
6166
}
6267

63-
let declaration1: Declaration option = indexCsHtmlCs.Request("textDocument/definition", definitionParams1)
64-
65-
match declaration1.Value with
66-
| U2.C1 _ -> failwith "Location[] was expected"
67-
| U2.C2 declaration1Locations ->
68-
let expectedLocations1: Location array =
69-
[|
70-
{ Uri = indexCsHtmlCs.Uri
71-
Range = { Start = { Line = 4u; Character = 19u }
72-
End = { Line = 4u; Character = 24u } }
73-
}
74-
|]
75-
76-
Assert.AreEqual(expectedLocations1, declaration1Locations)
68+
let definition0: Declaration option =
69+
client.Request("textDocument/definition", definitionParams0)
70+
71+
let expectedLocations0: Location array =
72+
[|
73+
{ Uri = testIndexViewModelCsFile.Uri
74+
Range = { Start = { Line = 3u; Character = 19u }
75+
End = { Line = 3u; Character = 25u } }
76+
}
77+
|]
78+
79+
match definition0 with
80+
| Some (U2.C2 definition0Locations) ->
81+
Assert.AreEqual(expectedLocations0, definition0Locations)
82+
| _ -> failwithf "Some Location[] was expected but %s received" (string definition0)

tests/CSharpLanguageServer.Tests/DiagnosticTests.fs

+4-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ let testPullDiagnosticsWork () =
7575
Identifier = None
7676
PreviousResultId = None }
7777

78-
let report0: DocumentDiagnosticReport option = classFile.Request("textDocument/diagnostic", diagnosticParams)
78+
let report0: DocumentDiagnosticReport option =
79+
client.Request("textDocument/diagnostic", diagnosticParams)
7980

8081
match report0 with
8182
| Some (U2.C1 report) ->
@@ -106,7 +107,8 @@ let testPullDiagnosticsWork () =
106107
//
107108
classFile.DidChange("")
108109

109-
let report1: DocumentDiagnosticReport option = classFile.Request("textDocument/diagnostic", diagnosticParams)
110+
let report1: DocumentDiagnosticReport option =
111+
client.Request("textDocument/diagnostic", diagnosticParams)
110112

111113
match report1 with
112114
| Some (U2.C1 report) ->

tests/CSharpLanguageServer.Tests/HoverTests.fs

+6-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ let testHoverWorks() =
2222
WorkDoneToken = None
2323
}
2424

25-
let hover0: Hover option = classFile.Request("textDocument/hover", hover0Params)
25+
let hover0: Hover option =
26+
client.Request("textDocument/hover", hover0Params)
27+
2628
Assert.IsTrue(hover0.IsSome)
2729

2830
match hover0 with
@@ -46,5 +48,7 @@ let testHoverWorks() =
4648
WorkDoneToken = None
4749
}
4850

49-
let hover1: Hover option = classFile.Request("textDocument/hover", hover1Params)
51+
let hover1: Hover option =
52+
client.Request("textDocument/hover", hover1Params)
53+
5054
Assert.IsTrue(hover1.IsNone)

tests/CSharpLanguageServer.Tests/ReferenceTests.fs

+7-8
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ let testReferenceWorks() =
2525
}
2626

2727
let locations0: Location[] option =
28-
classFile.Request("textDocument/references", referenceParams0)
28+
client.Request("textDocument/references", referenceParams0)
2929

3030
Assert.IsTrue(locations0.IsNone)
3131

@@ -41,7 +41,7 @@ let testReferenceWorks() =
4141
}
4242

4343
let locations1: Location[] option =
44-
classFile.Request("textDocument/references", referenceParams1)
44+
client.Request("textDocument/references", referenceParams1)
4545

4646
let expectedLocations1: Location array =
4747
[|
@@ -68,7 +68,7 @@ let testReferenceWorks() =
6868
}
6969

7070
let locations2: Location[] option =
71-
classFile.Request("textDocument/references", referenceParams2)
71+
client.Request("textDocument/references", referenceParams2)
7272

7373
let expectedLocations2: Location array =
7474
[|
@@ -97,6 +97,8 @@ let testReferenceWorksToAspNetRazorPageReferencedValue() =
9797
client.StartAndWaitForSolutionLoad()
9898

9999
use testIndexViewModelCsFile = client.Open("Project/Models/Test/IndexViewModel.cs")
100+
use testControllerCsFile = client.Open("Project/Controllers/TestController.cs")
101+
use viewsTestIndexCshtmlFile = client.Open("Project/Views/Test/Index.cshtml")
100102

101103
let referenceParams0: ReferenceParams =
102104
{ TextDocument = { Uri = testIndexViewModelCsFile.Uri }
@@ -107,14 +109,11 @@ let testReferenceWorksToAspNetRazorPageReferencedValue() =
107109
}
108110

109111
let locations0: Location[] option =
110-
testIndexViewModelCsFile.Request("textDocument/references", referenceParams0)
112+
client.Request("textDocument/references", referenceParams0)
111113

112114
Assert.IsTrue(locations0.IsSome)
113115
Assert.AreEqual(2, locations0.Value.Length)
114116

115-
use testControllerCsFile = client.Open("Project/Controllers/TestController.cs")
116-
use viewsTestIndexCshtmlFile = client.Open("Project/Views/Test/Index.cshtml")
117-
118117
let expectedLocations0: Location array =
119118
[|
120119
{ Uri = testControllerCsFile.Uri
@@ -142,7 +141,7 @@ let testReferenceWorksToAspNetRazorPageReferencedValue() =
142141
}
143142

144143
let locations1: Location[] option =
145-
testIndexViewModelCsFile.Request("textDocument/references", referenceParams1)
144+
client.Request("textDocument/references", referenceParams1)
146145

147146
Assert.IsTrue(locations1.IsSome)
148147
Assert.AreEqual(5, locations1.Value.Length)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using Project.Models.Test;
3+
4+
namespace Printlog.Web.ClientPart.Controllers;
5+
6+
public class TestController : Controller
7+
{
8+
public IActionResult Index()
9+
{
10+
var model = new IndexViewModel()
11+
{
12+
Output = "test"
13+
};
14+
15+
return View(model);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace Project.Models.Test;
2+
public class IndexViewModel
3+
{
4+
public string? Output { get; set; }
5+
}

tests/CSharpLanguageServer.Tests/TestData/testDefinitionWorksInAspNetProject/Project/Pages/Index.cshtml

-3
This file was deleted.

tests/CSharpLanguageServer.Tests/TestData/testDefinitionWorksInAspNetProject/Project/Pages/Index.cshtml.cs

-10
This file was deleted.

tests/CSharpLanguageServer.Tests/TestData/testDefinitionWorksInAspNetProject/Project/Pages/_ViewImports.cshtml

-3
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1-
var builder = WebApplication.CreateBuilder(args);
2-
builder.Services.AddRazorPages();
3-
4-
var app = builder.Build();
5-
app.UseRouting();
6-
app.MapRazorPages();
7-
app.Run();
1+
using Microsoft.AspNetCore;
2+
using System.Threading.Tasks;
3+
using Microsoft.AspNetCore.Hosting;
4+
5+
namespace Project;
6+
7+
public class Program
8+
{
9+
public static async Task Main(string[] args)
10+
{
11+
await BuildWebHost(args).RunAsync();
12+
}
13+
14+
public static IWebHost BuildWebHost(string[] args)
15+
{
16+
var builder = WebHost.CreateDefaultBuilder(args);
17+
builder = builder.UseKestrel().UseStartup<Startup>();
18+
return builder.Build();
19+
}
20+
}

tests/CSharpLanguageServer.Tests/TestData/testDefinitionWorksInAspNetProject/Project/Project.csproj

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
<PropertyGroup>
33
<TargetFramework>net8.0</TargetFramework>
44
<Nullable>enable</Nullable>
5-
<ImplicitUsings>enable</ImplicitUsings>
6-
<RootNamespace>test_csharp_web</RootNamespace>
75
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.11" />
9+
</ItemGroup>
810
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Microsoft.AspNetCore.Builder;
2+
using Microsoft.AspNetCore.Hosting;
3+
using Microsoft.Extensions.Configuration;
4+
using Microsoft.Extensions.DependencyInjection;
5+
6+
namespace Project;
7+
8+
public class Startup
9+
{
10+
public Startup(IConfiguration configuration, IWebHostEnvironment env)
11+
{
12+
}
13+
14+
public void ConfigureServices(IServiceCollection services)
15+
{
16+
services.AddOptions();
17+
}
18+
19+
public void Configure(
20+
IApplicationBuilder app,
21+
IWebHostEnvironment env)
22+
{
23+
app.UseAuthentication();
24+
app.UseAuthorization();
25+
26+
app.UseEndpoints(endpoints => {
27+
endpoints.MapControllers();
28+
});
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@model Project.Models.Test.IndexViewModel
2+
@Model.Output
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@{
2+
Layout = "_Layout";
3+
}

tests/CSharpLanguageServer.Tests/Tooling.fs

+9-10
Original file line numberDiff line numberDiff line change
@@ -500,16 +500,6 @@ type FileController (client: MailboxProcessor<ClientEvent>, filename: string, ur
500500
client.Post(SendServerRpcNotification ("textDocument/didClose", serialize didCloseParams))
501501
()
502502

503-
member __.Request<'Request, 'Response>(method: string, request: 'Request): 'Response =
504-
let requestJObject = request |> serialize
505-
let responseJToken = client.PostAndReply<Result<JToken, JToken>>(fun rc -> SendServerRpcRequest (method, requestJObject, Some rc))
506-
match responseJToken with
507-
| Ok resultJToken ->
508-
resultJToken |> deserialize<'Response>
509-
| Error errorJToken ->
510-
failwithf "request to method \"%s\" has failed with error: %s" method (string errorJToken)
511-
512-
513503
member __.DidChange(text: string) =
514504
let didChangeParams: DidChangeTextDocumentParams =
515505
{
@@ -646,6 +636,15 @@ type ClientController (client: MailboxProcessor<ClientEvent>, testDataDir: Direc
646636
&& (m.Message.["id"] |> string) = (invocation.Message.["id"] |> string)
647637
&& (m.Message.["method"] |> string) = rpcMethod)
648638

639+
member __.Request<'Request, 'Response>(method: string, request: 'Request): 'Response =
640+
let requestJObject = request |> serialize
641+
let responseJToken = client.PostAndReply<Result<JToken, JToken>>(fun rc -> SendServerRpcRequest (method, requestJObject, Some rc))
642+
match responseJToken with
643+
| Ok resultJToken ->
644+
resultJToken |> deserialize<'Response>
645+
| Error errorJToken ->
646+
failwithf "request to method \"%s\" has failed with error: %s" method (string errorJToken)
647+
649648
member __.Open(filename: string): FileController =
650649
let uri =
651650
match System.Environment.OSVersion.Platform with

0 commit comments

Comments
 (0)