public async Task ParameterTest_ComputeCurrentParameter01() {
ITextBuffer textBuffer = new TextBufferMock("aov(", RContentTypeDefinition.ContentType);
SignatureHelpSource source = new SignatureHelpSource(textBuffer, EditorShell);
SignatureHelpSessionMock session = new SignatureHelpSessionMock(textBuffer, 0);
TextViewMock textView = session.TextView as TextViewMock;
List<ISignature> signatures = new List<ISignature>();
using (var tree = new EditorTree(textBuffer, EditorShell)) {
tree.Build();
using (var document = new EditorDocumentMock(tree)) {
session.TrackingPoint = new TrackingPointMock(textBuffer, 4, PointTrackingMode.Positive, TrackingFidelityMode.Forward);
await PackageIndexUtility.GetFunctionInfoAsync(FunctionIndex, "aov");
tree.TakeThreadOwnerShip();
await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot);
signatures.Should().ContainSingle();
int index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
index.Should().Be(0);
textView.Caret = new TextCaretMock(textView, 5);
TextBufferUtility.ApplyTextChange(textBuffer, 4, 0, 1, "a");
index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
index.Should().Be(0);
textView.Caret = new TextCaretMock(textView, 6);
TextBufferUtility.ApplyTextChange(textBuffer, 5, 0, 1, ",");
tree.EnsureTreeReady();
index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
index.Should().Be(1);
textView.Caret = new TextCaretMock(textView, 7);
TextBufferUtility.ApplyTextChange(textBuffer, 6, 0, 1, ",");
tree.EnsureTreeReady();
index = GetCurrentParameterIndex(signatures[0] as SignatureHelp, signatures[0].CurrentParameter);
index.Should().Be(2);
}
}
}