Inheritance: IDisposable
Example #1
0
        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");
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
 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>());
 }
Example #4
0
 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");
                }
            }
        }
Example #14
0
        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();
            }
        }
Example #15
0
 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>());
 }
Example #16
0
        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();
            }
        }