// file: crates/ksp-app-config-desk/unit_tests/splash.rs // version: 3 #[test] fn fallback_splash_settings_are_short_and_ordered() { let settings = crate::SplashSettings::fallback(); assert_eq!(settings.minimum_ms(), 1200); assert_eq!(settings.fade_ms(), 300); assert_eq!(settings.minimum_source(), "fallback"); assert_eq!(settings.fade_source(), "fallback"); assert_eq!(settings.expected_backend_lifecycle_ms(), 1500); assert!(settings.minimum_ms() >= u64::from(settings.fade_ms())); } #[test] fn splash_order_contract_keeps_action_message_and_duration() { let order = crate::SplashOrderDto::new("fade_out", std::option::Option::Some("done"), std::option::Option::Some(300)); assert_eq!(order.action, "fade_out"); assert_eq!(order.message.as_deref(), std::option::Option::Some("done")); assert_eq!(order.duration_ms, std::option::Option::Some(300)); } #[test] fn splash_duration_parser_rejects_invalid_or_unbounded_values() { let malformed = super::parse_u64_setting("KSP_DESK_SPLASH_MINIMUM_MS", "invalid", 60_000); let oversized_minimum = super::parse_u64_setting("KSP_DESK_SPLASH_MINIMUM_MS", "60001", 60_000); let oversized_fade = super::parse_u32_setting("KSP_DESK_SPLASH_FADE_MS", "10001", 10_000); assert!(malformed.is_err()); assert!(oversized_minimum.is_err()); assert!(oversized_fade.is_err()); if let std::result::Result::Err(error) = oversized_minimum { assert!(error.context().iter().any(|field| return field.key() == "maximum_ms" && field.value() == "60000")); } if let std::result::Result::Err(error) = oversized_fade { assert!(error.context().iter().any(|field| return field.key() == "maximum_ms" && field.value() == "10000")); } }