@@ -56,114 +56,13 @@ public void CachesResourcesAfterFirstLoad()
5656 Navigate ( "/" ) ;
5757 WaitUntilLoaded ( ) ;
5858 var subsequentResourcesRequested = GetAndClearRequestedPaths ( ) ;
59- Assert . DoesNotContain ( subsequentResourcesRequested , path =>
60- path . Contains ( "/dotnet.native." , StringComparison . Ordinal ) &&
61- path . EndsWith ( ".wasm" , StringComparison . Ordinal ) ) ;
62- Assert . NotEmpty ( subsequentResourcesRequested . Where ( path => path . EndsWith ( ".js" , StringComparison . Ordinal ) ) ) ;
63- Assert . DoesNotContain ( subsequentResourcesRequested , path =>
64- ! path . Contains ( "/dotnet.native." , StringComparison . Ordinal ) &&
65- path . EndsWith ( ".wasm" , StringComparison . Ordinal ) ) ;
66- }
67-
68- [ Fact ]
69- public async Task IncrementallyUpdatesCache ( )
70- {
71- // Perform a first load to populate the cache
72- Navigate ( "/" ) ;
73- WaitUntilLoaded ( ) ;
74- var cacheEntryUrls1 = GetCacheEntryUrls ( ) ;
75- var cacheEntryForComponentsDll = cacheEntryUrls1 . Single ( IsFingerprintedComponentsEntry ) ;
76- var cacheEntryForDotNetWasm = cacheEntryUrls1 . Single ( IsFingerprintedDotNetWasmEntry ) ;
77- var cacheEntryForDotNetWasmWithChangedHash = cacheEntryForDotNetWasm . Replace ( ".sha256-" , ".sha256-different" ) ;
78-
79- // Remove some items we do need, and add an item we don't need
80- RemoveCacheEntry ( cacheEntryForComponentsDll ) ;
81- RemoveCacheEntry ( cacheEntryForDotNetWasm ) ;
82- AddCacheEntry ( cacheEntryForDotNetWasmWithChangedHash , "ignored content" ) ;
83- var cacheEntryUrls2 = GetCacheEntryUrls ( ) ;
84- Assert . DoesNotContain ( cacheEntryForComponentsDll , cacheEntryUrls2 ) ;
85- Assert . DoesNotContain ( cacheEntryForDotNetWasm , cacheEntryUrls2 ) ;
86- Assert . Contains ( cacheEntryForDotNetWasmWithChangedHash , cacheEntryUrls2 ) ;
87-
88- // On the next load, we'll fetch only the items we need (not things already cached)
89- GetAndClearRequestedPaths ( ) ;
90- Navigate ( "about:blank" ) ;
91- Browser . Equal ( string . Empty , ( ) => Browser . Title ) ;
92- Navigate ( "/" ) ;
93- WaitUntilLoaded ( ) ;
94- var subsequentResourcesRequested = GetAndClearRequestedPaths ( ) ;
95- Assert . Collection ( subsequentResourcesRequested . Where ( url => url . Contains ( ".wasm" ) ) ,
96- requestedDll => Assert . True ( IsFingerprintedComponentsEntry ( requestedDll ) ) ,
97- requestedDll => Assert . True ( IsFingerprintedDotNetWasmEntry ( requestedDll ) ) ) ;
98-
99- var cacheEntryUrls3 = GetCacheEntryUrls ( ) ;
100- // wait until the cache was cleaned, max 500ms
101- for ( var i = 0 ; i < 5 ; i ++ )
102- {
103- if ( ! cacheEntryUrls3 . Contains ( cacheEntryForDotNetWasmWithChangedHash ) )
104- {
105- break ;
106- }
107- await Task . Delay ( 100 ) ; // wait for cache purge
108- cacheEntryUrls3 = GetCacheEntryUrls ( ) ;
109- }
110- Assert . Contains ( cacheEntryForComponentsDll , cacheEntryUrls3 ) ;
111- Assert . Contains ( cacheEntryForDotNetWasm , cacheEntryUrls3 ) ;
112- Assert . DoesNotContain ( cacheEntryForDotNetWasmWithChangedHash , cacheEntryUrls3 ) ;
113- }
114-
115- [ GeneratedRegex ( "/Microsoft\\ .AspNetCore\\ .Components\\ .\\ w*\\ .wasm" ) ]
116- private static partial Regex GetFingerprintedComponentsEntryRegex { get ; }
117-
118- [ GeneratedRegex ( "/dotnet\\ .native\\ .\\ w*\\ .wasm" ) ]
119- private static partial Regex GetFingerprintedDotNetWasmEntryRegex { get ; }
120-
121- private static bool IsFingerprintedComponentsEntry ( string url )
122- => GetFingerprintedComponentsEntryRegex . IsMatch ( url ) ;
123-
124- private static bool IsFingerprintedDotNetWasmEntry ( string url )
125- => GetFingerprintedDotNetWasmEntryRegex . IsMatch ( url ) ;
126-
127- private IReadOnlyCollection < string > GetCacheEntryUrls ( )
128- {
129- var js = @"
130- (async function(cacheName, completedCallback) {
131- const cache = await caches.open(cacheName);
132- const keys = await cache.keys();
133- const urls = keys.map(r => r.url);
134- completedCallback(urls);
135- }).apply(null, arguments)" ;
136- var jsExecutor = ( IJavaScriptExecutor ) Browser ;
137- var result = ( IEnumerable < object > ) jsExecutor . ExecuteAsyncScript ( js , CacheName ) ;
138- return result . Cast < string > ( ) . ToList ( ) ;
139- }
140-
141- private void RemoveCacheEntry ( string url )
142- {
143- var js = @"
144- (async function(cacheName, urlToRemove, completedCallback) {
145- const cache = await caches.open(cacheName);
146- await cache.delete(urlToRemove);
147- completedCallback();
148- }).apply(null, arguments)" ;
149- ( ( IJavaScriptExecutor ) Browser ) . ExecuteAsyncScript ( js , CacheName , url ) ;
150- }
151-
152- private void AddCacheEntry ( string url , string content )
153- {
154- var js = @"
155- (async function(cacheName, urlToAdd, contentToAdd, completedCallback) {
156- const cache = await caches.open(cacheName);
157- await cache.put(urlToAdd, new Response(contentToAdd));
158- completedCallback();
159- }).apply(null, arguments)" ;
160- ( ( IJavaScriptExecutor ) Browser ) . ExecuteAsyncScript ( js , CacheName , url , content ) ;
59+ Assert . Empty ( subsequentResourcesRequested ) ;
16160 }
16261
16362 private IReadOnlyCollection < string > GetAndClearRequestedPaths ( )
16463 {
16564 var requestLog = _serverFixture . Host . Services . GetRequiredService < BootResourceRequestLog > ( ) ;
166- var result = requestLog . RequestPaths . ToList ( ) ;
65+ var result = requestLog . RequestPathsWithNewContent . ToList ( ) ;
16766 requestLog . Clear ( ) ;
16867 return result ;
16968 }
0 commit comments