use crate::*;
use std::collections::HashMap;
#[cfg(feature = "web-sys")]
use wasm_bindgen_test::*;
#[cfg(feature = "web-sys")]
wasm_bindgen_test_configure!(run_in_browser);
#[cfg(feature = "web-sys")]
fn mock_element() -> web_sys::Element {
let document = web_sys::window().unwrap().document().unwrap();
document.create_element("div").unwrap()
}
fn simple_animation_target() -> AnimationTarget {
let mut target = HashMap::new();
target.insert("x".to_string(), AnimationValue::Pixels(100.0));
target.insert("opacity".to_string(), AnimationValue::Number(1.0));
target
}
fn simple_transition() -> Transition {
Transition {
duration: Some(1.0),
ease: Easing::EaseInOut,
delay: Some(0.0),
repeat: RepeatConfig::Never,
stagger: None,
}
}
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_creation() {
let engine = SimplifiedAnimationEngine::new();
assert!(engine.is_available());
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_basic_animation() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle = engine.animate(&element, &target, &transition).unwrap();
assert!(handle.0 > 0);
assert!(engine.is_running(handle));
engine.stop(handle).unwrap();
assert!(!engine.is_running(handle));
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_pause_resume() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle = engine.animate(&element, &target, &transition).unwrap();
engine.pause(handle).unwrap();
assert_eq!(engine.get_state(handle).unwrap(), PlaybackState::Paused);
engine.resume(handle).unwrap();
assert_eq!(engine.get_state(handle).unwrap(), PlaybackState::Running);
engine.stop(handle).unwrap();
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_multiple_animations() {
let mut engine = SimplifiedAnimationEngine::new();
let element1 = mock_element();
let element2 = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle1 = engine.animate(&element1, &target, &transition).unwrap();
let handle2 = engine.animate(&element2, &target, &transition).unwrap();
assert!(handle1.0 != handle2.0);
assert!(engine.is_running(handle1));
assert!(engine.is_running(handle2));
engine.stop(handle1).unwrap();
assert!(!engine.is_running(handle1));
assert!(engine.is_running(handle2));
engine.stop(handle2).unwrap();
assert!(!engine.is_running(handle2));
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_error_handling() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle = engine.animate(&element, &target, &transition).unwrap();
engine.stop(handle).unwrap();
let result = engine.stop(handle);
assert!(result.is_ok() || result.is_err());
let result = engine.pause(handle);
assert!(result.is_ok() || result.is_err()); }
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_performance_metrics() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle = engine.animate(&element, &target, &transition).unwrap();
engine.stop(handle).unwrap();
let metrics = engine.get_performance_metrics();
assert!(metrics.is_some());
let metrics = metrics.unwrap();
assert!(metrics.active_animations >= 0);
assert!(metrics.average_frame_time >= 0.0);
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_spring_animation() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let mut transition = simple_transition();
transition.ease = Easing::Spring(SpringConfig {
stiffness: 100.0,
damping: 10.0,
mass: 1.0,
..Default::default()
});
let handle = engine.animate(&element, &target, &transition).unwrap();
assert!(engine.is_running(handle));
engine.stop(handle).unwrap();
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_stagger_animation() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let mut transition = simple_transition();
transition.stagger = Some(StaggerConfig {
delay: 0.1,
from: StaggerFrom::First,
});
let handle = engine.animate(&element, &target, &transition).unwrap();
assert!(engine.is_running(handle));
engine.stop(handle).unwrap();
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_cleanup() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle1 = engine.animate(&element, &target, &transition).unwrap();
let handle2 = engine.animate(&element, &target, &transition).unwrap();
engine.cleanup().unwrap();
assert!(!engine.is_running(handle1));
assert!(!engine.is_running(handle2));
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_batch_operations() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handles = vec![
engine.animate(&element, &target, &transition).unwrap(),
engine.animate(&element, &target, &transition).unwrap(),
engine.animate(&element, &target, &transition).unwrap(),
];
engine.stop_all().unwrap();
for handle in handles {
assert!(!engine.is_running(handle));
}
}
#[cfg(feature = "web-sys")]
#[cfg_attr(feature = "web-sys", wasm_bindgen_test)]
#[cfg_attr(not(feature = "web-sys"), test)]
fn test_simplified_animation_engine_global_control() {
let mut engine = SimplifiedAnimationEngine::new();
let element = mock_element();
let target = simple_animation_target();
let transition = simple_transition();
let handle = engine.animate(&element, &target, &transition).unwrap();
engine.pause_all().unwrap();
assert_eq!(engine.get_state(handle).unwrap(), PlaybackState::Paused);
engine.resume_all().unwrap();
assert_eq!(engine.get_state(handle).unwrap(), PlaybackState::Running);
engine.stop_all().unwrap();
assert!(!engine.is_running(handle));
}