public async Task NonUniqueNameTest() { string content = @"x <- select()"; using (var hostScript = new RHostScript(Workflow.RSessions)) { //await Workflow.RSession.ExecuteAsync("install.packages('dplyr')"); var session = await TriggerSessionAsync(content, 12); var parametersInfo = SignatureHelp.GetParametersInfoFromBuffer(session.Ast, session.TextBuffer.CurrentSnapshot, 10); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().BeEmpty(); await Workflow.RSession.ExecuteAsync("library(MASS)"); session = await TriggerSessionAsync(content, 12); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().ContainSingle().Which.ToString().Should().StartWith("select(formula"); await Workflow.RSession.ExecuteAsync("library(dplyr)"); session = await TriggerSessionAsync(content, 12); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().ContainSingle().Which.ToString().Should().StartWith("select(.data"); } }
public async Task ViewerExportTest() { using (var hostScript = new RHostScript(_sessionProvider)) { var session = hostScript.Session; var funcViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "lm"); funcViewer.Should().NotBeNull().And.BeOfType<CodeViewer>(); var gridViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "airmiles"); gridViewer.Should().NotBeNull().And.BeOfType<Viewer1D>(); gridViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "mtcars"); gridViewer.Should().NotBeNull().And.BeOfType<TableViewer>(); gridViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "AirPassengers"); gridViewer.Should().NotBeNull().And.BeOfType<Viewer1D>(); gridViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "list(c(1:10))"); gridViewer.Should().NotBeNull().And.BeOfType<ListViewer>(); gridViewer = await _aggregator.GetViewer(session, REnvironments.GlobalEnv, "c(1:10)"); gridViewer.Should().NotBeNull().And.BeOfType<VectorViewer>(); gridViewer.Capabilities.Should().HaveFlag(ViewerCapabilities.List | ViewerCapabilities.Table); } }
public async Task ViewDataTest01() { var cb = Substitute.For<IRSessionCallback>(); cb.When(x => x.ViewObjectAsync(Arg.Any<string>(), Arg.Any<string>())).Do(x => { }); using (var hostScript = new RHostScript(_workflow.RSessions, cb)) { using (var inter = await hostScript.Session.BeginInteractionAsync()) { await inter.RespondAsync("View(mtcars)" + Environment.NewLine); } } await cb.Received().ViewObjectAsync("mtcars", "mtcars", Arg.Any<CancellationToken>()); }
public async Task ViewLibraryTest() { var cb = Substitute.For<IRSessionCallback>(); cb.ViewLibraryAsync().Returns(Task.CompletedTask); using (var hostScript = new RHostScript(_workflow.RSessions, cb)) { using (var inter = await hostScript.Session.BeginInteractionAsync()) { await inter.RespondAsync("library()" + Environment.NewLine); } } await cb.Received().ViewLibraryAsync(Arg.Any<CancellationToken>()); }
public async Task<IEditorScript> StartScript(IExportProvider exportProvider, string text, string filename, string contentType, IRSessionProvider sessionProvider) { var shell = exportProvider.GetExportedValue<ICoreShell>(); var coreEditor = await InUI(() => new CoreEditor(shell, text, filename, contentType)); var containerDisposable = await AddToHost(coreEditor.Control); if (sessionProvider != null) { IntelliSenseRSession.HostStartTimeout = 10000; HostScript = new RHostScript(sessionProvider); PackageIndex = exportProvider.GetExportedValue<IPackageIndex>(); await PackageIndex.BuildIndexAsync(); FunctionIndex = exportProvider.GetExportedValue<IFunctionIndex>(); await FunctionIndex.BuildIndexAsync(); } return new EditorScript(exportProvider, coreEditor, containerDisposable); }
public void HelpTest() { var clientApp = new RHostClientHelpTestApp(); var sessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); var historyProvider = RHistoryProviderStubFactory.CreateDefault(); using (var hostScript = new RHostScript(sessionProvider, clientApp)) { using (var script = new ControlTestScript(typeof(HelpWindowVisualComponent))) { DoIdle(100); var activeViewTrackerMock = new ActiveTextViewTrackerMock(" plot", RContentTypeDefinition.ContentType); var interactiveWorkflowProvider = TestRInteractiveWorkflowProviderFactory.Create(sessionProvider, activeTextViewTracker: activeViewTrackerMock); var interactiveWorkflow = interactiveWorkflowProvider.GetOrCreate(); var component = ControlWindow.Component as IHelpWindowVisualComponent; component.Should().NotBeNull(); component.VisualTheme = "Light.css"; clientApp.Component = component; var view = activeViewTrackerMock.GetLastActiveTextView(RContentTypeDefinition.ContentType); var cmd = new ShowHelpOnCurrentCommand(interactiveWorkflow, activeViewTrackerMock); cmd.Should().BeVisibleAndDisabled(); view.Caret.MoveTo(new SnapshotPoint(view.TextBuffer.CurrentSnapshot, 3)); cmd.Should().BeVisibleAndEnabled(); cmd.Text.Should().EndWith("plot"); cmd.Invoke(); WaitForAppReady(clientApp); clientApp.Uri.IsLoopback.Should().Be(true); clientApp.Uri.PathAndQuery.Should().Be("/library/graphics/html/plot.html"); DoIdle(500); } } }
public async Task PlotALot() { var sessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); var app = new RHostClientPlotTestApp(); using (var script = new RHostScript(sessionProvider, app)) { var history = new PlotHistory(script.Session); app.History = history; foreach (var c in _commands) { using (var interaction = await script.Session.BeginInteractionAsync()) { try { await interaction.RespondAsync(c + Environment.NewLine); EventsPump.DoEvents(100); } catch (RException) { } } } for (int i = _commands.Length - 1; i >= 0; i--) { try { await history.PlotContentProvider.PreviousPlotAsync(); EventsPump.DoEvents(100); } catch (RException) { } } for (int i = 0; i < _commands.Length; i++) { try { await history.PlotContentProvider.NextPlotAsync(); EventsPump.DoEvents(500); } catch (RException) { } } EventsPump.DoEvents(1000); } }
public async Task R_DeclaredVariablesCompletion02() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { await ExecuteRCode(hostScript.Session, "setClass('Person', representation(name = 'character', age = 'numeric'))\r\n"); await ExecuteRCode(hostScript.Session, "hadley <- new('Person', name = 'Hadley', age = 31)\r\n"); PrimeIntellisenseProviders(); script.DoIdle(1000); script.Type("hadle"); script.DoIdle(500); script.Type("{TAB}"); script.DoIdle(500); script.Type("@"); script.DoIdle(500); script.Type("na"); script.DoIdle(500); script.Type("{TAB}"); string expected = "hadley@name"; string actual = script.EditorText; actual.Should().Be(expected); } } }
public async Task R_DeclaredVariablesCompletion01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { await ExecuteRCode(hostScript.Session, "zzz111 <- 1\r\n"); await ExecuteRCode(hostScript.Session, "zzz111$y222 <- 2\r\n"); PrimeIntellisenseProviders(); script.DoIdle(500); script.Type("zzz1"); script.DoIdle(500); script.Type("{TAB}"); script.DoIdle(500); script.Type("$"); script.DoIdle(500); script.Type("y2"); script.DoIdle(500); script.Type("{TAB}"); string expected = "zzz111$y222"; string actual = script.EditorText; actual.Should().Be(expected); } } }
public void R_CompletionOnTab() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { REditorSettings.ShowCompletionOnTab = true; script.DoIdle(100); script.Type("f1<-x"); EditorShell.Current.DispatchOnUIThread(() => script.GetCompletionSession().Dismiss()); script.DoIdle(300); script.Type("{TAB}"); script.DoIdle(500); script.Type("{TAB}"); script.DoIdle(200); string actual = script.EditorText; actual.Should().Be("f1<-x11"); REditorSettings.ShowCompletionOnTab = false; } } }
public void R_NoCompletionOnTab() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { script.DoIdle(100); script.Type("f1<-function(x,y"); script.DoIdle(300); script.Type("{TAB}"); script.DoIdle(100); string actual = script.EditorText; actual.Should().Be("f1<-function(x,y)"); EditorWindow.CoreEditor.View.Caret.Position.BufferPosition.Position.Should().Be(actual.Length); } } }
public void R_CompletionFunctionBraces02() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { string message = null; hostScript.Session.Output += (s, e) => { message = e.Message; }; script.DoIdle(100); script.Type("bas"); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(100); string actual = script.EditorText; actual.Should().Be("base"); message.Should().NotContain("Error"); } } }
public void R_CompletionFunctionBraces01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue<IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { string message = null; hostScript.Session.Output += (s, e) => { message = e.Message; }; script.DoIdle(100); script.Type("instal"); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(100); string actual = script.EditorText; actual.Should().Be("install.packages()"); EditorWindow.CoreEditor.View.Caret.Position.BufferPosition.Position.Should().Be(actual.Length - 1); message.Should().NotContain("Error"); } } }
public async Task FunctionViewerTest(string expression, string functionName, string expected) { using (var hostScript = new RHostScript(_workflow.RSessions)) { if(!string.IsNullOrEmpty(expression)) { await hostScript.Session.ExecuteAsync(expression); } var funcViewer = await _aggregator.GetViewer(hostScript.Session, REnvironments.GlobalEnv, functionName) as CodeViewer; funcViewer.Should().NotBeNull(); var code = await funcViewer.GetFunctionCode(functionName); code.StartsWithOrdinal(expected).Should().BeTrue(); } }
public async Task ViewDataTest02() { var cb = Substitute.For<IRSessionCallback>(); cb.When(x => x.ViewFile(Arg.Any<string>(), "R data sets", true)).Do(x => { }); using (var hostScript = new RHostScript(_sessionProvider, cb)) { using (var inter = await hostScript.Session.BeginInteractionAsync()) { await inter.RespondAsync("data()" + Environment.NewLine); } } await cb.Received().ViewFile(Arg.Any<string>(), "R data sets", true, Arg.Any<CancellationToken>()); }
public async Task FormulaViewerTest() { using (var hostScript = new RHostScript(_workflow.RSessions)) { string formula = "1 ~ 2"; var funcViewer = await _aggregator.GetViewer(hostScript.Session, REnvironments.GlobalEnv, formula) as CodeViewer; funcViewer.Should().NotBeNull(); var code = await funcViewer.GetFunctionCode(formula); code.StartsWithOrdinal(formula).Should().BeTrue(); } }