Ejemplo n.º 1
0
        public VariableRHostScript() :
            base(VsAppShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>())
        {
            _variableProvider = new VariableProvider(base.SessionProvider, VsAppShell.Current.ExportProvider.GetExportedValue <IDebugSessionProvider>());

            VsRHostScript.DoIdle(100);
        }
Ejemplo n.º 2
0
        public void ValidateEncodings()
        {
            var etc       = new EncodingTypeConverter();
            var codePages = etc.GetStandardValues();

            using (var script = new VsRHostScript()) {
                foreach (var cp in codePages)
                {
                    if ((int)cp > 0)
                    {
                        var completed = Task.Run(async() => {
                            var expression = Invariant($"Sys.setlocale('LC_CTYPE', '.{cp}')\n");
                            using (var inter = await script.Session.BeginInteractionAsync()) {
                                await inter.RespondAsync(expression);
                            }
                        }).Wait(2000);
                        completed.Should().BeTrue();

                        string s = null;
                        completed = Task.Run(async() => {
                            using (var e = await script.Session.BeginEvaluationAsync()) {
                                var res = await e.EvaluateAsync("Sys.getlocale()", REvaluationKind.Normal);
                                s       = res.Result.ToString();
                            }
                        }).Wait(2000);

                        completed.Should().BeTrue();
                        s.Should().NotBeNull().And.Contain(cp.ToString());
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private async Task ShowHelpAsync(string command, VsRHostScript hostScript, RHostClientHelpTestApp clientApp)
        {
            clientApp.Reset();
            await hostScript.Session.ExecuteAsync($"rtvs:::show_help({command.ToRStringLiteral()})").SilenceException <RException>();

            await clientApp.WaitForReadyAndRenderedAsync(DoIdle, nameof(HelpTest));
        }
Ejemplo n.º 4
0
        public async Task ValidateEncodings()
        {
            var etc       = new EncodingTypeConverter();
            var codePages = etc.GetStandardValues();

            using (var sessionProvider = new RSessionProvider(_services)) {
                await sessionProvider.TrySwitchBrokerAsync(nameof(ValidateEncodings));

                using (var script = new VsRHostScript(sessionProvider)) {
                    foreach (var cp in codePages)
                    {
                        if ((int)cp > 0)
                        {
                            var expression = Invariant($"Sys.setlocale('LC_CTYPE', '.{cp}')\n");
                            using (var inter = await script.Session.BeginInteractionAsync()) {
                                await inter.RespondAsync(expression);
                            }

                            var res = await script.Session.EvaluateAsync("Sys.getlocale()", REvaluationKind.Normal);

                            var s = res.Result.ToString();

                            s.Should().NotBeNull().And.Contain(cp.ToString());
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 private void ShowHelp(string command, VsRHostScript hostScript, RHostClientHelpTestApp clientApp)
 {
     clientApp.Ready = false;
     using (var request = hostScript.Session.BeginInteractionAsync().Result) {
         request.RespondAsync(command).SilenceException <RException>();
     }
     WaitForAppReady(clientApp);
 }
Ejemplo n.º 6
0
 private void ShowHelp(string command, VsRHostScript hostScript, RHostClientHelpTestApp clientApp)
 {
     clientApp.Ready = false;
     hostScript.Session.ExecuteAsync($"rtvs:::show_help({command.ToRStringLiteral()})")
     .SilenceException <RException>()
     .DoNotWait();
     WaitForAppReady(clientApp);
 }
Ejemplo n.º 7
0
 public void VariableExplorer_ConstructorTest02()
 {
     using (var hostScript = new VsRHostScript()) {
         using (var script = new ControlTestScript(typeof(VariableView))) {
             var actual = VisualTreeObject.Create(script.Control);
             ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer02");
         }
     }
 }
Ejemplo n.º 8
0
        protected override void Dispose(bool disposing)
        {
            VsRHostScript.DoIdle(2000);

            base.Dispose(disposing);
            if (disposing)
            {
                _variableProvider.Dispose();
            }
        }
Ejemplo n.º 9
0
        public void DefaultDirectoryTest()
        {
            string myDocs = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            string actual;

            using (var script = new VsRHostScript(_sessionProvider)) {
                var cmd = new WorkingDirectoryCommand(_interactiveWorkflow);
                cmd.InitializationTask.Wait();
                cmd.UserDirectory.Should().BeEquivalentTo(myDocs);
                actual = script.Session.GetRWorkingDirectoryAsync().Result;
            };

            actual.Should().Be(myDocs);
        }
Ejemplo n.º 10
0
        public async Task EvaluatorTest02()
        {
            using (new VsRHostScript()) {
                var session = _sessionProvider.GetInteractiveWindowRSession();
                using (var eval = new RInteractiveEvaluator(session, RHistoryStubFactory.CreateDefault(), VsAppShell.Current, RToolsSettings.Current)) {
                    var tb = new TextBufferMock(string.Empty, RContentTypeDefinition.ContentType);
                    var tv = new WpfTextViewMock(tb);

                    var iwm = new InteractiveWindowMock(tv);
                    eval.CurrentWindow = iwm;

                    var result = await eval.InitializeAsync();

                    result.Should().Be(ExecutionResult.Success);
                    session.IsHostRunning.Should().BeTrue();

                    VsRHostScript.DoIdle(1000);
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("w <- dQuote('text')" + Environment.NewLine);

                    result.Should().Be(ExecutionResult.Success);
                    var text = tb.CurrentSnapshot.GetText();
                    text.Should().Be(string.Empty);
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("w" + Environment.NewLine);

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.TrimEnd().Should().Be("[1] \"“text”\"");
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("e <- dQuote('абвг')" + Environment.NewLine);

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.Should().Be(string.Empty);
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("e" + Environment.NewLine);

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.TrimEnd().Should().Be("[1] \"“абвг”\"");
                    tb.Clear();
                }
            }
        }
Ejemplo n.º 11
0
        public async Task SimpleDataTest()
        {
            VisualTreeObject actual = null;

            using (var hostScript = new VsRHostScript()) {
                using (var script = new ControlTestScript(typeof(VariableView))) {
                    DoIdle(100);
                    await hostScript.Session.ExecuteAsync("x <- c(1:10)");

                    DoIdle(1000);
                    actual = VisualTreeObject.Create(script.Control);
                }
            }
            ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer03");
        }
Ejemplo n.º 12
0
        public void SimpleFunctionTest()
        {
            VisualTreeObject actual = null;

            using (var hostScript = new VsRHostScript()) {
                using (var script = new ControlTestScript(typeof(VariableView))) {
                    DoIdle(100);
                    Task.Run(async() => {
                        await hostScript.Session.ExecuteAsync("x <- lm");
                    }).Wait();

                    DoIdle(2000);
                    actual = VisualTreeObject.Create(script.Control);
                }
            }
            ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer04");
        }
Ejemplo n.º 13
0
        public async Task CopyItemPath()
        {
            IImmutableSet <IProjectTree> nodes1;
            IImmutableSet <IProjectTree> nodes2;
            var filePath = @"C:\Temp";

            CreateTestNodeSetPair(filePath, out nodes1, out nodes2);

            var cmd = new CopyItemPathCommand(_interactiveWorkflowProvider);

            await InUI(() => CheckSingleNodeCommandStatusAsync(cmd, RPackageCommandId.icmdCopyItemPath, nodes1, nodes2));

            var contents = await InUI(() => Clipboard.GetText());

            contents.Should().Be("\"" + filePath + "\"");

            VsRHostScript.DoIdle(500);
        }
Ejemplo n.º 14
0
        public void HelpTest()
        {
            var clientApp = new RHostClientHelpTestApp();

            using (var hostScript = new VsRHostScript(clientApp)) {
                using (var script = new ControlTestScript(typeof(HelpWindowVisualComponent))) {
                    DoIdle(100);

                    var component = ControlWindow.Component as IHelpWindowVisualComponent;
                    component.Should().NotBeNull();

                    component.VisualTheme = "Dark.css";
                    clientApp.Component   = component;

                    ShowHelp("?plot\n", hostScript, clientApp);
                    clientApp.Uri.IsLoopback.Should().Be(true);
                    clientApp.Uri.PathAndQuery.Should().Be("/library/graphics/html/plot.html");

                    GetBackgroundColor(component.Browser).Should().Be(darkThemeCssColor);

                    UIThreadHelper.Instance.Invoke(() => {
                        component.Browser.Refresh();
                        WaitForDocumentComplete(component.Browser);
                    });
                    GetBackgroundColor(component.Browser).Should().Be(darkThemeCssColor);

                    component.VisualTheme = "Light.css";
                    ShowHelp("?lm\n", hostScript, clientApp);
                    clientApp.Uri.PathAndQuery.Should().Be("/library/stats/html/lm.html");

                    GetBackgroundColor(component.Browser).Should().Be("white");

                    ExecCommand(clientApp, RPackageCommandId.icmdHelpPrevious);
                    clientApp.Uri.PathAndQuery.Should().Be("/library/graphics/html/plot.html");

                    ExecCommand(clientApp, RPackageCommandId.icmdHelpNext);
                    clientApp.Uri.PathAndQuery.Should().Be("/library/stats/html/lm.html");

                    ExecCommand(clientApp, RPackageCommandId.icmdHelpHome);
                    clientApp.Uri.PathAndQuery.Should().Be("/doc/html/index.html");
                }
            }
        }
Ejemplo n.º 15
0
        public void VariableExplorer_SimpleDataTest()
        {
            VisualTreeObject actual = null;

            using (var hostScript = new VsRHostScript()) {
                using (var script = new ControlTestScript(typeof(VariableView))) {
                    DoIdle(100);
                    Task.Run(async() => {
                        using (var eval = await hostScript.Session.BeginEvaluationAsync()) {
                            await eval.EvaluateAsync("x <- c(1:10)", REvaluationKind.Mutating);
                        }
                    }).Wait();

                    DoIdle(2000);
                    actual = VisualTreeObject.Create(script.Control);
                }
            }
            ViewTreeDump.CompareVisualTrees(_files, actual, "VariableExplorer03");
        }
Ejemplo n.º 16
0
        public void HelpTest()
        {
            var clientApp       = new RHostClientHelpTestApp();
            var historyProvider = RHistoryProviderStubFactory.CreateDefault();

            using (var hostScript = new VsRHostScript(clientApp)) {
                using (var script = new ControlTestScript(typeof(HelpWindowVisualComponent))) {
                    DoIdle(100);

                    var activeViewTrackerMock       = new ActiveTextViewTrackerMock("  plot", RContentTypeDefinition.ContentType);
                    var activeReplTrackerMock       = new ActiveRInteractiveWindowTrackerMock();
                    var sessionProvider             = VsAppShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>();
                    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);
                }
            }
        }
Ejemplo n.º 17
0
 public HelpWindowTest(IServiceContainer services) : base(services, true)
 {
     _hostScript = GetScript <VsRHostScript>();
 }
Ejemplo n.º 18
0
 public HostBasedInteractiveTest(IRSessionCallback callback = null)
 {
     HostScript = new VsRHostScript(SessionProvider, callback);
 }
Ejemplo n.º 19
0
        public async Task EvaluatorTest01()
        {
            using (new VsRHostScript()) {
                var session = _sessionProvider.GetInteractiveWindowRSession();
                using (var eval = new RInteractiveEvaluator(session, RHistoryStubFactory.CreateDefault(), VsAppShell.Current, RToolsSettings.Current)) {
                    var tb = new TextBufferMock(string.Empty, RContentTypeDefinition.ContentType);
                    var tv = new WpfTextViewMock(tb);

                    var iwm = new InteractiveWindowMock(tv);
                    eval.CurrentWindow = iwm;

                    var result = await eval.InitializeAsync();

                    result.Should().Be(ExecutionResult.Success);
                    session.IsHostRunning.Should().BeTrue();

                    eval.CanExecuteCode("x <-").Should().BeFalse();
                    eval.CanExecuteCode("(()").Should().BeFalse();
                    eval.CanExecuteCode("a *(b+c)").Should().BeTrue();

                    VsRHostScript.DoIdle(300);

                    result = await eval.ExecuteCodeAsync(new string(new char[10000]) + "\r\n");

                    result.Should().Be(ExecutionResult.Failure);
                    string text = tb.CurrentSnapshot.GetText();
                    text.Should().Contain(string.Format(Microsoft.R.Components.Resources.InputIsTooLong, 4096));
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("z <- '電話帳 全米のお'\n");

                    result.Should().Be(ExecutionResult.Success);
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("z" + Environment.NewLine);

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.TrimEnd().Should().Be("[1] \"電話帳 全米のお\"");
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("Encoding(z)\n");

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.TrimEnd().Should().Be("[1] \"UTF-8\"");
                    tb.Clear();

                    result = await eval.ExecuteCodeAsync("x <- c(1:10)\n");

                    result.Should().Be(ExecutionResult.Success);
                    text = tb.CurrentSnapshot.GetText();
                    text.Should().Be(string.Empty);
                    tb.Clear();

                    await eval.ResetAsync(initialize : false);

                    text = tb.CurrentSnapshot.GetText();
                    text.Should().StartWith(Microsoft.R.Components.Resources.MicrosoftRHostStopping);
                }
            }
        }
Ejemplo n.º 20
0
 public HostBasedInteractiveTest(IRHostBrokerConnector brokerConnector, IRSessionCallback callback = null)
 {
     HostScript = new VsRHostScript(SessionProvider, brokerConnector, callback);
 }