public async Task ParameterTest_ComputeCurrentParameter01() { var textBuffer = new TextBufferMock("aov(", RContentTypeDefinition.ContentType); var editorBuffer = textBuffer.ToEditorBuffer(); var source = new RSignatureHelpSource(textBuffer, Services); var session = new SignatureHelpSessionMock(Services, textBuffer, 0); var textView = session.TextView as TextViewMock; var signatures = new List <ISignature>(); using (var tree = new EditorTree(editorBuffer, Services)) { tree.Build(); using (var document = new EditorDocumentMock(tree)) { session.TrackingPoint = new TrackingPointMock(textBuffer, 4, PointTrackingMode.Positive, TrackingFidelityMode.Forward); await FunctionIndex.GetPackageNameAsync("aov"); tree.TakeThreadOwnerShip(); await source.AugmentSignatureHelpSessionAsync(session, signatures, tree.AstRoot); signatures.Should().ContainSingle(); var index = GetCurrentParameterIndex(signatures[0], signatures[0].CurrentParameter); index.Should().Be(0); textView.Caret = new TextCaretMock(textView, 5); TextBufferUtility.ApplyTextChange(textBuffer, 4, 0, 1, "a"); index = GetCurrentParameterIndex(signatures[0], 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], 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], signatures[0].CurrentParameter); index.Should().Be(2); } } }