public void DocumentProcessed_DoesNothingForOlderDocuments() { // Arrange var generatedDocumentPublisher = new Mock <GeneratedDocumentPublisher>(MockBehavior.Strict); var lastVersion = VersionStamp.Default.GetNewerVersion(); var lastDocument = TestDocumentSnapshot.Create("C:/path/old.cshtml", lastVersion); var oldDocument = TestDocumentSnapshot.Create("C:/path/file.cshtml", VersionStamp.Default); var cache = new TestDocumentVersionCache(new Dictionary <DocumentSnapshot, int?>() { [oldDocument] = 1337, [lastDocument] = 1338, }); var csharpDocument = RazorCSharpDocument.Create("Anything", RazorCodeGenerationOptions.CreateDefault(), Enumerable.Empty <RazorDiagnostic>()); var htmlDocument = RazorHtmlDocument.Create("Anything", RazorCodeGenerationOptions.CreateDefault()); var codeDocument = CreateCodeDocument(csharpDocument, htmlDocument); // Force the state to already be up-to-date oldDocument.State.HostDocument.GeneratedDocumentContainer.SetOutput(lastDocument, codeDocument, lastVersion, VersionStamp.Default, VersionStamp.Default); var listener = new UnsynchronizableContentDocumentProcessedListener(Dispatcher, cache, generatedDocumentPublisher.Object); listener.Initialize(ProjectSnapshotManager); // Act & Assert listener.DocumentProcessed(oldDocument); }
public void SetOutput_InvokesChangedEvent() { // Arrange using var workspace = TestWorkspace.Create(); var services = workspace.Services; var hostProject = new HostProject("C:/project.csproj", RazorConfiguration.Default, "project"); var projectState = ProjectState.Create(services, hostProject); var project = new DefaultProjectSnapshot(projectState); var text = SourceText.From("..."); var textAndVersion = TextAndVersion.Create(text, VersionStamp.Default); var hostDocument = new HostDocument("C:/file.cshtml", "C:/file.cshtml"); var documentState = new DocumentState(services, hostDocument, text, VersionStamp.Default, () => Task.FromResult(textAndVersion)); var document = new DefaultDocumentSnapshot(project, documentState); var csharpDocument = RazorCSharpDocument.Create("...", RazorCodeGenerationOptions.CreateDefault(), Enumerable.Empty <RazorDiagnostic>()); var htmlDocument = RazorHtmlDocument.Create("...", RazorCodeGenerationOptions.CreateDefault()); var version = VersionStamp.Create(); var container = new GeneratedDocumentContainer(); var csharpChanged = false; var htmlChanged = false; container.GeneratedCSharpChanged += (o, a) => { csharpChanged = true; }; container.GeneratedHtmlChanged += (o, a) => { htmlChanged = true; }; // Act container.SetOutput(document, csharpDocument, htmlDocument, version, version, version); // Assert Assert.NotNull(container.LatestDocument); Assert.True(csharpChanged); Assert.True(htmlChanged); }
public void SetOutput_AcceptsSameVersionedDocuments() { // Arrange using var workspace = TestWorkspace.Create(); var services = workspace.Services; var hostProject = new HostProject("C:/project.csproj", RazorConfiguration.Default, "project"); var projectState = ProjectState.Create(services, hostProject); var project = new DefaultProjectSnapshot(projectState); var text = SourceText.From("..."); var textAndVersion = TextAndVersion.Create(text, VersionStamp.Default); var hostDocument = new HostDocument("C:/file.cshtml", "C:/file.cshtml"); var documentState = new DocumentState(services, hostDocument, text, VersionStamp.Default, () => Task.FromResult(textAndVersion)); var document = new DefaultDocumentSnapshot(project, documentState); var newDocument = new DefaultDocumentSnapshot(project, documentState); var csharpDocument = RazorCSharpDocument.Create("...", RazorCodeGenerationOptions.CreateDefault(), Enumerable.Empty <RazorDiagnostic>()); var htmlDocument = RazorHtmlDocument.Create("...", RazorCodeGenerationOptions.CreateDefault()); var version = VersionStamp.Create(); var container = new GeneratedDocumentContainer(); container.SetOutput(document, csharpDocument, htmlDocument, version, version, version); // Act container.SetOutput(newDocument, csharpDocument, htmlDocument, version, version, version); // Assert Assert.Same(newDocument, container.LatestDocument); }
public void DocumentProcessed_SynchronizesIfSourceVersionsAreIdenticalButSyncVersionNewer() { // Arrange var lastVersion = VersionStamp.Default.GetNewerVersion(); var lastDocument = TestDocumentSnapshot.Create("C:/path/old.cshtml", lastVersion); var document = TestDocumentSnapshot.Create("C:/path/file.cshtml", lastVersion); var generatedDocumentPublisher = new Mock <GeneratedDocumentPublisher>(MockBehavior.Strict); generatedDocumentPublisher.Setup(publisher => publisher.PublishCSharp(It.IsAny <string>(), It.IsAny <SourceText>(), It.IsAny <int>())) .Callback <string, SourceText, int>((filePath, sourceText, hostDocumentVersion) => { Assert.Equal(document.FilePath, filePath); Assert.Equal(document.State.GeneratedDocumentContainer.CSharpSourceTextContainer.CurrentText.ToString(), sourceText.ToString()); }) .Verifiable(); generatedDocumentPublisher.Setup(publisher => publisher.PublishHtml(It.IsAny <string>(), It.IsAny <SourceText>(), It.IsAny <int>())) .Callback <string, SourceText, int>((filePath, sourceText, hostDocumentVersion) => { Assert.Equal(document.FilePath, filePath); Assert.Equal(document.State.GeneratedDocumentContainer.HtmlSourceTextContainer.CurrentText.ToString(), sourceText.ToString()); }) .Verifiable(); var cache = new TestDocumentVersionCache(new Dictionary <DocumentSnapshot, int?>() { [document] = 1338, [lastDocument] = 1337, }); var csharpDocument = RazorCSharpDocument.Create("Anything", RazorCodeGenerationOptions.CreateDefault(), Enumerable.Empty <RazorDiagnostic>()); var htmlDocument = RazorHtmlDocument.Create("Anything", RazorCodeGenerationOptions.CreateDefault()); var codeDocument = CreateCodeDocument(csharpDocument, htmlDocument); // Force the state to already be up-to-date document.State.HostDocument.GeneratedDocumentContainer.SetOutput(lastDocument, codeDocument, lastVersion, VersionStamp.Default, VersionStamp.Default); var listener = new UnsynchronizableContentDocumentProcessedListener(Dispatcher, cache, generatedDocumentPublisher.Object); listener.Initialize(ProjectSnapshotManager); // Act listener.DocumentProcessed(document); // Assert generatedDocumentPublisher.VerifyAll(); }