// SPDX-License-Identifier: GPL-3.0-or-later use molotov_core::graphics::c_api::*; use molotov_core::graphics::surface::GraphicsSurface; use molotov_core::graphics::types::{ANativeWindow_Buffer, ARect, WindowFormat}; use molotov_core::graphics::window::{WindowConfig, WindowManager}; use molotov_core::jni::activity::ActivityRunner; use std::sync::{Arc, Mutex}; #[test] fn test_dirty_rect_clamping_on_lock() { let surface = Arc::new(GraphicsSurface::new(800, 600, WindowFormat::Rgba8888)); let handle = register_window_surface(surface); let mut buf = std::mem::MaybeUninit::::uninit(); let mut dirty = ARect { left: -50, top: -20, right: 1500, bottom: 2000, }; unsafe { assert_eq!(ANativeWindow_lock(handle, buf.as_mut_ptr(), &mut dirty), 0); // Clamping check assert_eq!(dirty.left, 0); assert_eq!(dirty.top, 0); assert_eq!(dirty.right, 800); assert_eq!(dirty.bottom, 600); // While locked, setBuffersGeometry must return -EBUSY assert_eq!(ANativeWindow_setBuffersGeometry(handle, 1024, 768, 1), -libc::EBUSY); assert_eq!(ANativeWindow_unlockAndPost(handle), 0); ANativeWindow_release(handle); } } #[test] fn test_window_manager_syncs_with_activity_runner() { let runner = Arc::new(Mutex::new(ActivityRunner::new())); let config = WindowConfig { title: "Test".to_string(), width: 1280, height: 720, fullscreen: false, vulkan: true, }; let mut manager = WindowManager::new_with_activity(config, Some(runner.clone())); manager.handle_resize(1920, 1080); assert_eq!(manager.width(), 1920); assert_eq!(manager.height(), 1080); }