Пример #1
0
        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");
                }
            }
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
                    }
                }
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
        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();
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
                }
            }
        }
Пример #9
0
        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));
            }
        }
Пример #10
0
        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
            }
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        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);
            }
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
        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);
            }
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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);
            }
        }
Пример #18
0
        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);
            }
        }
Пример #19
0
        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);
            }
        }
Пример #20
0
        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);
                }
            }
        }
Пример #21
0
 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);
     }
 }
Пример #22
0
        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);
            }
        }
Пример #23
0
        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);
            }
        }
Пример #24
0
        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);
            }
        }
Пример #25
0
        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();
            }
        }
Пример #26
0
        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);
                }
            }
        }
Пример #27
0
        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);
            }
        }
Пример #28
0
        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();
            }
        }
Пример #29
0
        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);
            }
        }
Пример #30
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);
            }
        }