Skip to content

Commit d26c4dd

Browse files
Merge pull request #201 from siemens/fix/symbol-converter
Fix DocumentSymbol Json Converter
2 parents a8e44c2 + 40b4bba commit d26c4dd

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

src/Protocol/Serialization/Converters/SymbolInformationOrDocumentSymbolConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public override SymbolInformationOrDocumentSymbol ReadJson(JsonReader reader, Ty
2727
{
2828
var result = JObject.Load(reader);
2929

30-
// Commands have a name, CodeActions do not
31-
if (result["location"].Type == JTokenType.Object)
30+
// SymbolInformation has property location, DocumentSymbol does not.
31+
if (result["location"] != null)
3232
{
3333
return new SymbolInformationOrDocumentSymbol(result.ToObject<SymbolInformation>());
3434
}

test/Client.Tests/ClientTests.cs

+50
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,56 @@ public async Task DocumentHighlights_Success()
373373
});
374374
}
375375

376+
/// <summary>
377+
/// Ensure that the language client can successfully request DocumentHighlight.
378+
/// </summary>
379+
[Fact(DisplayName = "Language client can successfully request document symbols")]
380+
public async Task DocumentSymbols_DocumentSymbol_Success()
381+
{
382+
await Connect();
383+
384+
const int line = 5;
385+
const int character = 6;
386+
var expectedDocumentPath = AbsoluteDocumentPath;
387+
var expectedDocumentUri = DocumentUri.FromFileSystemPath(expectedDocumentPath);
388+
var detail = "some detail";
389+
390+
var documentSymbol = new DocumentSymbol {
391+
Detail = detail,
392+
Kind = SymbolKind.Class,
393+
Range = new Range(new Position(line, character), new Position(line, character))
394+
};
395+
var expectedSymbols = new SymbolInformationOrDocumentSymbolContainer(
396+
new SymbolInformationOrDocumentSymbol(documentSymbol));
397+
398+
ServerDispatcher.HandleRequest<DocumentSymbolParams, SymbolInformationOrDocumentSymbolContainer>(DocumentNames.DocumentSymbol, (request, cancellationToken) => {
399+
Assert.NotNull(request.TextDocument);
400+
401+
Assert.Equal(expectedDocumentUri, request.TextDocument.Uri);
402+
403+
return Task.FromResult(expectedSymbols);
404+
});
405+
var documentSymbolParams = new DocumentSymbolParams {
406+
TextDocument = new TextDocumentIdentifier(expectedDocumentUri)
407+
};
408+
var symbols = await LanguageClient.SendRequest<SymbolInformationOrDocumentSymbolContainer>(DocumentNames.DocumentSymbol, documentSymbolParams);
409+
410+
var actualSymbols = symbols.ToArray();
411+
Assert.Collection(actualSymbols, actualSymbol => {
412+
var expectedSymbol = expectedSymbols.Single();
413+
414+
Assert.True(expectedSymbol.IsDocumentSymbol);
415+
416+
Assert.NotNull(actualSymbol.DocumentSymbol);
417+
Assert.Equal(expectedSymbol.DocumentSymbol.Detail, actualSymbol.DocumentSymbol.Detail);
418+
Assert.Equal(expectedSymbol.DocumentSymbol.Kind, actualSymbol.DocumentSymbol.Kind);
419+
Assert.Equal(expectedSymbol.DocumentSymbol.Range.Start.Line, actualSymbol.DocumentSymbol.Range.Start.Line);
420+
Assert.Equal(expectedSymbol.DocumentSymbol.Range.Start.Character, actualSymbol.DocumentSymbol.Range.Start.Character);
421+
Assert.Equal(expectedSymbol.DocumentSymbol.Range.End.Line, actualSymbol.DocumentSymbol.Range.End.Line);
422+
Assert.Equal(expectedSymbol.DocumentSymbol.Range.End.Character, actualSymbol.DocumentSymbol.Range.End.Character);
423+
});
424+
}
425+
376426
/// <summary>
377427
/// Ensure that the language client can successfully request FoldingRanges.
378428
/// </summary>

0 commit comments

Comments
 (0)