@@ -6,31 +6,36 @@ import { type Tile, useImageryProviders } from "./Imagery";
66test ( "useImageryProviders" , ( ) => {
77 const provider = vi . fn ( ( { url } : { url ?: string } = { } ) : any => ( { hoge : url } ) ) ;
88 const provider2 = vi . fn ( ( { url } : { url ?: string } = { } ) : any => ( { hoge2 : url } ) ) ;
9- const presets = { default : provider , foobar : provider2 } ;
9+ const presets = { default : provider , default_label : provider2 } ;
1010 const { result, rerender } = renderHook (
1111 ( { tiles, cesiumIonAccessToken } : { tiles : Tile [ ] ; cesiumIonAccessToken ?: string } ) =>
1212 useImageryProviders ( {
1313 tiles,
1414 presets,
1515 cesiumIonAccessToken,
1616 } ) ,
17- { initialProps : { tiles : [ { id : "1" , type : "default" } ] } } ,
17+ { initialProps : { tiles : [ { id : "1" , type : "default" } ] , cesiumIonAccessToken : undefined } } ,
1818 ) ;
1919
20+ const typedRerender = rerender as ( props : {
21+ tiles : Tile [ ] ;
22+ cesiumIonAccessToken ?: string ;
23+ } ) => void ;
24+
2025 expect ( result . current . providers ) . toEqual ( { "1" : [ "default" , undefined , { hoge : undefined } ] } ) ;
2126 expect ( result . current . updated ) . toBe ( true ) ;
2227 expect ( provider ) . toBeCalledTimes ( 1 ) ;
2328 const prevImageryProvider = result . current . providers [ "1" ] [ 2 ] ;
2429
2530 // re-render with same tiles
26- rerender ( { tiles : [ { id : "1" , type : "default" } ] } ) ;
31+ typedRerender ( { tiles : [ { id : "1" , type : "default" } ] } ) ;
2732
2833 expect ( result . current . providers ) . toEqual ( { "1" : [ "default" , undefined , { hoge : undefined } ] } ) ;
2934 expect ( result . current . providers [ "1" ] [ 2 ] ) . toBe ( prevImageryProvider ) ; // 1's provider should be reused
3035 expect ( provider ) . toBeCalledTimes ( 1 ) ;
3136
3237 // update a tile URL
33- rerender ( { tiles : [ { id : "1" , type : "default" , url : "a" } ] } ) ;
38+ typedRerender ( { tiles : [ { id : "1" , type : "default" , url : "a" } ] } ) ;
3439
3540 expect ( result . current . providers ) . toEqual ( { "1" : [ "default" , "a" , { hoge : "a" } ] } ) ;
3641 expect ( result . current . providers [ "1" ] [ 2 ] ) . not . toBe ( prevImageryProvider ) ;
@@ -40,7 +45,7 @@ test("useImageryProviders", () => {
4045 const prevImageryProvider2 = result . current . providers [ "1" ] [ 2 ] ;
4146
4247 // add a tile with URL
43- rerender ( {
48+ typedRerender ( {
4449 tiles : [
4550 { id : "2" , type : "default" } ,
4651 { id : "1" , type : "default" , url : "a" } ,
@@ -56,7 +61,7 @@ test("useImageryProviders", () => {
5661 expect ( provider ) . toBeCalledTimes ( 3 ) ;
5762
5863 // sort tiles
59- rerender ( {
64+ typedRerender ( {
6065 tiles : [
6166 { id : "1" , type : "default" , url : "a" } ,
6267 { id : "2" , type : "default" } ,
@@ -72,7 +77,7 @@ test("useImageryProviders", () => {
7277 expect ( provider ) . toBeCalledTimes ( 3 ) ;
7378
7479 // delete a tile
75- rerender ( {
80+ typedRerender ( {
7681 tiles : [ { id : "1" , type : "default" , url : "a" } ] ,
7782 cesiumIonAccessToken : "a" ,
7883 } ) ;
@@ -85,18 +90,31 @@ test("useImageryProviders", () => {
8590 expect ( provider ) . toBeCalledTimes ( 4 ) ;
8691
8792 // update a tile type
88- rerender ( {
89- tiles : [ { id : "1" , type : "foobar " , url : "u" } ] ,
93+ typedRerender ( {
94+ tiles : [ { id : "1" , type : "default_label " , url : "u" } ] ,
9095 cesiumIonAccessToken : "a" ,
9196 } ) ;
9297
9398 expect ( result . current . providers ) . toEqual ( {
94- "1" : [ "foobar " , "u" , { hoge2 : "u" } ] ,
99+ "1" : [ "default_label " , "u" , { hoge2 : "u" } ] ,
95100 } ) ;
96101 expect ( result . current . updated ) . toBe ( true ) ;
97102 expect ( provider ) . toBeCalledTimes ( 4 ) ;
98103 expect ( provider2 ) . toBeCalledTimes ( 1 ) ;
99104
100- rerender ( { tiles : [ ] } ) ;
105+ // update a tile type to unexpected type
106+ typedRerender ( {
107+ tiles : [ { id : "1" , type : "unexpected_type" , url : "u" } ] ,
108+ } ) ;
109+
110+ expect ( result . current . providers ) . toEqual ( {
111+ // unexpected type is treated as "default"
112+ "1" : [ "unexpected_type" , "u" , { hoge : "u" } ] ,
113+ } ) ;
114+ expect ( result . current . updated ) . toBe ( true ) ;
115+ expect ( provider ) . toBeCalledTimes ( 5 ) ;
116+ expect ( provider2 ) . toBeCalledTimes ( 1 ) ;
117+
118+ typedRerender ( { tiles : [ ] } ) ;
101119 expect ( result . current . providers ) . toEqual ( { } ) ;
102120} ) ;
0 commit comments