public void R_SignatureSessionNavigation() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { FunctionRdDataProvider.HostStartTimeout = 10000; using (new RHostScript(EditorShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>())) { PrepareFunctionIndex(); FunctionIndexUtility.GetFunctionInfoAsync("lm").Wait(3000); script.Type("x <- lm(subset = a, sing"); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(1000); ISignatureHelpSession session = script.GetSignatureSession(); session.Should().NotBeNull(); script.DoIdle(200); IParameter parameter = session.SelectedSignature.CurrentParameter; parameter.Should().NotBeNull(); parameter.Name.Should().Be("singular.ok"); script.MoveLeft(17); script.DoIdle(200); parameter = session.SelectedSignature.CurrentParameter; parameter.Name.Should().Be("subset"); script.MoveRight(3); script.DoIdle(200); parameter = session.SelectedSignature.CurrentParameter; parameter.Name.Should().Be("singular.ok"); } } }
public void RSignature() { using (var script = new TestScript("```{r}\r\n\r\n```", MdContentTypeDefinition.ContentType)) { FunctionRdDataProvider.HostStartTimeout = 10000; using (new RHostScript(EditorShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>())) { FunctionIndex.Initialize(); FunctionIndex.BuildIndexAsync().Wait(); FunctionIndexUtility.GetFunctionInfoAsync("lm").Wait(3000); script.MoveDown(); script.Type("x <- lm("); script.DoIdle(2000); ISignatureHelpSession session = script.GetSignatureSession(); session.Should().NotBeNull(); IParameter parameter = session.SelectedSignature.CurrentParameter; parameter.Should().NotBeNull(); parameter.Name.Should().Be("formula"); script.Type("sub"); script.DoIdle(500); script.Type("{TAB}"); script.DoIdle(1000); parameter = session.SelectedSignature.CurrentParameter; parameter.Name.Should().Be("subset"); string actual = script.EditorText; actual.Should().Be("```{r}\r\nx <- lm(subset = )\r\n```"); session = script.GetSignatureSession(); parameter = session.SelectedSignature.CurrentParameter; } } }
public void R_AutoFormatFuncionDefinition03() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { string text1 = "x <-function(x, y,{ENTER}"; string text2 = "a,b,"; string text3 = "c, d)"; script.Type(text1); script.DoIdle(300); script.Backspace(); script.Backspace(); script.Backspace(); script.Backspace(); script.DoIdle(300); script.Type(text2); script.Enter(); script.Type(text3); string actual = script.EditorText; string expected = "x <- function(x, y,\r\n" + " a, b,\r\n" + " c, d)"; actual.Should().Be(expected); } }
public void R_CompletionFilesUserFolder() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var provider = EditorShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>(); using (new RHostScript(provider)) { var myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var testFolder = Path.Combine(myDocs, "_rtvs_test_"); if (!Directory.Exists(testFolder)) { Directory.CreateDirectory(testFolder); } script.DoIdle(100); script.Type("x <- \"~/"); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(500); var session = script.GetCompletionSession(); session.Should().NotBeNull(); script.DoIdle(200); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "_rtvs_test_"); item.Should().NotBeNull(); if (Directory.Exists(testFolder)) { Directory.Delete(testFolder); } } } }
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_ErrorTagsTest01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { // Force tagger creation var tagSpans = script.GetErrorTagSpans(); script.Type("x <- {"); script.Delete(); script.DoIdle(500); tagSpans = script.GetErrorTagSpans(); string errorTags = script.WriteErrorTags(tagSpans); errorTags.Should().Be("[5 - 6] } expected\r\n"); var item = tagSpans[0].Tag as IEditorTaskListItem; item.Line.Should().Be(1); item.Column.Should().Be(6); item.FileName.Should().Be("filename"); item.HelpKeyword.Should().Be("vs.r.validationerror"); script.Type("}"); script.DoIdle(500); tagSpans = script.GetErrorTagSpans(); tagSpans.Should().BeEmpty(); } }
public void TypeRBlock() { using (var script = new TestScript(MdContentTypeDefinition.ContentType)) { script.Type("```{r}{ENTER}{ENTER}```"); script.MoveUp(); script.Type("x"); script.DoIdle(200); script.Type("<-"); script.DoIdle(200); script.Type("funct"); script.DoIdle(200); script.Type("{TAB}(){"); script.DoIdle(200); script.Type("{ENTER}abbr{TAB}("); string expected = @"```{r} x <- function() { abbreviate() } ```"; string actual = script.EditorText; actual.Should().Be(expected); } }
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 void R_LibrarySuggestedActions() { using (var script = new TestScript(" library(base)", RContentTypeDefinition.ContentType)) { IEnumerable <SuggestedActionSet> sets = null; ILightBulbSession session = null; var e = EditorShell.Current.ExportProvider; var svc = e.GetExportedValue <ISuggestedActionCategoryRegistryService>(); script.Invoke(() => { var broker = e.GetExportedValue <ILightBulbBroker>(); broker.CreateSession(svc.AllCodeFixes, EditorWindow.CoreEditor.View); session = script.GetLightBulbSession(); session.Should().NotBeNull(); session.Expand(); session.TryGetSuggestedActionSets(out sets); }); sets.Should().NotBeNull(); sets.Should().HaveCount(0); session.Dismiss(); script.DoIdle(200); script.MoveRight(2); script.DoIdle(200); sets = null; script.Invoke(() => { var broker = e.GetExportedValue <ILightBulbBroker>(); broker.DismissSession(EditorWindow.CoreEditor.View); broker.CreateSession(svc.Any, EditorWindow.CoreEditor.View); session = script.GetLightBulbSession(); session.Should().NotBeNull(); session.Expand(); session.TryGetSuggestedActionSets(out sets); }); script.DoIdle(3000); sets = null; script.Invoke(() => { session.TryGetSuggestedActionSets(out sets); }); sets.Should().NotBeNull(); sets.Should().HaveCount(1); var set = sets.First(); set.Actions.Should().HaveCount(2); var actions = set.Actions.ToArray(); actions[0].Should().BeOfType(typeof(InstallPackageSuggestedAction)); actions[1].Should().BeOfType(typeof(LoadLibrarySuggestedAction)); } }
public void R_NoCompletionOnTabInComment() { // Tab only completes when selected item starts // with the text typed so far in the buffer using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.DoIdle(100); script.Type("#com"); script.DoIdle(300); script.Type("{TAB}a"); script.DoIdle(100); string actual = script.EditorText; actual.Should().Be("#com a"); // Tab was not consumed } }
public void R_ProvisionalText02() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.Type("c(\""); string expected = "c(\"\")"; string actual = script.EditorText; actual.Should().Be(expected); // Move caret outside of the provisional text area // and back so provisional text becomes permanent. script.MoveRight(); script.MoveLeft(); // Let parser hit on idle so AST updates script.DoIdle(300); // There should not be completion inside "" script.Type("\""); expected = "c(\"\"\")"; actual = script.EditorText; actual.Should().Be(expected); } }
public void R_ProvisionalText01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.Type("{"); script.Type("("); script.Type("["); script.Type("\""); string expected = "{([\"\"])}"; string actual = script.EditorText; actual.Should().Be(expected); REditorSettings.AutoFormat = false; script.Type("\""); script.Type("]"); script.Type(")"); script.Type("}"); script.DoIdle(1000); expected = "{([\"\"])}"; actual = script.EditorText; actual.Should().Be(expected); } }
public void R_AutoFormatScopeBraces03() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.Type("while(true) {"); script.DoIdle(300); script.Type("{ENTER}if(x>1) {"); script.DoIdle(300); script.Type("{ENTER}foo"); string expected = "while (true) {\r\n if (x > 1) {\r\n foo\r\n }\r\n}"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_SmartIndentTest02() { using (var script = new TestScript(string.Empty, RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.Type("if(TRUE)"); script.DoIdle(300); script.Type("{ENTER}a"); script.DoIdle(300); script.Type("{ENTER}x <-1{ENTER}"); script.DoIdle(300); string expected = "if (TRUE)\r\n a\r\nx <- 1\r\n"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_ProvisionalCurlyBrace01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.Type("while(1)"); script.DoIdle(300); script.Type("{"); script.DoIdle(300); script.Type("{ENTER}}"); string expected = "while (1) {\r\n}"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_NoCompletionOnTabWhenNoMatch() { // Tab only completes when selected item starts // with the text typed so far in the buffer using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.DoIdle(100); script.Type("while aaa"); script.DoIdle(300); script.Type("{TAB}"); script.DoIdle(100); string actual = script.EditorText; actual.Should().Be("while aaa"); // nothing was inserted from the completion list EditorWindow.CoreEditor.View.Caret.Position.BufferPosition.Position.Should().Be(actual.Length); } }
public void R_EqualsCompletion01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { PrepareFunctionIndex(); FunctionIndexUtility.GetFunctionInfoAsync("addmargins").Wait(3000); script.DoIdle(100); script.Type("addmargins(FU"); script.DoIdle(300); script.Type("="); script.DoIdle(300); string expected = "addmargins(FUN = )"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_AutoFormatScopeBraces11() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.Type("{"); script.DoIdle(200); script.Type("{ENTER}{"); script.DoIdle(200); script.Type("{ENTER}{"); script.DoIdle(200); script.Type("{ENTER}a"); string expected = "{\r\n {\r\n {\r\n a\r\n }\r\n }\r\n}"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_SmartIndentTest04() { using (var script = new TestScript(string.Empty, RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.MoveRight(); script.Type("{{ENTER}if(1)"); script.DoIdle(200); script.Type("{ENTER}a<-1{ENTER}"); script.DoIdle(200); script.Type("else {ENTER}b<-2;"); script.DoIdle(200); string expected = "{\r\n if (1)\r\n a <- 1\r\n else\r\n b <- 2;\r\n}"; string actual = script.EditorText; actual.Should().Be(expected); } }
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 RColors(string fileName) { using (var script = new TestScript(_files, fileName, unused: false)) { script.DoIdle(500); var spans = script.GetClassificationSpans(); var actual = ClassificationWriter.WriteClassifications(spans); VerifyClassifications(fileName, actual); } }
public void R_SmartIndentTest03() { using (var script = new TestScript(string.Empty, RContentTypeDefinition.ContentType)) { REditorSettings.FormatOptions.BracesOnNewLine = false; script.MoveRight(); script.Type("while(TRUE){{ENTER}if(1){"); script.DoIdle(200); script.Type("{ENTER}a"); script.DoIdle(200); script.MoveDown(); script.DoIdle(200); script.Type("else {{ENTER}b"); script.DoIdle(200); string expected = "while (TRUE) {\r\n if (1) {\r\n a\r\n } else {\r\n b\r\n }\r\n}"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_CompletionFilter01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.Type("x <- lm"); script.DoIdle(100); script.Type("mmm"); script.DoIdle(100); script.Backspace(); script.Backspace(); script.Backspace(); script.Backspace(); script.DoIdle(100); script.Type("abels.{TAB}"); string expected = "x <- labels.default"; string actual = script.EditorText; actual.Should().Be(expected); } }
public void R_AutoFormatFuncionDefinition01() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { string text = "x <-function (x,y,{ENTER}wt= NULL){{ENTER}"; REditorSettings.FormatOptions.BracesOnNewLine = false; script.Type(text); script.DoIdle(300); script.Type("a"); script.DoIdle(300); string actual = script.EditorText; string expected = "x <- function(x, y,\r\n" + " wt = NULL) {\r\n" + " a\r\n" + "}"; actual.Should().Be(expected); } }
public void R_CompletionFilesAbsolute() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { var root = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)); script.DoIdle(100); script.Type(Invariant($"x <- \"{root[0]}:/")); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(100); var session = script.GetCompletionSession(); session.Should().NotBeNull(); script.DoIdle(200); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "Windows"); item.Should().NotBeNull(); } }
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 void R_AutoFormatFuncionDefinition02() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { string text1 = "library ( abind){ENTER}x <-function (x,y, wt= NULL, intercept =TRUE, tolerance=1e-07,{ENTER}"; string text2 = "yname = NULL){{ENTER}abind(a, )"; script.Type(text1); script.DoIdle(300); script.Type(text2); script.DoIdle(300); string actual = script.EditorText; string expected = "library(abind)\r\n" + "x <- function(x, y, wt = NULL, intercept = TRUE, tolerance = 1e-07,\r\n" + " yname = NULL) {\r\n" + " abind(a, )\r\n" + "}"; actual.Should().Be(expected); } }
public void R_CompletionFiles() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { string asmPath = Assembly.GetExecutingAssembly().GetAssemblyPath(); RToolsSettings.Current.WorkingDirectory = Path.GetDirectoryName(asmPath); script.DoIdle(100); script.Type("x <- \""); script.DoIdle(1000); script.Type("{TAB}"); script.DoIdle(100); var session = script.GetCompletionSession(); session.Should().NotBeNull(); script.DoIdle(200); var list = session.SelectedCompletionSet.Completions.ToList(); var item = list.FirstOrDefault(x => x.DisplayText == "ItemTemplates"); item.Should().NotBeNull(); } }
public void R_OutlineToggleAll() { string text = _files.LoadDestinationFile("lsfit.r"); using (var script = new TestScript(text, RContentTypeDefinition.ContentType)) { script.DoIdle(500); IOutliningManagerService svc = EditorShell.Current.ExportProvider.GetExportedValue <IOutliningManagerService>(); IOutliningManager mgr = svc.GetOutliningManager(EditorWindow.CoreEditor.View); var snapshot = EditorWindow.TextBuffer.CurrentSnapshot; var viewLines = EditorWindow.CoreEditor.View.TextViewLines; viewLines.Count.Should().Be(40); script.DoIdle(500); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_TOGGLE_ALL); script.DoIdle(1000); IEnumerable <ICollapsed> collapsed = mgr.GetCollapsedRegions(new SnapshotSpan(snapshot, new Span(0, snapshot.Length))); collapsed.Count().Should().Be(20); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_TOGGLE_ALL); script.DoIdle(500); viewLines = EditorWindow.CoreEditor.View.TextViewLines; viewLines.Count.Should().Be(40); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_STOP_HIDING_ALL); script.DoIdle(200); mgr.Enabled.Should().Be(false); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_START_AUTOHIDING); script.DoIdle(200); mgr.Enabled.Should().Be(true); script.MoveDown(9); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_TOGGLE_CURRENT); script.DoIdle(500); collapsed = mgr.GetCollapsedRegions(new SnapshotSpan(snapshot, new Span(0, snapshot.Length))); collapsed.Count().Should().Be(1); EditorWindow.ExecCommand(VSConstants.VSStd2K, (int)VSConstants.VSStd2KCmdID.OUTLN_TOGGLE_CURRENT); script.DoIdle(200); collapsed = mgr.GetCollapsedRegions(new SnapshotSpan(snapshot, new Span(0, snapshot.Length))); collapsed.Count().Should().Be(0); } }
public void R_RequireIntellisense() { using (var script = new TestScript(RContentTypeDefinition.ContentType)) { script.Type("require(uti"); script.DoIdle(100); script.Type("{TAB}"); string expected = "require(utils)"; string actual = script.EditorText; actual.Should().Be(expected); } }