示例#1
0
        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);
        }
示例#2
0
        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);
示例#8
0
        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);
        }