@@ -816,7 +816,7 @@ public void RecognizesComponentTypeChangesAtSameSequenceNumber()
816
816
using var batchBuilder = new RenderBatchBuilder ( ) ;
817
817
818
818
// Act
819
- var diff = RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , oldTree . GetFrames ( ) , newTree . GetFrames ( ) , newTree . GetNamedEvents ( ) ) ;
819
+ var diff = RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , oldTree . GetFrames ( ) , newTree . GetFrames ( ) ) ;
820
820
821
821
// Assert: We're going to dispose the old component and render the new one
822
822
Assert . Equal ( new [ ] { 0 } , batchBuilder . ComponentDisposalQueue ) ;
@@ -1627,7 +1627,7 @@ public void RetainsChildComponentsForExistingFrames()
1627
1627
1628
1628
using var batchBuilder = new RenderBatchBuilder ( ) ;
1629
1629
using var renderTreeBuilder = new RenderTreeBuilder ( ) ;
1630
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) , oldTree . GetNamedEvents ( ) ) ;
1630
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) ) ;
1631
1631
var originalFakeComponentInstance = oldTree . GetFrames ( ) . Array [ 2 ] . Component ;
1632
1632
var originalFakeComponent2Instance = oldTree . GetFrames ( ) . Array [ 3 ] . Component ;
1633
1633
@@ -1713,7 +1713,7 @@ public void SetsUpdatedParametersOnChildComponents()
1713
1713
1714
1714
using var batchBuilder = new RenderBatchBuilder ( ) ;
1715
1715
using var renderTree = new RenderTreeBuilder ( ) ;
1716
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTree . GetFrames ( ) , oldTree . GetFrames ( ) , oldTree . GetNamedEvents ( ) ) ;
1716
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTree . GetFrames ( ) , oldTree . GetFrames ( ) ) ;
1717
1717
var originalComponentInstance = ( FakeComponent ) oldTree . GetFrames ( ) . Array [ 0 ] . Component ;
1718
1718
1719
1719
// Act
@@ -1763,7 +1763,7 @@ public void SkipsUpdatingParametersOnChildComponentsIfAllAreDefinitelyImmutableA
1763
1763
1764
1764
using var batchBuilder = new RenderBatchBuilder ( ) ;
1765
1765
using var renderTreeBuilder = new RenderTreeBuilder ( ) ;
1766
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) , oldTree . GetNamedEvents ( ) ) ;
1766
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) ) ;
1767
1767
var originalComponentInstance = ( CaptureSetParametersComponent ) oldTree . GetFrames ( ) . Array [ 0 ] . Component ;
1768
1768
Assert . Equal ( 1 , originalComponentInstance . SetParametersCallCount ) ;
1769
1769
@@ -1793,7 +1793,7 @@ public void AlwaysRegardsRenderFragmentAsPossiblyChanged()
1793
1793
1794
1794
using var batchBuilder = new RenderBatchBuilder ( ) ;
1795
1795
using var renderTreeBuilder = new RenderTreeBuilder ( ) ;
1796
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) , oldTree . GetNamedEvents ( ) ) ;
1796
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTreeBuilder . GetFrames ( ) , oldTree . GetFrames ( ) ) ;
1797
1797
var componentInstance = ( CaptureSetParametersComponent ) oldTree . GetFrames ( ) . Array [ 0 ] . Component ;
1798
1798
Assert . Equal ( 1 , componentInstance . SetParametersCallCount ) ;
1799
1799
@@ -1819,13 +1819,13 @@ public void QueuesRemovedChildComponentsForDisposal()
1819
1819
1820
1820
using var batchBuilder = new RenderBatchBuilder ( ) ;
1821
1821
using var renderTree = new RenderTreeBuilder ( ) ;
1822
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTree . GetFrames ( ) , oldTree . GetFrames ( ) , oldTree . GetNamedEvents ( ) ) ;
1822
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , renderTree . GetFrames ( ) , oldTree . GetFrames ( ) ) ;
1823
1823
1824
1824
// Act/Assert
1825
1825
// Note that we track NonDisposableComponent was disposed even though it's not IDisposable,
1826
1826
// because it's up to the upstream renderer to decide what "disposing" a component means
1827
1827
Assert . Empty ( batchBuilder . ComponentDisposalQueue ) ;
1828
- RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , oldTree . GetFrames ( ) , newTree . GetFrames ( ) , newTree . GetNamedEvents ( ) ) ;
1828
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , oldTree . GetFrames ( ) , newTree . GetFrames ( ) ) ;
1829
1829
Assert . Equal ( new [ ] { 0 , 1 } , batchBuilder . ComponentDisposalQueue ) ;
1830
1830
}
1831
1831
@@ -2211,24 +2211,136 @@ public void CanChangeFrameTypeWithMatchingKey()
2211
2211
entry => AssertEdit ( entry , RenderTreeEditType . RemoveFrame , 1 ) ) ;
2212
2212
}
2213
2213
2214
+ [ Fact ]
2215
+ public void RecognizesNamedEventBeingAdded ( )
2216
+ {
2217
+ oldTree . OpenElement ( 0 , "existing" ) ;
2218
+ oldTree . AddAttribute ( 1 , "attr1" , "unrelated val1" ) ;
2219
+ oldTree . CloseElement ( ) ;
2220
+
2221
+ newTree . OpenElement ( 0 , "existing" ) ;
2222
+ newTree . AddAttribute ( 1 , "attr1" , "unrelated val1" ) ;
2223
+ newTree . AddNamedEvent ( 2 , "someevent1" , "added to existing element" ) ;
2224
+ newTree . CloseElement ( ) ;
2225
+ newTree . OpenElement ( 3 , "new element" ) ;
2226
+ newTree . AddNamedEvent ( 4 , "someevent2" , "added with new element" ) ;
2227
+ newTree . CloseElement ( ) ;
2228
+
2229
+ // Act
2230
+ var ( result , referenceFrames , batch ) = GetSingleUpdatedComponentWithBatch ( componentId : 123 ) ;
2231
+
2232
+ // Assert
2233
+ Assert . Collection ( result . Edits ,
2234
+ entry =>
2235
+ {
2236
+ AssertEdit ( entry , RenderTreeEditType . PrependFrame , 1 ) ;
2237
+ Assert . Equal ( 0 , entry . ReferenceFrameIndex ) ;
2238
+ Assert . Equal ( "new element" , referenceFrames [ entry . ReferenceFrameIndex ] . ElementName ) ;
2239
+ } ) ;
2240
+ Assert . Collection ( batch . AddedNamedEvents . Value . AsEnumerable ( ) ,
2241
+ entry => AssertNamedEvent ( entry , 123 , 2 , "someevent1" , "added to existing element" ) ,
2242
+ entry => AssertNamedEvent ( entry , 123 , 4 , "someevent2" , "added with new element" ) ) ;
2243
+ Assert . False ( batch . RemovedNamedEvents . HasValue ) ;
2244
+ }
2245
+
2246
+ [ Fact ]
2247
+ public void RecognizesNamedEventBeingRemoved ( )
2248
+ {
2249
+ oldTree . OpenElement ( 0 , "retaining" ) ;
2250
+ oldTree . AddAttribute ( 1 , "attr1" , "unrelated val1" ) ;
2251
+ oldTree . AddNamedEvent ( 2 , "someevent1" , "removing from retained element" ) ;
2252
+ oldTree . CloseElement ( ) ;
2253
+ oldTree . OpenElement ( 3 , "removing" ) ;
2254
+ oldTree . AddNamedEvent ( 4 , "someevent2" , "removed because element was removed" ) ;
2255
+ oldTree . CloseElement ( ) ;
2256
+
2257
+ newTree . OpenElement ( 0 , "retaining" ) ;
2258
+ newTree . AddAttribute ( 1 , "attr1" , "unrelated val1" ) ;
2259
+ newTree . CloseElement ( ) ;
2260
+
2261
+ // Act
2262
+ var ( result , referenceFrames , batch ) = GetSingleUpdatedComponentWithBatch ( componentId : 123 ) ;
2263
+
2264
+ // Assert
2265
+ Assert . Collection ( result . Edits ,
2266
+ entry => AssertEdit ( entry , RenderTreeEditType . RemoveFrame , 1 ) ) ;
2267
+ Assert . False ( batch . AddedNamedEvents . HasValue ) ;
2268
+ Assert . Collection ( batch . RemovedNamedEvents . Value . AsEnumerable ( ) ,
2269
+ entry => AssertNamedEvent ( entry , 123 , 2 , "someevent1" , "removing from retained element" ) ,
2270
+ entry => AssertNamedEvent ( entry , 123 , 4 , "someevent2" , "removed because element was removed" ) ) ;
2271
+ }
2272
+
2273
+ [ Fact ]
2274
+ public void RecognizesNamedEventBeingMoved ( )
2275
+ {
2276
+ oldTree . OpenElement ( 0 , "elem" ) ;
2277
+ oldTree . AddNamedEvent ( 2 , "eventname" , "assigned name" ) ;
2278
+ oldTree . CloseElement ( ) ;
2279
+
2280
+ newTree . OpenElement ( 0 , "elem" ) ;
2281
+ newTree . AddAttribute ( 1 , "attr1" , "unrelated val1" ) ;
2282
+ newTree . AddNamedEvent ( 2 , "eventname" , "assigned name" ) ;
2283
+ newTree . CloseElement ( ) ;
2284
+
2285
+ // Act
2286
+ var ( result , referenceFrames , batch ) = GetSingleUpdatedComponentWithBatch ( componentId : 123 ) ;
2287
+
2288
+ // Assert
2289
+ Assert . Collection ( result . Edits ,
2290
+ entry =>
2291
+ {
2292
+ AssertEdit ( entry , RenderTreeEditType . SetAttribute , 0 ) ;
2293
+ Assert . Equal ( 0 , entry . ReferenceFrameIndex ) ;
2294
+ Assert . Equal ( "attr1" , referenceFrames [ entry . ReferenceFrameIndex ] . AttributeName ) ;
2295
+ } ) ;
2296
+ Assert . Collection ( batch . RemovedNamedEvents . Value . AsEnumerable ( ) ,
2297
+ entry => AssertNamedEvent ( entry , 123 , 1 , "eventname" , "assigned name" ) ) ;
2298
+ Assert . Collection ( batch . AddedNamedEvents . Value . AsEnumerable ( ) ,
2299
+ entry => AssertNamedEvent ( entry , 123 , 2 , "eventname" , "assigned name" ) ) ;
2300
+ }
2301
+
2302
+ [ Fact ]
2303
+ public void RecognizesNamedEventChangingAssignedName ( )
2304
+ {
2305
+ oldTree . OpenElement ( 0 , "elem" ) ;
2306
+ oldTree . AddNamedEvent ( 1 , "eventname1" , "original name" ) ;
2307
+ oldTree . AddNamedEvent ( 2 , "eventname2" , "will be left unchanged" ) ;
2308
+ oldTree . CloseElement ( ) ;
2309
+
2310
+ newTree . OpenElement ( 0 , "elem" ) ;
2311
+ newTree . AddNamedEvent ( 1 , "eventname1" , "changed name" ) ;
2312
+ newTree . AddNamedEvent ( 2 , "eventname2" , "will be left unchanged" ) ;
2313
+ newTree . CloseElement ( ) ;
2314
+
2315
+ // Act
2316
+ var ( result , referenceFrames , batch ) = GetSingleUpdatedComponentWithBatch ( componentId : 123 ) ;
2317
+
2318
+ // Assert
2319
+ Assert . Empty ( result . Edits ) ;
2320
+ Assert . Collection ( batch . RemovedNamedEvents . Value . AsEnumerable ( ) ,
2321
+ entry => AssertNamedEvent ( entry , 123 , 1 , "eventname1" , "original name" ) ) ;
2322
+ Assert . Collection ( batch . AddedNamedEvents . Value . AsEnumerable ( ) ,
2323
+ entry => AssertNamedEvent ( entry , 123 , 1 , "eventname1" , "changed name" ) ) ;
2324
+ }
2325
+
2214
2326
private ( RenderTreeDiff , RenderTreeFrame [ ] ) GetSingleUpdatedComponent ( bool initializeFromFrames = false )
2215
2327
{
2216
2328
var result = GetSingleUpdatedComponentWithBatch ( initializeFromFrames ) ;
2217
2329
return ( result . Item1 , result . Item2 ) ;
2218
2330
}
2219
2331
2220
- private ( RenderTreeDiff , RenderTreeFrame [ ] , RenderBatch ) GetSingleUpdatedComponentWithBatch ( bool initializeFromFrames = false )
2332
+ private ( RenderTreeDiff , RenderTreeFrame [ ] , RenderBatch ) GetSingleUpdatedComponentWithBatch ( bool initializeFromFrames = false , int componentId = 0 )
2221
2333
{
2222
- var batch = GetRenderedBatch ( initializeFromFrames ) ;
2334
+ var batch = GetRenderedBatch ( initializeFromFrames , componentId ) ;
2223
2335
var diffsInBatch = batch . UpdatedComponents ;
2224
2336
Assert . Equal ( 1 , diffsInBatch . Count ) ;
2225
2337
return ( diffsInBatch . Array [ 0 ] , batch . ReferenceFrames . AsEnumerable ( ) . ToArray ( ) , batch ) ;
2226
2338
}
2227
2339
2228
- private RenderBatch GetRenderedBatch ( bool initializeFromFrames = false )
2229
- => GetRenderedBatch ( oldTree , newTree , initializeFromFrames ) ;
2340
+ private RenderBatch GetRenderedBatch ( bool initializeFromFrames = false , int componentId = 0 )
2341
+ => GetRenderedBatch ( oldTree , newTree , initializeFromFrames , componentId ) ;
2230
2342
2231
- private RenderBatch GetRenderedBatch ( RenderTreeBuilder from , RenderTreeBuilder to , bool initializeFromFrames )
2343
+ private RenderBatch GetRenderedBatch ( RenderTreeBuilder from , RenderTreeBuilder to , bool initializeFromFrames , int componentId = 0 )
2232
2344
{
2233
2345
if ( initializeFromFrames )
2234
2346
{
@@ -2238,14 +2350,14 @@ private RenderBatch GetRenderedBatch(RenderTreeBuilder from, RenderTreeBuilder t
2238
2350
var emptyFrames = renderTreeBuilder . GetFrames ( ) ;
2239
2351
var oldFrames = from . GetFrames ( ) ;
2240
2352
2241
- RenderTreeDiffBuilder . ComputeDiff ( renderer , initializeBatchBuilder , 0 , emptyFrames , oldFrames , from . GetNamedEvents ( ) ) ;
2353
+ RenderTreeDiffBuilder . ComputeDiff ( renderer , initializeBatchBuilder , 0 , emptyFrames , oldFrames ) ;
2242
2354
}
2243
2355
2244
2356
batchBuilder ? . Dispose ( ) ;
2245
2357
// This gets disposed as part of the test type's Dispose
2246
2358
batchBuilder = new RenderBatchBuilder ( ) ;
2247
2359
2248
- var diff = RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , 0 , from . GetFrames ( ) , to . GetFrames ( ) , to . GetNamedEvents ( ) ) ;
2360
+ var diff = RenderTreeDiffBuilder . ComputeDiff ( renderer , batchBuilder , componentId , from . GetFrames ( ) , to . GetFrames ( ) ) ;
2249
2361
batchBuilder . UpdatedComponentDiffs . Append ( diff ) ;
2250
2362
return batchBuilder . ToBatch ( ) ;
2251
2363
}
@@ -2373,4 +2485,17 @@ private static void AssertPermutationListEntry(
2373
2485
Assert . Equal ( fromSiblingIndex , edit . SiblingIndex ) ;
2374
2486
Assert . Equal ( toSiblingIndex , edit . MoveToSiblingIndex ) ;
2375
2487
}
2488
+
2489
+ private static void AssertNamedEvent (
2490
+ NamedEvent namedEvent ,
2491
+ int componentId ,
2492
+ int frameIndex ,
2493
+ string eventType ,
2494
+ string assignedName )
2495
+ {
2496
+ Assert . Equal ( componentId , namedEvent . ComponentId ) ;
2497
+ Assert . Equal ( frameIndex , namedEvent . FrameIndex ) ;
2498
+ Assert . Equal ( eventType , namedEvent . EventType ) ;
2499
+ Assert . Equal ( assignedName , namedEvent . AssignedName ) ;
2500
+ }
2376
2501
}
0 commit comments