4
4
using System ;
5
5
using System . Collections . Generic ;
6
6
using System . Diagnostics ;
7
- using System . Text . Encodings . Web ;
8
7
using System . Threading ;
9
8
using System . Threading . Tasks ;
10
- using Microsoft . AspNetCore . Components . Rendering ;
11
9
using Microsoft . AspNetCore . Components . Server ;
12
10
using Microsoft . AspNetCore . Components . Server . Circuits ;
13
11
using Microsoft . AspNetCore . SignalR ;
20
18
21
19
namespace Microsoft . AspNetCore . Components . Web . Rendering
22
20
{
23
- public class RemoteRendererTest : HtmlRendererTestBase
21
+ public class RemoteRendererTest
24
22
{
25
23
// Nothing should exceed the timeout in a successful run of the the tests, this is just here to catch
26
24
// failures.
27
25
private static readonly TimeSpan Timeout = Debugger . IsAttached ? System . Threading . Timeout . InfiniteTimeSpan : TimeSpan . FromSeconds ( 10 ) ;
28
26
29
- protected override HtmlRenderer GetHtmlRenderer ( IServiceProvider serviceProvider )
30
- {
31
- return GetRemoteRenderer ( serviceProvider , new CircuitClientProxy ( ) ) ;
32
- }
33
-
34
27
[ Fact ]
35
28
public void WritesAreBufferedWhenTheClientIsOffline ( )
36
29
{
37
30
// Arrange
38
31
var serviceProvider = new ServiceCollection ( ) . BuildServiceProvider ( ) ;
39
- var renderer = ( RemoteRenderer ) GetHtmlRenderer ( serviceProvider ) ;
32
+ var renderer = GetRemoteRenderer ( serviceProvider ) ;
40
33
var component = new TestComponent ( builder =>
41
34
{
42
35
builder . OpenElement ( 0 , "my element" ) ;
@@ -57,7 +50,7 @@ public void WritesAreBufferedWhenTheClientIsOffline()
57
50
public void NotAcknowledgingRenders_ProducesBatches_UpToTheLimit ( )
58
51
{
59
52
var serviceProvider = new ServiceCollection ( ) . BuildServiceProvider ( ) ;
60
- var renderer = ( RemoteRenderer ) GetHtmlRenderer ( serviceProvider ) ;
53
+ var renderer = GetRemoteRenderer ( serviceProvider ) ;
61
54
var component = new TestComponent ( builder =>
62
55
{
63
56
builder . OpenElement ( 0 , "my element" ) ;
@@ -81,7 +74,7 @@ public void NotAcknowledgingRenders_ProducesBatches_UpToTheLimit()
81
74
public async Task NoNewBatchesAreCreated_WhenThereAreNoPendingRenderRequestsFromComponents ( )
82
75
{
83
76
var serviceProvider = new ServiceCollection ( ) . BuildServiceProvider ( ) ;
84
- var renderer = ( RemoteRenderer ) GetHtmlRenderer ( serviceProvider ) ;
77
+ var renderer = GetRemoteRenderer ( serviceProvider ) ;
85
78
var component = new TestComponent ( builder =>
86
79
{
87
80
builder . OpenElement ( 0 , "my element" ) ;
@@ -107,7 +100,7 @@ public async Task NoNewBatchesAreCreated_WhenThereAreNoPendingRenderRequestsFrom
107
100
public async Task ProducesNewBatch_WhenABatchGetsAcknowledged ( )
108
101
{
109
102
var serviceProvider = new ServiceCollection ( ) . BuildServiceProvider ( ) ;
110
- var renderer = ( RemoteRenderer ) GetHtmlRenderer ( serviceProvider ) ;
103
+ var renderer = GetRemoteRenderer ( serviceProvider ) ;
111
104
var i = 0 ;
112
105
var component = new TestComponent ( builder =>
113
106
{
@@ -215,7 +208,7 @@ public async Task OnRenderCompletedAsync_DoesNotThrowWhenReceivedDuplicateAcks()
215
208
. Returns < string , object [ ] , CancellationToken > ( ( n , v , t ) => ( long ) v [ 1 ] == 2 ? firstBatchTCS . Task : secondBatchTCS . Task ) ;
216
209
217
210
// This produces the initial batch (id = 2)
218
- var result = await renderer . RenderComponentAsync < AutoParameterTestComponent > (
211
+ await renderer . RenderComponentAsync < AutoParameterTestComponent > (
219
212
ParameterView . FromDictionary ( new Dictionary < string , object >
220
213
{
221
214
[ nameof ( AutoParameterTestComponent . Content ) ] = initialContent ,
@@ -278,7 +271,7 @@ public async Task OnRenderCompletedAsync_DoesNotThrowWhenThereAreNoPendingBatche
278
271
. Returns < string , object [ ] , CancellationToken > ( ( n , v , t ) => ( long ) v [ 1 ] == 2 ? firstBatchTCS . Task : secondBatchTCS . Task ) ;
279
272
280
273
// This produces the initial batch (id = 2)
281
- var result = await renderer . RenderComponentAsync < AutoParameterTestComponent > (
274
+ await renderer . RenderComponentAsync < AutoParameterTestComponent > (
282
275
ParameterView . FromDictionary ( new Dictionary < string , object >
283
276
{
284
277
[ nameof ( AutoParameterTestComponent . Content ) ] = initialContent ,
@@ -341,7 +334,7 @@ public async Task ConsumesAllPendingBatchesWhenReceivingAHigherSequenceBatchId()
341
334
var trigger = new Trigger ( ) ;
342
335
343
336
// This produces the initial batch (id = 2)
344
- var result = await renderer . RenderComponentAsync < AutoParameterTestComponent > (
337
+ await renderer . RenderComponentAsync < AutoParameterTestComponent > (
345
338
ParameterView . FromDictionary ( new Dictionary < string , object >
346
339
{
347
340
[ nameof ( AutoParameterTestComponent . Content ) ] = initialContent ,
@@ -398,7 +391,7 @@ public async Task ThrowsIfWeReceivedAnAcknowledgeForANeverProducedBatch()
398
391
var trigger = new Trigger ( ) ;
399
392
400
393
// This produces the initial batch (id = 2)
401
- var result = await renderer . RenderComponentAsync < AutoParameterTestComponent > (
394
+ await renderer . RenderComponentAsync < AutoParameterTestComponent > (
402
395
ParameterView . FromDictionary ( new Dictionary < string , object >
403
396
{
404
397
[ nameof ( AutoParameterTestComponent . Content ) ] = initialContent ,
@@ -432,27 +425,7 @@ public async Task ThrowsIfWeReceivedAnAcknowledgeForANeverProducedBatch()
432
425
exception . Message ) ;
433
426
}
434
427
435
- [ Fact ]
436
- public async Task PrerendersMultipleComponentsSuccessfully ( )
437
- {
438
- // Arrange
439
- var serviceProvider = new ServiceCollection ( ) . BuildServiceProvider ( ) ;
440
-
441
- var renderer = GetRemoteRenderer (
442
- serviceProvider ,
443
- new CircuitClientProxy ( ) ) ;
444
-
445
- // Act
446
- var first = await renderer . RenderComponentAsync < TestComponent > ( ParameterView . Empty ) ;
447
- var second = await renderer . RenderComponentAsync < TestComponent > ( ParameterView . Empty ) ;
448
-
449
- // Assert
450
- Assert . Equal ( 0 , first . ComponentId ) ;
451
- Assert . Equal ( 1 , second . ComponentId ) ;
452
- Assert . Equal ( 2 , renderer . _unacknowledgedRenderBatches . Count ) ;
453
- }
454
-
455
- private RemoteRenderer GetRemoteRenderer ( IServiceProvider serviceProvider , CircuitClientProxy circuitClientProxy )
428
+ private TestRemoteRenderer GetRemoteRenderer ( IServiceProvider serviceProvider , CircuitClientProxy circuitClient = null )
456
429
{
457
430
var jsRuntime = new Mock < IJSRuntime > ( ) ;
458
431
jsRuntime . Setup ( r => r . InvokeAsync < object > (
@@ -462,16 +435,30 @@ private RemoteRenderer GetRemoteRenderer(IServiceProvider serviceProvider, Circu
462
435
It . IsAny < int > ( ) ) )
463
436
. ReturnsAsync ( Task . FromResult < object > ( null ) ) ;
464
437
465
- return new RemoteRenderer (
438
+ return new TestRemoteRenderer (
466
439
serviceProvider ,
467
440
NullLoggerFactory . Instance ,
468
441
new CircuitOptions ( ) ,
469
442
jsRuntime . Object ,
470
- circuitClientProxy ,
471
- HtmlEncoder . Default ,
443
+ circuitClient ?? new CircuitClientProxy ( ) ,
472
444
NullLogger . Instance ) ;
473
445
}
474
446
447
+ private class TestRemoteRenderer : RemoteRenderer
448
+ {
449
+ public TestRemoteRenderer ( IServiceProvider serviceProvider , ILoggerFactory loggerFactory , CircuitOptions options , IJSRuntime jsRuntime , CircuitClientProxy client , ILogger logger )
450
+ : base ( serviceProvider , loggerFactory , options , jsRuntime , client , logger )
451
+ {
452
+ }
453
+
454
+ public async Task RenderComponentAsync < TComponent > ( ParameterView initialParameters )
455
+ {
456
+ var component = InstantiateComponent ( typeof ( TComponent ) ) ;
457
+ var componentId = AssignRootComponentId ( component ) ;
458
+ await RenderRootComponentAsync ( componentId , initialParameters ) ;
459
+ }
460
+ }
461
+
475
462
private class TestComponent : IComponent , IHandleAfterRender
476
463
{
477
464
private RenderHandle _renderHandle ;
0 commit comments