Skip to content
Prev Previous commit
Next Next commit
Fix test and use record instead of tuple
  • Loading branch information
SeeminglyScience committed May 17, 2022
commit 8da0b7986857fb0021175eecdb45219d6a9f2fc7
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

namespace Microsoft.PowerShell.EditorServices.Handlers
{
internal record CompletionResults(bool IsIncomplete, IReadOnlyList<CompletionItem> Matches);

internal class PsesCompletionHandler : CompletionHandlerBase
{
private readonly ILogger _logger;
Expand Down Expand Up @@ -116,7 +118,7 @@ public override async Task<CompletionItem> Handle(CompletionItem request, Cancel
/// <returns>
/// A CommandCompletion instance completions for the identified statement.
/// </returns>
internal async Task<(bool isIncomplete, IReadOnlyList<CompletionItem> matches)> GetCompletionsInFileAsync(
internal async Task<CompletionResults> GetCompletionsInFileAsync(
ScriptFile scriptFile,
int lineNumber,
int columnNumber,
Expand All @@ -134,7 +136,7 @@ public override async Task<CompletionItem> Handle(CompletionItem request, Cancel

if (result.CompletionMatches.Count == 0)
{
return (true, Array.Empty<CompletionItem>());
return new CompletionResults(IsIncomplete: true, Array.Empty<CompletionItem>());
}

BufferRange replacedRange = scriptFile.GetRangeBetweenOffsets(
Expand All @@ -159,7 +161,7 @@ public override async Task<CompletionItem> Handle(CompletionItem request, Cancel

completionItems[i] = CreateCompletionItem(result.CompletionMatches[i], replacedRange, i + 1);
}
return (isIncomplete, completionItems);
return new CompletionResults(isIncomplete, completionItems);
}

internal static CompletionItem CreateCompletionItem(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void Dispose()

private ScriptFile GetScriptFile(ScriptRegion scriptRegion) => workspace.GetFile(TestUtilities.GetSharedPath(scriptRegion.File));

private Task<IEnumerable<CompletionItem>> GetCompletionResultsAsync(ScriptRegion scriptRegion)
private Task<CompletionResults> GetCompletionResultsAsync(ScriptRegion scriptRegion)
{
return completionHandler.GetCompletionsInFileAsync(
GetScriptFile(scriptRegion),
Expand All @@ -53,15 +53,15 @@ private Task<IEnumerable<CompletionItem>> GetCompletionResultsAsync(ScriptRegion
[Fact]
public async Task CompletesCommandInFile()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteCommandInFile.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteCommandInFile.SourceDetails).ConfigureAwait(true);
CompletionItem actual = Assert.Single(results);
Assert.Equal(CompleteCommandInFile.ExpectedCompletion, actual);
}

[Fact]
public async Task CompletesCommandFromModule()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteCommandFromModule.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteCommandFromModule.SourceDetails).ConfigureAwait(true);
CompletionItem actual = Assert.Single(results);
// NOTE: The tooltip varies across PowerShell and OS versions, so we ignore it.
Assert.Equal(CompleteCommandFromModule.ExpectedCompletion, actual with { Detail = "" });
Expand All @@ -71,7 +71,7 @@ public async Task CompletesCommandFromModule()
[Fact]
public async Task CompletesTypeName()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteTypeName.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteTypeName.SourceDetails).ConfigureAwait(true);
CompletionItem actual = Assert.Single(results);
if (VersionUtils.IsNetCore)
{
Expand All @@ -92,23 +92,23 @@ public async Task CompletesTypeName()
[Fact]
public async Task CompletesNamespace()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteNamespace.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteNamespace.SourceDetails).ConfigureAwait(true);
CompletionItem actual = Assert.Single(results);
Assert.Equal(CompleteNamespace.ExpectedCompletion, actual);
}

[Fact]
public async Task CompletesVariableInFile()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteVariableInFile.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteVariableInFile.SourceDetails).ConfigureAwait(true);
CompletionItem actual = Assert.Single(results);
Assert.Equal(CompleteVariableInFile.ExpectedCompletion, actual);
}

[Fact]
public async Task CompletesAttributeValue()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteAttributeValue.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteAttributeValue.SourceDetails).ConfigureAwait(true);
Assert.Collection(results.OrderBy(c => c.SortText),
actual => Assert.Equal(actual, CompleteAttributeValue.ExpectedCompletion1),
actual => Assert.Equal(actual, CompleteAttributeValue.ExpectedCompletion2),
Expand All @@ -118,7 +118,7 @@ public async Task CompletesAttributeValue()
[Fact]
public async Task CompletesFilePath()
{
IEnumerable<CompletionItem> results = await GetCompletionResultsAsync(CompleteFilePath.SourceDetails).ConfigureAwait(true);
(_, IEnumerable<CompletionItem> results) = await GetCompletionResultsAsync(CompleteFilePath.SourceDetails).ConfigureAwait(true);
Assert.NotEmpty(results);
CompletionItem actual = results.First();
// Paths are system dependent so we ignore the text and just check the type and range.
Expand Down