Ejemplo n.º 1
0
        public async Task GetCSharpSyntaxTreeAsync_NoWorkspace_CreatesSyntaxTree()
        {
            // Arrange
            var filePath                = "C:\\path\\to\\file.razor.cs";
            var uri                     = new Uri(filePath);
            var textBuffer              = new TestTextBuffer(new StringTextSnapshot("class Foo{}"));
            var virtualDocument         = new CSharpVirtualDocument(uri, textBuffer);
            var virtualDocumentSnapshot = (CSharpVirtualDocumentSnapshot)virtualDocument.CurrentSnapshot;

            // Act
            var syntaxTree = await virtualDocumentSnapshot.GetCSharpSyntaxTreeAsync(workspace : null, CancellationToken.None);

            // Assert
            var diagnostics = syntaxTree.GetDiagnostics();

            Assert.Empty(diagnostics);
            Assert.True(syntaxTree.Length > 0);
        }
Ejemplo n.º 2
0
        public DefaultRazorBreakpointResolverTest()
        {
            DocumentUri = new Uri("file://*****:*****@"
    {ValidBreakpointCSharp}
    {InvalidBreakpointCSharp}
";
            var csharpTextSnapshot = new StringTextSnapshot(
                $@"public class SomeRazorFile
{{{mappedCSharpText}}}");

            CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot);

            var textBufferSnapshot = new StringTextSnapshot($"@code {{{mappedCSharpText}}}");

            HostTextbuffer = new TestTextBuffer(textBufferSnapshot);
        }
        public void CurrentSnapshot_ChangesWhenTextBufferChanges()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty));

            textBuffer.ChangeContentType(NotInertContentType, editTag: null);
            using var document = new DefaultLSPDocument(Uri, textBuffer, virtualDocuments: Array.Empty <VirtualDocument>());
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            var edit = textBuffer.CreateEdit();

            edit.Insert(0, "New!");
            edit.Apply();

            // Assert
            var newSnapshot = document.CurrentSnapshot;

            Assert.NotSame(originalSnapshot, newSnapshot);
            Assert.Equal(1, originalSnapshot.Version);
            Assert.Equal(2, newSnapshot.Version);
        }
        public void InertTextBuffer_DoesNotCreateSnapshot()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot(string.Empty));

            textBuffer.ChangeContentType(NotInertContentType, editTag: null);
            using var document = new DefaultLSPDocument(Uri, textBuffer, virtualDocuments: Array.Empty <VirtualDocument>());
            var originalSnapshot = document.CurrentSnapshot;

            textBuffer.ChangeContentType(TestInertContentType.Instance, editTag: null);

            // Act
            var edit = textBuffer.CreateEdit();

            edit.Insert(0, "New!");
            edit.Apply();

            // Assert
            var newSnapshot = document.CurrentSnapshot;

            Assert.Same(originalSnapshot, newSnapshot);
        }
        private TestParserManager CreateParserManager(ITextSnapshot originalSnapshot)
        {
            var textBuffer            = new TestTextBuffer(originalSnapshot);
            var documentTracker       = CreateDocumentTracker(textBuffer);
            var templateEngineFactory = CreateProjectEngineFactory();
            var parser = new DefaultVisualStudioRazorParser(
                Dispatcher,
                documentTracker,
                templateEngineFactory,
                new DefaultErrorReporter(),
                new TestCompletionBroker())
            {
                // We block idle work with the below reset events. Therefore, make tests fast and have the idle timer fire as soon as possible.
                IdleDelay = TimeSpan.FromMilliseconds(1),
                NotifyForegroundIdleStart = new ManualResetEventSlim(),
                BlockBackgroundIdleWork   = new ManualResetEventSlim(),
            };

            parser.StartParser();

            return(new TestParserManager(parser));
        }
        public DefaultLSPDocumentManagerTest()
        {
            var contentType = Mock.Of <IContentType>(contentType =>
                                                     contentType.IsOfType("inert") == false &&
                                                     contentType.IsOfType("test") == true &&
                                                     contentType.TypeName == "test",
                                                     MockBehavior.Strict);

            ChangeListeners     = Enumerable.Empty <Lazy <LSPDocumentChangeListener, IContentTypeMetadata> >();
            JoinableTaskContext = new JoinableTaskContext();
            TextBuffer          = new TestTextBuffer(new StringTextSnapshot(string.Empty));
            TextBuffer.ChangeContentType(contentType, editTag: null);
            var snapshot = TextBuffer.CurrentSnapshot;

            Uri         = new Uri("C:/path/to/file.razor");
            UriProvider = Mock.Of <FileUriProvider>(provider => provider.GetOrCreate(TextBuffer) == Uri, MockBehavior.Strict);
            Mock.Get(UriProvider).Setup(p => p.Remove(It.IsAny <ITextBuffer>())).Verifiable();
            var testVirtualDocument = new TestVirtualDocument();
            var lspDocument         = new DefaultLSPDocument(Uri, TextBuffer, new[] { testVirtualDocument });

            LSPDocumentSnapshot = lspDocument.CurrentSnapshot;
            LSPDocument         = lspDocument;
            LSPDocumentFactory  = Mock.Of <LSPDocumentFactory>(factory => factory.Create(TextBuffer) == LSPDocument, MockBehavior.Strict);
        }
