public VariableRHostScript() : base(VsAppShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>()) { _variableProvider = new VariableProvider(base.SessionProvider, VsAppShell.Current.ExportProvider.GetExportedValue <IDebugSessionProvider>()); VsRHostScript.DoIdle(100); }
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()); } } } }
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)); }
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()); } } } } }
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); }
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); }
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"); } } }
protected override void Dispose(bool disposing) { VsRHostScript.DoIdle(2000); base.Dispose(disposing); if (disposing) { _variableProvider.Dispose(); } }
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); }
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(); } } }
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"); }
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"); }
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); }
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"); } } }
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"); }
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); } } }
public HelpWindowTest(IServiceContainer services) : base(services, true) { _hostScript = GetScript <VsRHostScript>(); }
public HostBasedInteractiveTest(IRSessionCallback callback = null) { HostScript = new VsRHostScript(SessionProvider, callback); }
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); } } }
public HostBasedInteractiveTest(IRHostBrokerConnector brokerConnector, IRSessionCallback callback = null) { HostScript = new VsRHostScript(SessionProvider, brokerConnector, callback); }