@@ -120,7 +120,7 @@ mod tests {
120120 assert_eq ! ( style_sheet. fonts( ) . unwrap( ) . len( ) , 0 ) ;
121121
122122 // 验证 keyframes
123- // assert_eq!(style_sheet.keyframes().unwrap().len(), 0);
123+ assert_eq ! ( style_sheet. keyframes( ) . unwrap( ) . len( ) , 0 ) ;
124124
125125 // 验证 medias
126126 assert_eq ! ( style_sheet. medias( ) . unwrap( ) . len( ) , 0 ) ;
@@ -202,4 +202,92 @@ mod tests {
202202 assert_eq ! ( third_pseudo_key. is_int( ) , false ) ;
203203 assert_eq ! ( sixth_style. pseudo_val( ) . unwrap( ) , "2n" ) ;
204204 }
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+ }
205293}
0 commit comments