@@ -3,7 +3,7 @@ import {SourceCache} from './source_cache';
3
3
import { type Map } from '../ui/map' ;
4
4
import { type Source , addSourceType } from './source' ;
5
5
import { Tile } from './tile' ;
6
- import { OverscaledTileID } from './tile_id' ;
6
+ import { CanonicalTileID , OverscaledTileID } from './tile_id' ;
7
7
import { LngLat } from '../geo/lng_lat' ;
8
8
import Point from '@mapbox/point-geometry' ;
9
9
import { Event , ErrorEvent , Evented } from '../util/evented' ;
@@ -2142,4 +2142,92 @@ describe('SourceCache#usedForTerrain', () => {
2142
2142
[ '3s44' , '3r44' , '3c44' , '3b44' ]
2143
2143
) ;
2144
2144
} ) ;
2145
+
2146
+ } ) ;
2147
+
2148
+ describe ( 'SourceCache::refreshTiles' , ( ) => {
2149
+ test ( 'calls reloadTile when tile exists' , async ( ) => {
2150
+ const coord = new OverscaledTileID ( 1 , 0 , 1 , 0 , 1 ) ;
2151
+ const sourceCache = createSourceCache ( ) ;
2152
+
2153
+ const spy = vi . fn ( ) ;
2154
+ sourceCache . _reloadTile = spy ;
2155
+ sourceCache . _source . loadTile = async ( tile ) => {
2156
+ tile . state = 'loaded' ;
2157
+ } ;
2158
+
2159
+ sourceCache . _addTile ( coord ) ;
2160
+ sourceCache . refreshTiles ( [ new CanonicalTileID ( 1 , 0 , 1 ) ] ) ;
2161
+ expect ( spy ) . toHaveBeenCalledOnce ( ) ;
2162
+ expect ( spy . mock . calls [ 0 ] [ 1 ] ) . toBe ( 'expired' ) ;
2163
+ } ) ;
2164
+
2165
+ test ( 'does not call reloadTile when tile does not exist' , async ( ) => {
2166
+ const coord = new OverscaledTileID ( 1 , 0 , 1 , 1 , 1 ) ;
2167
+ const sourceCache = createSourceCache ( ) ;
2168
+
2169
+ const spy = vi . fn ( ) ;
2170
+ sourceCache . _reloadTile = spy ;
2171
+ sourceCache . _source . loadTile = async ( tile ) => {
2172
+ tile . state = 'loaded' ;
2173
+ } ;
2174
+
2175
+ sourceCache . _addTile ( coord ) ;
2176
+ sourceCache . refreshTiles ( [ new CanonicalTileID ( 1 , 0 , 1 ) ] ) ;
2177
+ expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ;
2178
+ } ) ;
2179
+
2180
+ test ( 'calls reloadTile when wrapped tile exists' , async ( ) => {
2181
+ const coord = new OverscaledTileID ( 1 , 1 , 1 , 0 , 1 ) ;
2182
+ const sourceCache = createSourceCache ( ) ;
2183
+
2184
+ const spy = vi . fn ( ) ;
2185
+ sourceCache . _reloadTile = spy ;
2186
+ sourceCache . _source . loadTile = async ( tile ) => {
2187
+ tile . state = 'loaded' ;
2188
+ } ;
2189
+
2190
+ sourceCache . _addTile ( coord ) ;
2191
+ sourceCache . refreshTiles ( [ new CanonicalTileID ( 1 , 0 , 1 ) ] ) ;
2192
+ expect ( spy ) . toHaveBeenCalledOnce ( ) ;
2193
+ expect ( spy . mock . calls [ 0 ] [ 1 ] ) . toBe ( 'expired' ) ;
2194
+ } ) ;
2195
+
2196
+ test ( 'calls reloadTile when overscaled tile exists' , async ( ) => {
2197
+ const coord = new OverscaledTileID ( 2 , 0 , 1 , 0 , 1 ) ;
2198
+ const sourceCache = createSourceCache ( ) ;
2199
+
2200
+ const spy = vi . fn ( ) ;
2201
+ sourceCache . _reloadTile = spy ;
2202
+ sourceCache . _source . loadTile = async ( tile ) => {
2203
+ tile . state = 'loaded' ;
2204
+ } ;
2205
+
2206
+ sourceCache . _addTile ( coord ) ;
2207
+ sourceCache . refreshTiles ( [ new CanonicalTileID ( 1 , 0 , 1 ) ] ) ;
2208
+ expect ( spy ) . toHaveBeenCalledOnce ( ) ;
2209
+ expect ( spy . mock . calls [ 0 ] [ 1 ] ) . toBe ( 'expired' ) ;
2210
+ } ) ;
2211
+
2212
+ test ( 'calls reloadTile for standard, wrapped, and overscaled tiles' , async ( ) => {
2213
+ const sourceCache = createSourceCache ( ) ;
2214
+
2215
+ const spy = vi . fn ( ) ;
2216
+ sourceCache . _reloadTile = spy ;
2217
+ sourceCache . _source . loadTile = async ( tile ) => {
2218
+ tile . state = 'loaded' ;
2219
+ } ;
2220
+
2221
+ sourceCache . _addTile ( new OverscaledTileID ( 1 , 0 , 1 , 0 , 1 ) ) ;
2222
+ sourceCache . _addTile ( new OverscaledTileID ( 1 , 1 , 1 , 0 , 1 ) ) ;
2223
+ sourceCache . _addTile ( new OverscaledTileID ( 2 , 0 , 1 , 0 , 1 ) ) ;
2224
+ sourceCache . _addTile ( new OverscaledTileID ( 2 , 1 , 1 , 0 , 1 ) ) ;
2225
+ sourceCache . refreshTiles ( [ new CanonicalTileID ( 1 , 0 , 1 ) ] ) ;
2226
+ expect ( spy ) . toHaveBeenCalledTimes ( 4 ) ;
2227
+ expect ( spy . mock . calls [ 0 ] [ 1 ] ) . toBe ( 'expired' ) ;
2228
+ expect ( spy . mock . calls [ 1 ] [ 1 ] ) . toBe ( 'expired' ) ;
2229
+ expect ( spy . mock . calls [ 2 ] [ 1 ] ) . toBe ( 'expired' ) ;
2230
+ expect ( spy . mock . calls [ 3 ] [ 1 ] ) . toBe ( 'expired' ) ;
2231
+ } ) ;
2232
+
2145
2233
} ) ;
0 commit comments