Ejemplo n.º 7
0
            public TestParserManager(DefaultVisualStudioRazorParser parser)
            {
                _parserComplete  = new ManualResetEventSlim();
                _reparseComplete = new ManualResetEventSlim();

                _testBuffer = (TestTextBuffer)parser.TextBuffer;
                ParseCount  = 0;

                _parser = parser;
                parser.DocumentStructureChanged += (sender, args) =>
                {
                    CurrentSyntaxTree = args.CodeDocument.GetSyntaxTree();

                    Interlocked.Increment(ref ParseCount);

                    if (args.SourceChange == null)
                    {
                        // Reparse occurred
                        _reparseComplete.Set();
                    }

                    _parserComplete.Set();
                };
            }
Ejemplo n.º 8
0
        public async Task NoDocumentSnapshotParsesComponentFileCorrectly()
        {
            // Arrange
            var snapshot        = new StringTextSnapshot("@code { }");
            var testBuffer      = new TestTextBuffer(snapshot);
            var documentTracker = CreateDocumentTracker(testBuffer, filePath: "C:\\This\\Path\\Is\\Just\\For\\component.razor");

            using (var manager = CreateParserManager(documentTracker))
            {
                // Act
                await manager.InitializeWithDocumentAsync(snapshot);

                // Assert
                Assert.Equal(1, manager.ParseCount);

                var codeDocument = await manager.InnerParser.GetLatestCodeDocumentAsync(snapshot);

                Assert.Equal(FileKinds.Component, codeDocument.GetFileKind());

                // @code is only applicable in component files so we're verifying that `@code` was treated as a directive.
                var directiveNodes = manager.CurrentSyntaxTree.Root.DescendantNodes().Where(child => child.Kind == SyntaxKind.RazorDirective);
                Assert.Single(directiveNodes);
            }
        }
        public DefaultRazorProximityExpressionResolverTest()
        {
            DocumentUri = new Uri("file://*****:*****@"public class SomeRazorFile
{{
    {InvalidProximityExpressionRoot}

    public void Render()
    {{
        {ValidProximityExpressionRoot}
    }}
}}
");

            CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot);

            var textBufferSnapshot = new StringTextSnapshot($"@{{{InvalidProximityExpressionRoot}}} @code {{{ValidProximityExpressionRoot}}}");

            HostTextbuffer = new TestTextBuffer(textBufferSnapshot);
        }
