use screencapturekit::cm::{CMSampleTimingInfo, CMTime};
#[test]
fn test_cmtime_creation() {
let time = CMTime::new(1, 30);
assert!(time.is_valid());
let zero = CMTime::ZERO;
assert!(zero.is_zero());
assert!(zero.is_valid());
let invalid = CMTime::INVALID;
assert!(!invalid.is_valid());
}
#[test]
fn test_cmtime_special_values() {
let pos_inf = CMTime::positive_infinity();
assert!(pos_inf.is_positive_infinity());
assert!(!pos_inf.is_negative_infinity());
assert!(!pos_inf.is_indefinite());
let neg_inf = CMTime::negative_infinity();
assert!(neg_inf.is_negative_infinity());
assert!(!neg_inf.is_positive_infinity());
let indefinite = CMTime::indefinite();
assert!(indefinite.is_indefinite());
assert!(!indefinite.is_positive_infinity());
}
#[test]
fn test_cmtime_const_functions() {
const FRAME_DURATION: CMTime = CMTime::new(1, 30);
const ZERO: CMTime = CMTime::ZERO;
const INVALID: CMTime = CMTime::INVALID;
assert!(FRAME_DURATION.is_valid());
assert!(ZERO.is_zero());
assert!(!INVALID.is_valid());
}
#[test]
fn test_cmtime_const_equality() {
const TIME1: CMTime = CMTime::new(1, 30);
const TIME2: CMTime = CMTime::new(1, 30);
const TIME3: CMTime = CMTime::new(2, 30);
assert!(TIME1.equals(&TIME2));
assert!(!TIME1.equals(&TIME3));
}
#[test]
fn test_cmtime_display() {
let time = CMTime::new(1, 30);
let display = format!("{time:?}");
assert!(!display.is_empty());
let zero = CMTime::ZERO;
let zero_display = format!("{zero:?}");
assert!(!zero_display.is_empty());
}
#[test]
fn test_cmsample_timing_info_creation() {
let timing =
CMSampleTimingInfo::with_times(CMTime::new(1, 30), CMTime::new(0, 30), CMTime::new(1, 30));
assert!(timing.has_valid_presentation_time());
assert!(timing.has_valid_decode_time());
}
#[test]
fn test_cmsample_timing_info_invalid() {
let timing = CMSampleTimingInfo::with_times(CMTime::INVALID, CMTime::INVALID, CMTime::INVALID);
assert!(!timing.has_valid_presentation_time());
assert!(!timing.has_valid_decode_time());
}
#[test]
fn test_cmsample_timing_info_display() {
let timing =
CMSampleTimingInfo::with_times(CMTime::new(1, 30), CMTime::new(0, 30), CMTime::new(1, 30));
let display = format!("{timing:?}");
assert!(!display.is_empty());
}
#[test]
fn test_cmsample_timing_default() {
let timing = CMSampleTimingInfo::with_times(CMTime::ZERO, CMTime::ZERO, CMTime::ZERO);
assert!(timing.is_valid());
}
#[test]
fn test_sample_buffer_cg_image_round_trips() {
use screencapturekit::cm::{CMSampleBuffer, CMSampleBufferExt};
use screencapturekit::cv::CVPixelBuffer;
let pb = CVPixelBuffer::create(64, 48, 0x4247_5241).expect("create BGRA pixel buffer"); let sb = CMSampleBuffer::create_for_image_buffer(&pb, CMTime::ZERO, CMTime::ZERO)
.expect("wrap in sample buffer");
let cg = sb.cg_image().expect("cg_image from sample buffer");
assert_eq!(cg.width(), 64);
assert_eq!(cg.height(), 48);
}
#[test]
fn test_sample_buffer_cg_image_returns_err_on_no_image_buffer() {
use screencapturekit::cm::{CMSampleBuffer, CMSampleBufferExt};
use screencapturekit::cv::CVPixelBuffer;
let pb = CVPixelBuffer::create(8, 8, 0x4247_5241).expect("create BGRA pixel buffer");
let sb = CMSampleBuffer::create_for_image_buffer(&pb, CMTime::ZERO, CMTime::ZERO)
.expect("wrap in sample buffer");
let cg = sb
.cg_image()
.expect("cg_image succeeds on tiny BGRA buffer");
assert_eq!(cg.width(), 8);
assert_eq!(cg.height(), 8);
}