@@ -120,7 +120,7 @@ mod tests {
120
120
assert_eq ! ( style_sheet. fonts( ) . unwrap( ) . len( ) , 0 ) ;
121
121
122
122
// 验证 keyframes
123
- // assert_eq!(style_sheet.keyframes().unwrap().len(), 0);
123
+ assert_eq ! ( style_sheet. keyframes( ) . unwrap( ) . len( ) , 0 ) ;
124
124
125
125
// 验证 medias
126
126
assert_eq ! ( style_sheet. medias( ) . unwrap( ) . len( ) , 0 ) ;
@@ -202,4 +202,92 @@ mod tests {
202
202
assert_eq ! ( third_pseudo_key. is_int( ) , false ) ;
203
203
assert_eq ! ( sixth_style. pseudo_val( ) . unwrap( ) , "2n" ) ;
204
204
}
205
+
206
+ #[ test]
207
+ fn test_keyframes ( ) {
208
+ // 创建一个包含keyframes的JSON测试用例
209
+ let json_input = json ! ( {
210
+ "fonts" : [ ] ,
211
+ "keyframes" : [
212
+ { "name" : "fadeIn" , "media" : 0 , "keyframe" : [
213
+ { "percent" : 0 , "event" : [ [ 42 , 4278190080u32 ] ] } , // 开始是黑色
214
+ { "percent" : 100 , "event" : [ [ 42 , 4294967295u32 ] ] } // 结束是白色
215
+ ] } ,
216
+ { "name" : "spin" , "media" : 0 , "keyframe" : [
217
+ { "percent" : 0 , "event" : [ [ 22 , 0 ] ] } , // 旋转0度
218
+ { "percent" : 50 , "event" : [ [ 22 , 180 ] ] } , // 旋转180度
219
+ { "percent" : 100 , "event" : [ [ 22 , 360 ] ] } // 旋转360度
220
+ ] }
221
+ ] ,
222
+ "medias" : [ ] ,
223
+ "styles" : [ ]
224
+ } ) . to_string ( ) ;
225
+
226
+ let result = convert_json_to_flatbuffer ( & json_input) ;
227
+ assert ! ( result. is_ok( ) ) ;
228
+
229
+ let buffer = result. unwrap ( ) ;
230
+ let style_sheet = styles:: root_as_style_sheet ( & buffer) . unwrap ( ) ;
231
+
232
+ // 验证 keyframes
233
+ let keyframes = style_sheet. keyframes ( ) . unwrap ( ) ;
234
+ assert_eq ! ( keyframes. len( ) , 2 ) ; // 应该有两个关键帧动画
235
+
236
+ // 验证第一个keyframe
237
+ let first_keyframe = keyframes. get ( 0 ) ;
238
+ assert_eq ! ( first_keyframe. name( ) . unwrap( ) , "fadeIn" ) ;
239
+ assert_eq ! ( first_keyframe. media( ) , 0 ) ;
240
+
241
+ // 验证第一个keyframe的关键帧点
242
+ let first_keyframe_points = first_keyframe. keyframe_points ( ) . unwrap ( ) ;
243
+ assert_eq ! ( first_keyframe_points. len( ) , 2 ) ;
244
+
245
+ // 验证第一个关键帧点 (0%)
246
+ let point0 = first_keyframe_points. get ( 0 ) ;
247
+ assert_eq ! ( point0. percentage( ) , 0.0 ) ;
248
+ let declarations0 = point0. declarations ( ) . unwrap ( ) ;
249
+ assert_eq ! ( declarations0. len( ) , 1 ) ;
250
+ let decl0 = declarations0. get ( 0 ) ;
251
+ assert_eq ! ( decl0. property_id( ) , 42 ) ; // 颜色属性
252
+ assert_eq ! ( decl0. value_as_integer( ) . unwrap( ) . value( ) , 4278190080 ) ;
253
+
254
+ // 验证第二个关键帧点 (100%)
255
+ let point100 = first_keyframe_points. get ( 1 ) ;
256
+ assert_eq ! ( point100. percentage( ) , 100.0 ) ;
257
+ let declarations100 = point100. declarations ( ) . unwrap ( ) ;
258
+ assert_eq ! ( declarations100. len( ) , 1 ) ;
259
+ let decl100 = declarations100. get ( 0 ) ;
260
+ assert_eq ! ( decl100. property_id( ) , 42 ) ;
261
+ assert_eq ! ( decl100. value_as_integer( ) . unwrap( ) . value( ) , 4294967295 ) ;
262
+
263
+ // 验证第二个keyframe
264
+ let second_keyframe = keyframes. get ( 1 ) ;
265
+ assert_eq ! ( second_keyframe. name( ) . unwrap( ) , "spin" ) ;
266
+ assert_eq ! ( second_keyframe. media( ) , 0 ) ;
267
+
268
+ // 验证第二个keyframe的关键帧点
269
+ let second_keyframe_points = second_keyframe. keyframe_points ( ) . unwrap ( ) ;
270
+ assert_eq ! ( second_keyframe_points. len( ) , 3 ) ;
271
+
272
+ // 验证第一个关键帧点 (0%)
273
+ let point0 = second_keyframe_points. get ( 0 ) ;
274
+ assert_eq ! ( point0. percentage( ) , 0.0 ) ;
275
+ let declarations0 = point0. declarations ( ) . unwrap ( ) ;
276
+ assert_eq ! ( declarations0. get( 0 ) . property_id( ) , 22 ) ;
277
+ assert_eq ! ( declarations0. get( 0 ) . value_as_integer( ) . unwrap( ) . value( ) , 0 ) ;
278
+
279
+ // 验证第二个关键帧点 (50%)
280
+ let point50 = second_keyframe_points. get ( 1 ) ;
281
+ assert_eq ! ( point50. percentage( ) , 50.0 ) ;
282
+ let declarations50 = point50. declarations ( ) . unwrap ( ) ;
283
+ assert_eq ! ( declarations50. get( 0 ) . property_id( ) , 22 ) ;
284
+ assert_eq ! ( declarations50. get( 0 ) . value_as_integer( ) . unwrap( ) . value( ) , 180 ) ;
285
+
286
+ // 验证第三个关键帧点 (100%)
287
+ let point100 = second_keyframe_points. get ( 2 ) ;
288
+ assert_eq ! ( point100. percentage( ) , 100.0 ) ;
289
+ let declarations100 = point100. declarations ( ) . unwrap ( ) ;
290
+ assert_eq ! ( declarations100. get( 0 ) . property_id( ) , 22 ) ;
291
+ assert_eq ! ( declarations100. get( 0 ) . value_as_integer( ) . unwrap( ) . value( ) , 360 ) ;
292
+ }
205
293
}
0 commit comments