11import 'regenerator-runtime/runtime' ;
22import { isDone , isLoading , isReloading , LState , useLoadingSteps } from "../index" ;
33import React , { useMemo } from "react" ;
4- import { createTestComponent , noop , wait } from "../test_util" ;
4+ import { createTestComponent , neverCalled , wait } from "../test_util" ;
55
66describe ( 'no delay' , ( ) => {
77 it ( 'initial loaded = true' , async ( ) => {
@@ -37,7 +37,7 @@ describe('no delay', () => {
3737
3838 it ( 'single step' , async ( ) => {
3939 let expectedState : LState ;
40- let setStepDoneCb : ( s : string ) => void = noop ;
40+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
4141
4242 // Do before creating test component
4343 const doSteps = async ( ) => {
@@ -58,12 +58,13 @@ describe('no delay', () => {
5858 it ( 'multiple steps' , async ( ) => {
5959 const stepCnt = 3 ;
6060 let expectedState : LState ;
61- let setStepDoneCb : ( s : string ) => void = noop ;
61+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
6262
6363 // Do before creating test component
6464 const doSteps = async ( ) => {
6565 expectedState = LState . LOADING ;
6666
67+ await wait ( 10 ) ;
6768 for ( let i = 0 ; i < stepCnt ; i ++ ) {
6869 if ( i == stepCnt - 1 ) {
6970 expectedState = LState . DONE ;
@@ -80,6 +81,39 @@ describe('no delay', () => {
8081 useMemo ( ( ) => expect ( loadingState ) . toEqual ( expectedState ) , [ loadingState ] ) ;
8182 } ) ;
8283 } ) ;
84+
85+ it ( 'multiple steps: skip step' , async ( ) => {
86+ const stepCnt = 3 ;
87+ let expectedState : LState ;
88+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
89+ let skipStepCb : ( s : string ) => void = neverCalled ;
90+
91+ // Do before creating test component
92+ const doSteps = async ( ) => {
93+ expectedState = LState . LOADING ;
94+
95+ await wait ( 10 ) ;
96+ for ( let i = 0 ; i < stepCnt ; i ++ ) {
97+ if ( i == stepCnt - 1 ) {
98+ expectedState = LState . DONE ;
99+ }
100+ if ( i % 2 === 0 ) {
101+ setStepDoneCb ( `step${ i + 1 } ` ) ;
102+ } else {
103+ skipStepCb ( `step${ i + 1 } ` ) ;
104+ }
105+ await wait ( 10 ) ; // pause shortly for event loop to run component logics
106+ }
107+ }
108+ doSteps ( ) . then ( ) ;
109+
110+ await createTestComponent ( ( ) => {
111+ const [ loadingState , setStepDone , _ , skipStep ] = useLoadingSteps ( stepCnt , false ) ;
112+ setStepDoneCb = setStepDone ;
113+ skipStepCb = skipStep ;
114+ useMemo ( ( ) => expect ( loadingState ) . toEqual ( expectedState ) , [ loadingState ] ) ;
115+ } ) ;
116+ } ) ;
83117} ) ;
84118
85119describe ( 'with render delay' , ( ) => {
@@ -96,7 +130,7 @@ describe('with render delay', () => {
96130
97131 it ( 'single step' , async ( ) => {
98132 let expectedState : LState ;
99- let setStepDoneCb : ( s : string ) => void = noop ;
133+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
100134
101135 // Do before creating test component
102136 const doSteps = async ( ) => {
@@ -122,7 +156,7 @@ describe('with render delay', () => {
122156
123157 it ( 'multiple steps' , async ( ) => {
124158 let expectedState : LState ;
125- let setStepDoneCb : ( s : string ) => void = noop ;
159+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
126160
127161 // Do before creating test component
128162 const doSteps = async ( ) => {
@@ -151,7 +185,7 @@ describe('with render delay', () => {
151185
152186 it ( 'multiple steps: done before render delay timeout' , async ( ) => {
153187 let expectedState : LState ;
154- let setStepDoneCb : ( s : string ) => void = noop ;
188+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
155189
156190 // Do before creating test component
157191 const doSteps = async ( ) => {
@@ -183,8 +217,8 @@ describe('with reset delay', () => {
183217
184218 it ( 'multiple steps' , async ( ) => {
185219 let expectedState : LState ;
186- let setStepDoneCb : ( s : string ) => void = noop ;
187- let resetLoadingCb : ( ) => void = noop ;
220+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
221+ let resetLoadingCb : ( ) => void = neverCalled ;
188222
189223 // Do before creating test component
190224 const doSteps = async ( ) => {
@@ -228,8 +262,8 @@ describe('with render delay + reset delay', () => {
228262
229263 it ( 'multiple steps' , async ( ) => {
230264 let expectedState : LState ;
231- let setStepDoneCb : ( s : string ) => void = noop ;
232- let resetLoadingCb : ( ) => void = noop ;
265+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
266+ let resetLoadingCb : ( ) => void = neverCalled ;
233267
234268 // Do before creating test component
235269 const doSteps = async ( ) => {
@@ -276,7 +310,7 @@ describe('with done delay', () => {
276310
277311 it ( 'multiple steps' , async ( ) => {
278312 let expectedState : LState ;
279- let setStepDoneCb : ( s : string ) => void = noop ;
313+ let setStepDoneCb : ( s : string ) => void = neverCalled ;
280314
281315 // Do before creating test component
282316 const doSteps = async ( ) => {
0 commit comments