@@ -12,23 +12,37 @@ import { spy } from "sinon";
12
12
import { CSSTransitionProps } from "./csstransition" ;
13
13
import { transit } from "./transit" ;
14
14
import {
15
- reduce , StateID , StateIDList , ActionID , CSSTransitionState ,
16
- initDefaultState , initActiveState ,
15
+ getAppearStyle , reduce , StateID , StateIDList , ActionID , CSSTransitionState ,
16
+ defaultInitState , activeInitState , appearInitState ,
17
17
defaultState , activeState ,
18
- enterPendingState , leavePendingState ,
19
- enterTriggeredState , leaveTriggeredState ,
20
- enterStartedState , leaveStartedState ,
18
+ appearPendingState , enterPendingState , leavePendingState ,
19
+ appearTriggeredState , enterTriggeredState , leaveTriggeredState ,
20
+ appearStartedState , enterStartedState , leaveStartedState ,
21
21
} from "./csstransitionstate" ;
22
22
23
23
describe ( "csstransitionstate.ts" , ( ) => {
24
+ describe ( "getAppearStyle()" , ( ) => {
25
+ it ( "should return appearStyle" , ( ) => {
26
+ const props : any = { appearStyle : { } } ;
27
+ assert . strictEqual ( getAppearStyle ( props ) , props . appearStyle ) ;
28
+ } ) ;
29
+ it ( "should fallback to enterStyle" , ( ) => {
30
+ const props : any = { enterStyle : { } } ;
31
+ assert . strictEqual ( getAppearStyle ( props ) , props . enterStyle ) ;
32
+ } ) ;
33
+ } ) ;
24
34
describe ( "states" , ( ) => {
25
35
describe (
26
- "initDefaultState" ,
27
- testState ( StateID . DefaultInit , "defaultStyle" , ( props ) => initDefaultState ( props ) ) ,
36
+ "defaultInitState" ,
37
+ testState ( StateID . DefaultInit , "defaultStyle" , ( props ) => defaultInitState ( props ) ) ,
38
+ ) ;
39
+ describe (
40
+ "activeInitState" ,
41
+ testState ( StateID . ActiveInit , "activeStyle" , ( props ) => activeInitState ( props ) ) ,
28
42
) ;
29
43
describe (
30
- "initActiveState " ,
31
- testState ( StateID . ActiveInit , "activeStyle " , ( props ) => initActiveState ( props ) ) ,
44
+ "appearInitState " ,
45
+ testState ( StateID . AppearInit , "appearStyle " , ( props ) => appearInitState ( props ) ) ,
32
46
) ;
33
47
describe (
34
48
"defaultState" ,
@@ -38,6 +52,10 @@ describe("csstransitionstate.ts", () => {
38
52
"activeState" ,
39
53
testState ( StateID . Active , "activeStyle" , ( props ) => activeState ( props ) ) ,
40
54
) ;
55
+ describe (
56
+ "appearPendingState" ,
57
+ testState ( StateID . AppearPending , "defaultStyle" , ( props ) => appearPendingState ( props ) ) ,
58
+ ) ;
41
59
describe (
42
60
"enterPendingState" ,
43
61
testState ( StateID . EnterPending , "defaultStyle" , ( props ) => enterPendingState ( props ) ) ,
@@ -46,6 +64,10 @@ describe("csstransitionstate.ts", () => {
46
64
"leavePendingState" ,
47
65
testState ( StateID . LeavePending , "activeStyle" , ( props ) => leavePendingState ( props ) ) ,
48
66
) ;
67
+ describe (
68
+ "appearTriggeredState" ,
69
+ testState ( StateID . AppearTriggered , "appearStyle" , ( props ) => appearTriggeredState ( props ) ) ,
70
+ ) ;
49
71
describe (
50
72
"enterTriggeredState" ,
51
73
testState ( StateID . EnterTriggered , "enterStyle" , ( props ) => enterTriggeredState ( props ) ) ,
@@ -54,6 +76,10 @@ describe("csstransitionstate.ts", () => {
54
76
"leaveTriggeredState" ,
55
77
testState ( StateID . LeaveTriggered , "leaveStyle" , ( props ) => leaveTriggeredState ( props ) ) ,
56
78
) ;
79
+ describe (
80
+ "appearStartedState" ,
81
+ testState ( StateID . AppearStarted , "appearStyle" , ( props ) => appearStartedState ( props ) ) ,
82
+ ) ;
57
83
describe (
58
84
"enterStartedState" ,
59
85
testState ( StateID . EnterStarted , "enterStyle" , ( props ) => enterStartedState ( props ) ) ,
@@ -71,7 +97,7 @@ describe("csstransitionstate.ts", () => {
71
97
assert . throw ( ( ) => reduce ( { } , actionID , { } ) ) ;
72
98
} ) ;
73
99
it ( "should become DefaultInit" , ( ) => {
74
- const { state, pending} = reduce ( undefined , actionID , { } ) ;
100
+ const { state, pending} = reduce ( undefined , actionID , { active : false } ) ;
75
101
assert . isUndefined ( pending ) ;
76
102
assert . strictEqual ( state . id , StateID . DefaultInit ) ;
77
103
} ) ;
@@ -80,52 +106,73 @@ describe("csstransitionstate.ts", () => {
80
106
assert . isUndefined ( pending ) ;
81
107
assert . strictEqual ( state . id , StateID . ActiveInit ) ;
82
108
} ) ;
109
+ it ( "should become AppearInit" , ( ) => {
110
+ const { state, pending} = reduce ( undefined , actionID , { active : true , transitionAppear : true } ) ;
111
+ assert . isUndefined ( pending ) ;
112
+ assert . strictEqual ( state . id , StateID . AppearInit ) ;
113
+ } ) ;
83
114
} ) ;
84
115
describe ( "TransitionInit" , ( ) => {
85
116
const actionID = ActionID . TransitionInit ;
117
+ const validOrigin = [
118
+ StateID . Active , StateID . ActiveInit , StateID . Default , StateID . DefaultInit , StateID . AppearInit ,
119
+ ] ;
86
120
87
121
it ( "should fail on invalid state transitions" , ( ) => {
88
122
StateIDList
89
- . filter ( ( id ) => [ StateID . Active , StateID . ActiveInit , StateID . Default , StateID . DefaultInit ] . indexOf ( id ) < 0 )
123
+ . filter ( ( id ) => validOrigin . indexOf ( id ) < 0 )
90
124
. forEach ( ( id ) => assert . throw ( ( ) => reduce ( { id } , actionID , { } ) ) ) ;
91
125
} ) ;
92
- it ( "should transit to active pending transition state" , ( ) => {
126
+ it ( "should transit to enter pending state" , ( ) => {
93
127
[ StateID . Default , StateID . DefaultInit ] . forEach ( ( id ) => {
94
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
128
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
95
129
assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
96
130
assert . strictEqual ( state . id , StateID . EnterPending ) ;
97
131
} ) ;
98
132
} ) ;
99
- it ( "should transit to default pending transition state" , ( ) => {
133
+ it ( "should transit to leave pending state" , ( ) => {
100
134
[ StateID . Active , StateID . ActiveInit ] . forEach ( ( id ) => {
101
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
135
+ const { state, pending} = reduce ( { id } , actionID , { active : false } ) ;
102
136
assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
103
137
assert . strictEqual ( state . id , StateID . LeavePending ) ;
104
138
} ) ;
105
139
} ) ;
140
+ it ( "should transit to appear pending state" , ( ) => {
141
+ const id = StateID . AppearInit ;
142
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
143
+ assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
144
+ assert . strictEqual ( state . id , StateID . AppearPending ) ;
145
+ } ) ;
106
146
} ) ;
107
147
describe ( "TransitionStart" , ( ) => {
108
148
const actionID = ActionID . TransitionStart ;
109
149
110
150
it ( "should not fail on invalid state transitions" , ( ) => {
111
151
StateIDList
112
- . filter ( ( id ) => [ StateID . EnterTriggered , StateID . LeaveTriggered ] . indexOf ( id ) < 0 )
152
+ . filter ( ( id ) => [ StateID . EnterTriggered , StateID . LeaveTriggered , StateID . AppearTriggered ] . indexOf ( id ) < 0 )
113
153
. forEach ( ( id ) => assert . isNull ( reduce ( { id } , actionID , { } ) ) ) ;
114
154
} ) ;
115
- it ( "should transit to active started transition state" , ( ) => {
116
- const { state, pending} = reduce ( { id : StateID . EnterTriggered } , actionID , { } ) ;
155
+ it ( "should transit to enter started state" , ( ) => {
156
+ const { state, pending} = reduce ( { id : StateID . EnterTriggered } , actionID , { active : true } ) ;
117
157
assert . isUndefined ( pending ) ;
118
158
assert . strictEqual ( state . id , StateID . EnterStarted ) ;
119
159
} ) ;
120
- it ( "should transit to active started transition state" , ( ) => {
121
- const { state, pending} = reduce ( { id : StateID . LeaveTriggered } , actionID , { } ) ;
160
+ it ( "should transit to leave started state" , ( ) => {
161
+ const { state, pending} = reduce ( { id : StateID . LeaveTriggered } , actionID , { active : false } ) ;
122
162
assert . isUndefined ( pending ) ;
123
163
assert . strictEqual ( state . id , StateID . LeaveStarted ) ;
124
164
} ) ;
165
+ it ( "should transit to appear started state" , ( ) => {
166
+ const { state, pending} =
167
+ reduce ( { id : StateID . AppearTriggered } , actionID , { active : true } ) ;
168
+ assert . isUndefined ( pending ) ;
169
+ assert . strictEqual ( state . id , StateID . AppearStarted ) ;
170
+ } ) ;
125
171
} ) ;
126
172
describe ( "TransitionComplete" , ( ) => {
127
173
const actionID = ActionID . TransitionComplete ;
128
174
const validOrigin = [
175
+ StateID . AppearTriggered , StateID . AppearStarted ,
129
176
StateID . EnterTriggered , StateID . EnterStarted ,
130
177
StateID . LeaveTriggered , StateID . LeaveStarted ,
131
178
] ;
@@ -136,15 +183,19 @@ describe("csstransitionstate.ts", () => {
136
183
. forEach ( ( id ) => assert . throw ( ( ) => reduce ( { id } , actionID , { } ) ) ) ;
137
184
} ) ;
138
185
it ( "should transit to active state" , ( ) => {
139
- [ StateID . EnterTriggered , StateID . EnterStarted ] . forEach ( ( id ) => {
140
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
186
+ const origin = [
187
+ StateID . AppearTriggered , StateID . AppearStarted ,
188
+ StateID . EnterTriggered , StateID . EnterStarted ,
189
+ ] ;
190
+ origin . forEach ( ( id ) => {
191
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
141
192
assert . isUndefined ( pending ) ;
142
193
assert . strictEqual ( state . id , StateID . Active ) ;
143
194
} ) ;
144
195
} ) ;
145
196
it ( "should transit to default state" , ( ) => {
146
197
[ StateID . LeaveTriggered , StateID . LeaveStarted ] . forEach ( ( id ) => {
147
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
198
+ const { state, pending} = reduce ( { id } , actionID , { active : false } ) ;
148
199
assert . isUndefined ( pending ) ;
149
200
assert . strictEqual ( state . id , StateID . Default ) ;
150
201
} ) ;
@@ -160,33 +211,45 @@ describe("csstransitionstate.ts", () => {
160
211
describe ( "TransitionTrigger" , ( ) => {
161
212
const actionID = ActionID . TransitionTrigger ;
162
213
163
- it ( "should transit to active pending transition state" , ( ) => {
214
+ it ( "should transit to enter pending state" , ( ) => {
164
215
[ StateID . Default , StateID . DefaultInit ] . forEach ( ( id ) => {
165
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
216
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
166
217
assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
167
218
assert . strictEqual ( state . id , StateID . EnterPending ) ;
168
219
} ) ;
169
220
} ) ;
170
- it ( "should transit to default pending transition state" , ( ) => {
221
+ it ( "should transit to leave pending state" , ( ) => {
171
222
[ StateID . Active , StateID . ActiveInit ] . forEach ( ( id ) => {
172
- const { state, pending} = reduce ( { id } , actionID , { } ) ;
223
+ const { state, pending} = reduce ( { id } , actionID , { active : false } ) ;
173
224
assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
174
225
assert . strictEqual ( state . id , StateID . LeavePending ) ;
175
226
} ) ;
176
227
} ) ;
177
- it ( "should transit to active triggered state" , ( ) => {
228
+ it ( "should transit to appear pending state" , ( ) => {
229
+ const id = StateID . AppearInit ;
230
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
231
+ assert . strictEqual ( pending , ActionID . TransitionTrigger ) ;
232
+ assert . strictEqual ( state . id , StateID . AppearPending ) ;
233
+ } ) ;
234
+ it ( "should transit to enter triggered state" , ( ) => {
178
235
const id = StateID . EnterPending ;
179
236
const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
180
237
assert . isUndefined ( pending ) ;
181
238
assert . strictEqual ( state . id , StateID . EnterTriggered ) ;
182
239
} ) ;
183
- it ( "should transit to default triggered transition state" , ( ) => {
240
+ it ( "should transit to leave triggered state" , ( ) => {
184
241
const id = StateID . LeavePending ;
185
242
const { state, pending} = reduce ( { id } , actionID , { active : false } ) ;
186
243
assert . isUndefined ( pending ) ;
187
244
assert . strictEqual ( state . id , StateID . LeaveTriggered ) ;
188
245
} ) ;
189
- it ( "should interrupt pending and triggered active transition" , ( ) => {
246
+ it ( "should transit to appear triggered state" , ( ) => {
247
+ const id = StateID . AppearPending ;
248
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
249
+ assert . isUndefined ( pending ) ;
250
+ assert . strictEqual ( state . id , StateID . AppearTriggered ) ;
251
+ } ) ;
252
+ it ( "should interrupt enter pending and triggered" , ( ) => {
190
253
[ StateID . EnterPending , StateID . EnterTriggered ] . forEach ( ( id ) => {
191
254
const props = { active : false , onTransitionComplete : spy ( ) } ;
192
255
const { state, pending} = reduce ( { id } , actionID , props ) ;
@@ -195,7 +258,7 @@ describe("csstransitionstate.ts", () => {
195
258
assert . isTrue ( props . onTransitionComplete . calledOnce ) ;
196
259
} ) ;
197
260
} ) ;
198
- it ( "should interrupt pending and triggered default transition " , ( ) => {
261
+ it ( "should interrupt leave pending and triggered" , ( ) => {
199
262
[ StateID . LeavePending , StateID . LeaveTriggered ] . forEach ( ( id ) => {
200
263
const props = { active : true , onTransitionComplete : spy ( ) } ;
201
264
const { state, pending} = reduce ( { id } , actionID , props ) ;
@@ -204,18 +267,33 @@ describe("csstransitionstate.ts", () => {
204
267
assert . isTrue ( props . onTransitionComplete . calledOnce ) ;
205
268
} ) ;
206
269
} ) ;
207
- it ( "should interrupt started active transition" , ( ) => {
270
+ it ( "should interrupt appear pending and triggered" , ( ) => {
271
+ [ StateID . AppearPending , StateID . AppearTriggered ] . forEach ( ( id ) => {
272
+ const props = { active : false , onTransitionComplete : spy ( ) } ;
273
+ const { state, pending} = reduce ( { id } , actionID , props ) ;
274
+ assert . isUndefined ( pending ) ;
275
+ assert . strictEqual ( state . id , StateID . Default ) ;
276
+ assert . isTrue ( props . onTransitionComplete . calledOnce ) ;
277
+ } ) ;
278
+ } ) ;
279
+ it ( "should interrupt enter started" , ( ) => {
208
280
const id = StateID . EnterStarted ;
209
281
const { state, pending} = reduce ( { id } , actionID , { active : false } ) ;
210
282
assert . isUndefined ( pending ) ;
211
283
assert . strictEqual ( state . id , StateID . LeaveTriggered ) ;
212
284
} ) ;
213
- it ( "should interrupt started default transition " , ( ) => {
285
+ it ( "should interrupt leave started " , ( ) => {
214
286
const id = StateID . LeaveStarted ;
215
287
const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
216
288
assert . isUndefined ( pending ) ;
217
289
assert . strictEqual ( state . id , StateID . EnterTriggered ) ;
218
290
} ) ;
291
+ it ( "should interrupt appear started" , ( ) => {
292
+ const id = StateID . AppearStarted ;
293
+ const { state, pending} = reduce ( { id } , actionID , { active : true } ) ;
294
+ assert . isUndefined ( pending ) ;
295
+ assert . strictEqual ( state . id , StateID . LeaveTriggered ) ;
296
+ } ) ;
219
297
} ) ;
220
298
} ) ;
221
299
} ) ;
0 commit comments