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 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()) { await interaction.RespondAsync(c + Environment.NewLine); EventsPump.DoEvents(100); } } for (int i = _commands.Length - 1; i >= 0; i--) { await history.PlotContentProvider.PreviousPlotAsync(); EventsPump.DoEvents(100); } for (int i = 0; i < _commands.Length; i++) { await history.PlotContentProvider.NextPlotAsync(); EventsPump.DoEvents(500); } EventsPump.DoEvents(1000); } }
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 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)"); EventsPump.DoEvents(500); 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)"); EventsPump.DoEvents(500); session = await TriggerSessionAsync(content, 12); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().ContainSingle().Which.ToString().Should().StartWith("select(.data"); } }
public async Task InstallPackageTest() { using (var script = new RHostScript(_exportProvider, _broker.BrokerConnector)) { try { await script.Session.ExecuteAsync("remove.packages('abc')", REvaluationKind.Mutating); } catch (RException) { } await _packageIndex.BuildIndexAsync(); var completionSets = new List <CompletionSet>(); GetCompletions("abc::", 5, completionSets); completionSets.Should().ContainSingle(); completionSets[0].Completions.Should().BeEmpty(); try { await script.Session.ExecuteAsync("install.packages('abc')", REvaluationKind.Mutating); } catch (RException) { } await _packageIndex.BuildIndexAsync(); completionSets.Clear(); GetCompletions("abc::", 5, completionSets); completionSets.Should().ContainSingle(); completionSets[0].Completions.Should().NotBeEmpty(); } }
public async Task R_DeclaredVariablesCompletion01() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { await ExecuteRCode(hostScript.Session, "zzz111 <- 1\r\n"); await ExecuteRCode(hostScript.Session, "zzz111$y222 <- 2\r\n"); PrimeIntellisenseProviders(script); 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); } }
private async Task RunEnvironmentTestAsync(string expression, Action <IReadOnlyList <REnvironment> > assert) { var sessionProvider = VsAppShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>(); var environmentChanged = new CountdownEvent(3); IReadOnlyList <REnvironment> environments = null; using (var rHostScript = new RHostScript(sessionProvider, null)) { using (var environmentProvider = new REnvironmentProvider(rHostScript.Session)) { environmentProvider.EnvironmentChanged += (sender, e) => { environments = e.Environments; environmentChanged.Signal(); }; using (var interaction = await rHostScript.Session.BeginInteractionAsync(false)) { await interaction.RespondAsync(expression + Environment.NewLine); } bool timedout = true; if (System.Diagnostics.Debugger.IsAttached) { environmentChanged.Wait(); } else { timedout = environmentChanged.Wait(TimeSpan.FromSeconds(10)); } timedout.Should().BeTrue(); assert(environments); } } }
public async Task R_DeclaredVariablesCompletion02() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { 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); 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_DeclaredVariablesCompletion03() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { await ExecuteRCode(hostScript.Session, "i1 <- 1\r\n"); PrimeIntellisenseProviders(script); script.DoIdle(1000); script.Type("i"); var session = script.GetCompletionSession(); session.Should().NotBeNull(); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "i1"); item.Should().NotBeNull(); script.DoIdle(100); script.Type("{ESC}"); script.Backspace(); script.DoIdle(100); script.Type("graphics::"); script.DoIdle(300); session = script.GetCompletionSession(); session.Should().NotBeNull(); list = session.SelectedCompletionSet.Completions.ToList(); item = list.FirstOrDefault(x => x.DisplayText == "i1"); item.Should().BeNull(); } }
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 LoadUnloadPackageTest() { string content = @"do()"; using (var hostScript = new RHostScript(Workflow.RSessions)) { //await Workflow.RSession.ExecuteAsync("install.packages('dplyr')"); var session = await TriggerSessionAsync(content, 3); var parametersInfo = SignatureHelp.GetParametersInfoFromBuffer(session.Ast, session.TextBuffer.CurrentSnapshot, 10); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().BeEmpty(); await Workflow.RSession.ExecuteAsync("library(dplyr)"); session = await TriggerSessionAsync(content, 3); session.ApplicableSpan.Should().NotBeNull(); session.QuickInfoContent.Should().ContainSingle().Which.ToString().Should().StartWith("do(.data"); await Workflow.RSession.ExecuteAsync("detach(\"package:dplyr\", unload = TRUE)"); EventsPump.DoEvents(1000); session = await TriggerSessionAsync(content, 3); session.QuickInfoContent.Should().BeEmpty(); } }
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 void RemoteFiles() { var completionSets = new List <CompletionSet>(); var workflowProvider = UIThreadHelper.Instance.Invoke(() => _exportProvider.GetExportedValue <IRInteractiveWorkflowProvider>().GetOrCreate()); using (var script = new RHostScript(workflowProvider.RSessions)) { var provider = new FilesCompletionProvider(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), workflowProvider, _imagesProvider, _glyphService, forceR: true); var entries = provider.GetEntries(null); entries.Should().NotBeEmpty(); entries.Should().Contain(e => e.DisplayText == _testFolderName); } }
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 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 ViewLibraryTest() { var cb = Substitute.For <IRSessionCallback>(); cb.ViewLibrary().Returns(Task.CompletedTask); using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector, cb)) { using (var inter = await hostScript.Session.BeginInteractionAsync()) { await inter.RespondAsync("library()" + Environment.NewLine); } } await cb.Received().ViewLibrary(); }
public async Task ViewDataTest01() { var cb = Substitute.For <IRSessionCallback>(); cb.When(x => x.ViewObject(Arg.Any <string>(), Arg.Any <string>())).Do(x => { }); using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector, cb)) { using (var inter = await hostScript.Session.BeginInteractionAsync()) { await inter.RespondAsync("View(mtcars)" + Environment.NewLine); } } cb.Received().ViewObject("mtcars", "mtcars"); }
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(); } }
public async Task FunctionViewerTest() { using (var hostScript = new RHostScript(_sessionProvider)) { var funcViewer = await _aggregator.GetViewer(hostScript.Session, REnvironments.GlobalEnv, "lm") as CodeViewer; funcViewer.Should().NotBeNull(); funcViewer.GetFileName("lm", null).Should().Be(Path.Combine(Path.GetTempPath(), "~lm.r")); funcViewer.GetFileName("lm", "abc").Should().Be(Path.Combine(Path.GetTempPath(), "~abc.r")); var code = await funcViewer.GetFunctionCode("lm"); code.StartsWithOrdinal("function(formula, data, subset, weights, na.action").Should().BeTrue(); } }
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 R_NoCompletionOnTab() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { 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)"); script.View.Caret.Position.BufferPosition.Position.Should().Be(actual.Length); } }
public async Task GridViewerExcludeTest(string expr) { var e = Substitute.For <IDataObjectEvaluator>(); var viewer = new GridViewer(_aggregator, e); viewer.CanView(null).Should().BeFalse(); using (var hostScript = new RHostScript(_sessionProvider)) { var session = hostScript.Session; await session.ExecuteAsync($"x <- {expr}"); var value = await session.EvaluateAndDescribeAsync("x", AllFields, null); viewer.CanView(value).Should().BeFalse(); } }
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 async Task R_PackageVariablesCompletion() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { PrimeIntellisenseProviders(script); script.DoIdle(1000); script.Type("mtcars$"); var session = script.GetCompletionSession(); session.Should().NotBeNull(); script.DoIdle(1000); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "cyl"); item.Should().NotBeNull(); script.DoIdle(100); } }
public async Task <IEditorScript> StartScript(ICoreShell coreShell, string text, string filename, string contentType, IRSessionProvider sessionProvider) { var coreEditor = await InUI(() => new CoreEditor(coreShell, text, filename, contentType)); var containerDisposable = await AddToHost(coreEditor.Control); if (sessionProvider != null) { IntelliSenseRSession.HostStartTimeout = 10000; HostScript = new RHostScript(sessionProvider); PackageIndex = coreShell.GetService <IPackageIndex>(); await PackageIndex.BuildIndexAsync(); FunctionIndex = coreShell.GetService <IFunctionIndex>(); await FunctionIndex.BuildIndexAsync(); } return(new EditorScript(coreShell, 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 activeReplTrackerMock = new ActiveRInteractiveWindowTrackerMock(); 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, activeReplTrackerMock); 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 void R_PackageVariablesCompletion() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>(); using (var hostScript = new RHostScript(provider)) { PrimeIntellisenseProviders(); script.DoIdle(1000); script.Type("mtcars$"); var session = script.GetCompletionSession(); session.Should().NotBeNull(); script.DoIdle(1000); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "cyl"); item.Should().NotBeNull(); script.DoIdle(100); } } }
public async Task R_CompletionOnTab() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { REditorSettings.ShowCompletionOnTab = true; script.DoIdle(100); script.Type("f1<-lapp"); UIThreadHelper.Instance.Invoke(() => 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<-lapply"); REditorSettings.ShowCompletionOnTab = false; } }
public async Task R_CompletionFunctionBraces02() { using (var script = await _editorHost.StartScript(_exportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider, _broker.BrokerConnector)) { 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 async Task R_CompletionFunctionBraces01() { using (var script = await _editorHost.StartScript(ExportProvider, RContentTypeDefinition.ContentType)) using (var hostScript = new RHostScript(_sessionProvider)) { 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()"); script.View.Caret.Position.BufferPosition.Position.Should().Be(actual.Length - 1); message.Should().NotContain("Error"); } }