Exemplo n.º 1
0
        public void Update_NoChanges_InvokesPostChangedEventTwice_NoEffectiveChanges()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot("Hello World"));
            var called     = 0;

            textBuffer.PostChanged += (s, a) =>
            {
                textBuffer.TryGetHostDocumentSyncVersion(out var version);
                Assert.Equal(1, version);

                called += 1;
            };

            var document = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(Array.Empty <ITextChange>(), hostDocumentVersion: 1);

            // Assert
            Assert.Equal(2, called);
            var text = textBuffer.CurrentSnapshot.GetText();

            Assert.Equal("Hello World", text);
        }
Exemplo n.º 2
0
        public override bool TryCreateFor(ITextBuffer hostDocumentBuffer, out VirtualDocument virtualDocument)
        {
            if (hostDocumentBuffer is null)
            {
                throw new ArgumentNullException(nameof(hostDocumentBuffer));
            }

            if (!hostDocumentBuffer.ContentType.IsOfType(RazorLSPContentTypeDefinition.Name))
            {
                // Another content type we don't care about.
                virtualDocument = null;
                return(false);
            }

            var hostDocumentUri = _fileUriProvider.GetOrCreate(hostDocumentBuffer);

            // Index.cshtml => Index.cshtml__virtual.html
            var virtualHtmlFilePath = hostDocumentUri.GetAbsoluteOrUNCPath() + VirtualHtmlFileNameSuffix;
            var virtualHtmlUri      = new Uri(virtualHtmlFilePath);

            var htmlBuffer = _textBufferFactory.CreateTextBuffer();

            htmlBuffer.Properties.AddProperty(ContainedLanguageMarker, true);

            // Create a text document to trigger the Html language server initialization.
            _textDocumentFactory.CreateTextDocument(htmlBuffer, virtualHtmlFilePath);

            htmlBuffer.ChangeContentType(HtmlLSPContentType, editTag: null);

            virtualDocument = new HtmlVirtualDocument(virtualHtmlUri, htmlBuffer);
            return(true);
        }
Exemplo n.º 3
0
        public void Update_AlwaysSetsHostDocumentSyncVersion_AndUpdatesSnapshot()
        {
            // Arrange
            var textBuffer       = new TestTextBuffer(StringTextSnapshot.Empty);
            var document         = new HtmlVirtualDocument(Uri, textBuffer);
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            document.Update(Array.Empty <TextChange>(), hostDocumentVersion: 1337);

            // Assert
            Assert.NotSame(originalSnapshot, document.CurrentSnapshot);
            Assert.Equal(1337, document.HostDocumentSyncVersion);
        }
Exemplo n.º 4
0
        public void Update_Delete()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot("Hello World"));
            var delete     = new TextChange(new TextSpan(6, 5), string.Empty);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { delete }, hostDocumentVersion: 1);

            // Assert
            var text = textBuffer.CurrentSnapshot.GetText();

            Assert.Equal("Hello ", text);
        }
Exemplo n.º 5
0
        public void Update_Replace()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot("original"));
            var replace    = new TextChange(new TextSpan(0, textBuffer.CurrentSnapshot.Length), "replaced text");
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { replace }, hostDocumentVersion: 1);

            // Assert
            var text = textBuffer.CurrentSnapshot.GetText();

            Assert.Equal(replace.NewText, text);
        }
Exemplo n.º 6
0
        public void Update_Insert()
        {
            // Arrange
            var insert     = new TextChange(new TextSpan(0, 0), "inserted text");
            var textBuffer = new TestTextBuffer(StringTextSnapshot.Empty);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { insert }, hostDocumentVersion: 1);

            // Assert
            var text = textBuffer.CurrentSnapshot.GetText();

            Assert.Equal(insert.NewText, text);
        }
Exemplo n.º 7
0
        public void Update_MultipleEdits()
        {
            // Arrange
            var textBuffer = new TestTextBuffer(new StringTextSnapshot("Hello World"));
            var replace    = new VisualStudioTextChange(6, 5, "Replaced");
            var delete     = new VisualStudioTextChange(0, 6, string.Empty);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { replace, delete }, hostDocumentVersion: 1);

            // Assert
            var text = textBuffer.CurrentSnapshot.GetText();

            Assert.Equal("Replaced", text);
        }
        public void Update_Delete()
        {
            // Arrange
            var delete = new TextChange(new TextSpan(123, 4), string.Empty);
            var edit   = new Mock <ITextEdit>();

            edit.Setup(e => e.Delete(delete.Span.Start, delete.Span.Length)).Verifiable();
            edit.Setup(e => e.Apply()).Verifiable();
            var textBuffer = CreateTextBuffer(edit.Object);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { delete }, hostDocumentVersion: 1);

            // Assert
            edit.VerifyAll();
        }
        public void Update_Replace()
        {
            // Arrange
            var replace = new TextChange(new TextSpan(123, 4), "replaced text");
            var edit    = new Mock <ITextEdit>();

            edit.Setup(e => e.Replace(replace.Span.Start, replace.Span.Length, replace.NewText)).Verifiable();
            edit.Setup(e => e.Apply()).Verifiable();
            var textBuffer = CreateTextBuffer(edit.Object);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { replace }, hostDocumentVersion: 1);

            // Assert
            edit.VerifyAll();
        }
        public void Update_Insert()
        {
            // Arrange
            var insert = new TextChange(new TextSpan(123, 0), "inserted text");
            var edit   = new Mock <ITextEdit>();

            edit.Setup(e => e.Insert(insert.Span.Start, insert.NewText)).Verifiable();
            edit.Setup(e => e.Apply()).Verifiable();
            var textBuffer = CreateTextBuffer(edit.Object);
            var document   = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { insert }, hostDocumentVersion: 1);

            // Assert
            edit.VerifyAll();
        }
        public void Update_MultipleEdits()
        {
            // Arrange
            var replace = new TextChange(new TextSpan(123, 4), "replaced text");
            var delete  = new TextChange(new TextSpan(123, 4), string.Empty);
            var edit    = new Mock <ITextEdit>();

            edit.Setup(e => e.Delete(delete.Span.Start, delete.Span.Length)).Verifiable();
            edit.Setup(e => e.Replace(replace.Span.Start, replace.Span.Length, replace.NewText)).Verifiable();
            var textBuffer = CreateTextBuffer(edit.Object);

            edit.Setup(e => e.Apply())
            .Returns(textBuffer.CurrentSnapshot).Verifiable();
            var document = new HtmlVirtualDocument(Uri, textBuffer);

            // Act
            document.Update(new[] { replace, delete }, hostDocumentVersion: 1);

            // Assert
            edit.VerifyAll();
        }