hello
"); + + Assert.Equal(1, json.Count); + var segment = GetSegments(json)[0]; + Assert.Equal(CacheSegmentKind.Html, segment.Kind); + Assert.Equal("hello
", segment.Html); + Assert.Null(segment.ComponentType); + } + + [Fact] + public void AddHole_AddsHoleSegment() + { + var json = new CacheBoundaryJson(); + + json.AddHole(typeof(NotCacheBoundary)); + + Assert.Equal(1, json.Count); + var segment = GetSegments(json)[0]; + Assert.Equal(CacheSegmentKind.Hole, segment.Kind); + Assert.Equal(typeof(NotCacheBoundary), segment.ComponentType); + Assert.Null(segment.Html); + Assert.Null(segment.RenderModeName); + Assert.Null(segment.ComponentKey); + } + + [Fact] + public void AddHole_WithRenderModeAndKey() + { + var json = new CacheBoundaryJson(); + + json.AddHole(typeof(NotCacheBoundary), "InteractiveServer", "my-key"); + + var segment = GetSegments(json)[0]; + Assert.Equal("InteractiveServer", segment.RenderModeName); + Assert.Equal("my-key", segment.ComponentKey); + } + + [Fact] + public void AddHtml_ThrowsForNull() + { + var json = new CacheBoundaryJson(); + + Assert.Throwsmore
"); + + var serialized = original.Serialize(); + var restored = CacheBoundaryJson.Deserialize(serialized); + + Assert.Equal(2, restored.Count); + var segments = GetSegments(restored); + Assert.Equal(CacheSegmentKind.Html, segments[0].Kind); + Assert.Equal("more
", segments[1].Html); + } + + [Fact] + public void SerializeDeserialize_MixedSegments() + { + var original = new CacheBoundaryJson(); + original.AddHtml("@Guid.NewGuid()
+@Guid.NewGuid()
+@Guid.NewGuid()
+@Guid.NewGuid()
+@Guid.NewGuid()
+@Guid.NewGuid()
+@Message
+@Guid.NewGuid()
+@Guid.NewGuid()
+@Guid.NewGuid()
+ +@code +{ + private static int _renderCount; + + public static int RenderCount => _renderCount; + + public static void ResetRenderCount() => Interlocked.Exchange(ref _renderCount, 0); + + protected override void OnInitialized() + { + Interlocked.Increment(ref _renderCount); + } +}