Exemplo n.º 1
0
        public void Update_NoChanges_InvokesPostChangedEventZeroTimes_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;
            };

            using var document = new TestVirtualDocument(Uri, textBuffer);

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

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

            Assert.Equal("Hello World", text);
        }
Exemplo n.º 2
0
        public void TryGetVirtualCSharpDocument_CSharpDocument_ReturnsTrue()
        {
            // Arrange
            var testVirtualDocument = new TestVirtualDocument();
            var lspDocument         = new DefaultLSPDocument(Uri, Mock.Of <ITextBuffer>(), new[] { Mock.Of <VirtualDocument>(), testVirtualDocument });

            // Act
            var result = lspDocument.TryGetVirtualDocument <TestVirtualDocument>(out var virtualDocument);

            // Assert
            Assert.True(result);
            Assert.Same(testVirtualDocument, virtualDocument);
        }
Exemplo n.º 3
0
        public void Update_AlwaysSetsHostDocumentSyncVersion_AndUpdatesSnapshot()
        {
            // Arrange
            var textBuffer       = new TestTextBuffer(StringTextSnapshot.Empty);
            var document         = new TestVirtualDocument(Uri, textBuffer);
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            document.Update(Array.Empty <ITextChange>(), 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 VisualStudioTextChange(6, 5, string.Empty);
            var document   = new TestVirtualDocument(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 VisualStudioTextChange(0, textBuffer.CurrentSnapshot.Length, "replaced text");
            var document   = new TestVirtualDocument(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 VisualStudioTextChange(0, 0, "inserted text");
            var textBuffer = new TestTextBuffer(StringTextSnapshot.Empty);
            var document   = new TestVirtualDocument(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);

            using var document = new TestVirtualDocument(Uri, textBuffer);

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

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

            Assert.Equal("Replaced", text);
        }
        public void UpdateVirtualDocument_UpdatesProvidedVirtualDocumentWithProvidedArgs_AndRecalcsSnapshot()
        {
            // Arrange
            var textBuffer      = new TestTextBuffer(new StringTextSnapshot(string.Empty));
            var virtualDocument = new TestVirtualDocument();

            using var document = new DefaultLSPDocument(Uri, textBuffer, new[] { virtualDocument });
            var changes          = Array.Empty <ITextChange>();
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            document.UpdateVirtualDocument <TestVirtualDocument>(changes, hostDocumentVersion: 1337, state: null);

            // Assert
            Assert.Equal(1337, virtualDocument.HostDocumentVersion);
            Assert.Same(changes, virtualDocument.Changes);
            Assert.NotEqual(originalSnapshot, document.CurrentSnapshot);
        }
Exemplo n.º 9
0
        public void UpdateVirtualDocument_UpdatesProvidedVirtualDocumentWithProvidedArgs_AndRecalcsSnapshot()
        {
            // Arrange
            var snapshot         = Mock.Of <ITextSnapshot>(s => s.Version == Mock.Of <ITextVersion>());
            var textBuffer       = Mock.Of <ITextBuffer>(buffer => buffer.CurrentSnapshot == snapshot);
            var virtualDocument  = new TestVirtualDocument();
            var document         = new DefaultLSPDocument(Uri, textBuffer, new[] { virtualDocument });
            var changes          = Array.Empty <ITextChange>();
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            document.UpdateVirtualDocument <TestVirtualDocument>(changes, hostDocumentVersion: 1337);

            // Assert
            Assert.Equal(1337, virtualDocument.HostDocumentSyncVersion);
            Assert.Same(changes, virtualDocument.Changes);
            Assert.NotEqual(originalSnapshot, document.CurrentSnapshot);
        }
Exemplo n.º 10
0
        public void TryGetVirtualCSharpDocument_CSharpDocument_ReturnsTrue()
        {
            // Arrange
            var textBuffer = new Mock <ITextBuffer>(MockBehavior.Strict);

            textBuffer.SetupGet(b => b.CurrentSnapshot).Returns((ITextSnapshot)null);
            textBuffer.Setup(b => b.ChangeContentType(It.IsAny <IContentType>(), null)).Verifiable();
            textBuffer.SetupGet(b => b.Properties).Returns(new PropertyCollection());
            var testVirtualDocument = new TestVirtualDocument(Uri, textBuffer.Object);
            var virtualDocumentMock = new Mock <VirtualDocument>(MockBehavior.Strict);

            virtualDocumentMock.Setup(d => d.Dispose()).Verifiable();
            using var lspDocument = new DefaultLSPDocument(Uri, Mock.Of <ITextBuffer>(MockBehavior.Strict), new[] { virtualDocumentMock.Object, testVirtualDocument });

            // Act
            var result = lspDocument.TryGetVirtualDocument <TestVirtualDocument>(out var virtualDocument);

            // Assert
            Assert.True(result);
            Assert.Same(testVirtualDocument, virtualDocument);
        }
Exemplo n.º 11
0
        public void UpdateVirtualDocument_UpdatesProvidedVirtualDocumentWithProvidedArgs_AndRecalcsSnapshot()
        {
            // Arrange
            var textVersion = new Mock <ITextVersion>(MockBehavior.Strict);

            textVersion.SetupGet(v => v.VersionNumber).Returns(0);
            var snapshot        = Mock.Of <ITextSnapshot>(s => s.Version == textVersion.Object, MockBehavior.Strict);
            var textBuffer      = Mock.Of <ITextBuffer>(buffer => buffer.CurrentSnapshot == snapshot, MockBehavior.Strict);
            var virtualDocument = new TestVirtualDocument();

            using var document = new DefaultLSPDocument(Uri, textBuffer, new[] { virtualDocument });
            var changes          = Array.Empty <ITextChange>();
            var originalSnapshot = document.CurrentSnapshot;

            // Act
            document.UpdateVirtualDocument <TestVirtualDocument>(changes, hostDocumentVersion: 1337);

            // Assert
            Assert.Equal(1337, virtualDocument.HostDocumentVersion);
            Assert.Same(changes, virtualDocument.Changes);
            Assert.NotEqual(originalSnapshot, document.CurrentSnapshot);
        }
        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);
        }