public void Apply_AddAndRemoved() { // Arrange var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Project1TagHelpers, Project2TagHelpers); // Act var tagHelpers = delta.Apply(Project2TagHelpers); // Assert Assert.Equal(Project1TagHelpers, tagHelpers); }
public void Apply_Removed() { // Arrange var delta = new TagHelperDeltaResult(Delta: true, ResultId: 1337, Array.Empty <TagHelperDescriptor>(), Project1TagHelpers); // Act var tagHelpers = delta.Apply(Project1AndProject2TagHelpers); // Assert Assert.Equal(Project2TagHelpers, tagHelpers); }
public void CalculateTagHelpersFromDelta_NewProject() { // Arrange var resolver = new TestTagHelperResolver(EngineFactory, ErrorReporter, Workspace); var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty <TagHelperDescriptor>()); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); // Assert Assert.Equal(Project1TagHelpers, tagHelpers); }
public void CalculateTagHelpersFromDelta_ReplacedTagHelpers() { // Arrange var resolver = new TestTagHelperResolver(EngineFactory, ErrorReporter, Workspace); var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty <TagHelperDescriptor>()); resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); var changedDelta = new TagHelperDeltaResult(Delta: true, initialDelta.ResultId + 1, new[] { TagHelper2_Project2 }, new[] { TagHelper2_Project1 }); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, initialDelta.ResultId, changedDelta); // Assert Assert.Equal(new[] { TagHelper1_Project1, TagHelper2_Project2 }, tagHelpers.OrderBy(th => th.Name)); }
public void CalculateTagHelpersFromDelta_DeltaFailedToApplyToKnownProject() { // Arrange var resolver = new TestTagHelperResolver(EngineFactory, ErrorReporter, Workspace); var initialDelta = new TagHelperDeltaResult(Delta: false, ResultId: 1, Project1TagHelpers, Array.Empty <TagHelperDescriptor>()); resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, lastResultId: -1, initialDelta); var newTagHelperSet = new[] { TagHelper1_Project1 }; var failedDeltaApplication = new TagHelperDeltaResult(Delta: false, initialDelta.ResultId + 1, newTagHelperSet, Array.Empty <TagHelperDescriptor>()); // Act var tagHelpers = resolver.PublicProduceTagHelpersFromDelta(Project1FilePath, initialDelta.ResultId, failedDeltaApplication); // Assert Assert.Equal(newTagHelperSet, tagHelpers); }
protected override IReadOnlyCollection <TagHelperDescriptor> ProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) => base.ProduceTagHelpersFromDelta(projectFilePath, lastResultId, deltaResult);
public IReadOnlyCollection <TagHelperDescriptor> PublicProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) => ProduceTagHelpersFromDelta(projectFilePath, lastResultId, deltaResult);
protected virtual IReadOnlyCollection <TagHelperDescriptor> ProduceTagHelpersFromDelta(string projectFilePath, int lastResultId, TagHelperDeltaResult deltaResult) { if (!_resultCache.TryGet(projectFilePath, lastResultId, out var tagHelpers)) { // We most likely haven't made a request to the server yet so there's no delta to apply tagHelpers = Array.Empty <TagHelperDescriptor>(); if (deltaResult.Delta) { // We somehow failed to retrieve a cached object yet the server was able to apply a delta. This // is entirely unexpected and means the server & client are catastrophically de-synchronized. throw new InvalidOperationException("This should never happen. Razor server & client are de-synchronized. Tearing down"); } } else if (!deltaResult.Delta) { // Not a delta based response, we should treat it as a "refresh" tagHelpers = Array.Empty <TagHelperDescriptor>(); } if (deltaResult.ResultId != lastResultId) { // New results, lets build a coherent TagHelper collection and then cache it tagHelpers = deltaResult.Apply(tagHelpers); _resultCache.Set(projectFilePath, deltaResult.ResultId, tagHelpers); } return(tagHelpers); }