use std::collections::HashMap;
fn main() {
println!("๐งช Testing CrabCamera v0.3.0 Windows Controls");
println!("============================================");
println!("\n1. โ
Public API imports working");
println!("\n2. Testing type creation...");
let format = crabcamera::types::CameraFormat::new(640, 480, 30.0);
println!("โ
CameraFormat: {}x{} @ {}fps", format.width, format.height, format.fps);
let controls = crabcamera::types::CameraControls {
auto_focus: Some(true),
focus_distance: Some(0.5),
auto_exposure: Some(false),
exposure_time: Some(1.0/60.0),
brightness: Some(0.1),
contrast: Some(0.2),
saturation: Some(0.0),
..Default::default()
};
println!("โ
CameraControls created with {} controls set",
[controls.auto_focus, controls.auto_exposure].iter().filter(|x| x.is_some()).count() +
[controls.focus_distance, controls.exposure_time, controls.brightness, controls.contrast, controls.saturation].iter().filter(|x| x.is_some()).count()
);
let capabilities = crabcamera::types::CameraCapabilities {
supports_auto_focus: true,
supports_manual_focus: true,
supports_auto_exposure: true,
supports_manual_exposure: true,
supports_white_balance: true,
supports_zoom: false,
supports_flash: false,
supports_burst_mode: true,
supports_hdr: false,
max_resolution: (1920, 1080),
max_fps: 30.0,
exposure_range: Some((1.0/1000.0, 1.0)),
iso_range: Some((100, 6400)),
focus_range: Some((0.0, 1.0)),
};
println!("โ
CameraCapabilities: focus({}/{}), exposure({}/{}), wb({})",
capabilities.supports_auto_focus, capabilities.supports_manual_focus,
capabilities.supports_auto_exposure, capabilities.supports_manual_exposure,
capabilities.supports_white_balance
);
println!("\n3. Testing platform detection...");
let platform = crabcamera::types::Platform::current();
println!("โ
Platform detected: {:?}", platform);
println!("\n4. Testing platform module access...");
#[cfg(target_os = "windows")]
{
println!("โ
Windows platform compilation available");
match crabcamera::platform::CameraSystem::list_cameras() {
Ok(cameras) => {
println!("โ
Camera enumeration succeeded: {} cameras found", cameras.len());
for (i, camera) in cameras.iter().enumerate() {
println!(" Camera {}: {} ({})", i, camera.name, camera.id);
}
},
Err(e) => {
println!("โ ๏ธ Camera enumeration failed: {} (expected if no cameras)", e);
}
}
match crabcamera::platform::CameraSystem::initialize() {
Ok(msg) => println!("โ
Camera system init: {}", msg),
Err(e) => println!("โ ๏ธ Camera system init failed: {}", e),
}
match crabcamera::platform::CameraSystem::get_platform_info() {
Ok(info) => {
println!("โ
Platform info: {} backend", info.backend);
println!(" Features: {:?}", info.features);
},
Err(e) => println!("โ Platform info failed: {}", e),
}
}
#[cfg(not(target_os = "windows"))]
{
println!("โน๏ธ Not on Windows - skipping Windows-specific tests");
}
println!("\n5. Testing mock camera system...");
std::env::set_var("CRABCAMERA_USE_MOCK", "1");
let init_params = crabcamera::types::CameraInitParams::new("test_camera".to_string())
.with_format(format)
.with_auto_focus(true);
match crabcamera::platform::PlatformCamera::new(init_params) {
Ok(mut camera) => {
println!("โ
Mock camera created successfully");
if camera.is_available() {
println!("โ
Camera reports as available");
}
if let Some(id) = camera.get_device_id() {
println!("โ
Device ID: {}", id);
}
match camera.start_stream() {
Ok(_) => println!("โ
Stream started"),
Err(e) => println!("โ Stream start failed: {}", e),
}
match camera.capture_frame() {
Ok(frame) => {
println!("โ
Frame captured: {}x{} {} bytes",
frame.width, frame.height, frame.data.len());
},
Err(e) => println!("โ Frame capture failed: {}", e),
}
match camera.apply_controls(&controls) {
Ok(_) => println!("โ
Controls applied successfully"),
Err(e) => println!("โ Controls failed: {}", e),
}
match camera.get_controls() {
Ok(current) => println!("โ
Got current controls: auto_focus={:?}", current.auto_focus),
Err(e) => println!("โ Get controls failed: {}", e),
}
match camera.test_capabilities() {
Ok(caps) => {
println!("โ
Capabilities: focus({}/{}), exposure({}/{})",
caps.supports_auto_focus, caps.supports_manual_focus,
caps.supports_auto_exposure, caps.supports_manual_exposure);
},
Err(e) => println!("โ Capabilities test failed: {}", e),
}
match camera.stop_stream() {
Ok(_) => println!("โ
Stream stopped"),
Err(e) => println!("โ Stream stop failed: {}", e),
}
},
Err(e) => {
println!("โ Mock camera creation failed: {}", e);
}
}
println!("\n๐ฏ Test Summary:");
println!("- โ
Public API accessible and types create correctly");
println!("- โ
Platform detection working");
println!("- โ
Camera system functions callable");
println!("- โ
Mock camera system functional");
println!("- โ
v0.3.0 camera controls API available");
println!("\nโ ๏ธ Next Steps Needed:");
println!("- Test with real Windows cameras and MediaFoundation");
println!("- Verify COM interface management doesn't crash");
println!("- Test thread safety with concurrent access");
println!("- Validate control value ranges and normalization");
println!("- Test capability detection with different camera hardware");
}