Ejemplo n.º 10
0
        public DefaultRazorBreakpointResolverTest()
        {
            DocumentUri       = new Uri("file://*****:*****@"public class SomeRazorFile
{{
    {ValidBreakpointCSharp}
    {InvalidBreakpointCSharp}
}}");

            CSharpTextBuffer = new TestTextBuffer(csharpTextSnapshot);

            var textBufferSnapshot = new StringTextSnapshot(@$ "
@code
{{
    {ValidBreakpointCSharp}
    {InvalidBreakpointCSharp}
}}
");

            HostTextbuffer = new TestTextBuffer(textBufferSnapshot);
        }
            public TestParserManager(VisualStudioRazorParser parser)
            {
                _parserComplete  = new ManualResetEventSlim();
                _reparseComplete = new ManualResetEventSlim();
                _testBuffer      = (TestTextBuffer)parser._textBuffer;
                ParseCount       = 0;

                // Change idle delay to be huge in order to enable us to take control of when idle methods fire.
                parser._idleTimer.Interval = TimeSpan.FromMinutes(2).TotalMilliseconds;
                _parser = parser;
                parser.DocumentStructureChanged += (sender, args) =>
                {
                    Interlocked.Increment(ref ParseCount);
                    _parserComplete.Set();

                    if (args.SourceChange == null)
                    {
                        // Reparse occurred
                        _reparseComplete.Set();
                    }

                    CurrentSyntaxTree = args.CodeDocument.GetSyntaxTree();
                };
            }
Ejemplo n.º 12
0
        public void TextBuffer_OnPostChanged_IndentsInbetweenDirectiveBlockBraces()
        {
            // Arrange
            var change              = Environment.NewLine;
            var initialSnapshot     = new StringTextSnapshot("    @functions {}");
            var afterChangeSnapshot = new StringTextSnapshot("    @functions {" + change + "}");
            var edit = new TestEdit(16, 0, initialSnapshot, change.Length, afterChangeSnapshot, change);
            var expectedIndentResult = "    @functions {" + change + change + "    }";

            var            caret           = CreateCaretFrom(16 + change.Length, afterChangeSnapshot);
            TestTextBuffer textBuffer      = null;
            var            focusedTextView = CreateFocusedTextView(() => textBuffer, caret);
            var            documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView);

            textBuffer = CreateTextBuffer(initialSnapshot, documentTracker);
            var editorOperationsFactory = CreateOperationsFactoryService();
            var braceSmartIndenter      = new BraceSmartIndenter(Dispatcher, documentTracker, editorOperationsFactory);

            // Act
            textBuffer.ApplyEdit(edit);

            // Assert
            Assert.Equal(expectedIndentResult, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content);
        }
        public void TextBuffer_OnPostChanged_DoesNotIndentJavaScript()
        {
            // Arrange
            var change              = Environment.NewLine;
            var initialSnapshot     = new StringTextSnapshot("    <script>function foo() {}</script>");
            var afterChangeSnapshot = new StringTextSnapshot("    <script>function foo() {" + change + "}</script>");
            var edit = new TestEdit(28, 0, initialSnapshot, change.Length, afterChangeSnapshot, change);

            var            caret           = CreateCaretFrom(28 + change.Length, afterChangeSnapshot);
            TestTextBuffer textBuffer      = null;
            var            focusedTextView = CreateFocusedTextView(() => textBuffer, caret);
            var            documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView);

            textBuffer = CreateTextBuffer(initialSnapshot, documentTracker);
            var codeDocumentProvider    = CreateCodeDocumentProvider(initialSnapshot.Content);
            var editorOperationsFactory = CreateOperationsFactoryService();
            var braceSmartIndenter      = new BraceSmartIndenter(Dispatcher, documentTracker, codeDocumentProvider, editorOperationsFactory);

            // Act
            textBuffer.ApplyEdit(edit);

            // Assert
            Assert.Equal(afterChangeSnapshot.Content, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content);
        }
 public DefaultRazorLanguageServerCustomMessageTargetTest()
 {
     JoinableTaskContext = new JoinableTaskContext();
     TextBuffer          = new TestTextBuffer(new StringTextSnapshot(string.Empty));
 }
 public DefaultFileUriProviderTest()
 {
     TextBuffer = new TestTextBuffer(StringTextSnapshot.Empty);
 }