cranpose-services 0.1.161

Multiplatform system services for Cranpose (HTTP, URI, and OS integrations)
Documentation
use std::{cell::Cell, rc::Rc};

use super::*;
use crate::captured_in_composition;

fn large_and_still() -> AccessibilityOptions {
    AccessibilityOptions {
        font_scale: 1.5,
        reduce_motion: true,
        ..AccessibilityOptions::default()
    }
}

#[test]
fn the_platform_options_report_a_change_once_and_mend_a_bad_scale() {
    set_platform_accessibility_options(AccessibilityOptions::default());
    assert!(set_platform_accessibility_options(large_and_still()));
    assert!(!set_platform_accessibility_options(large_and_still()));
    assert_eq!(platform_accessibility_options(), large_and_still());
    let bad_scale = AccessibilityOptions {
        font_scale: 0.0,
        ..AccessibilityOptions::default()
    };
    assert!(set_platform_accessibility_options(bad_scale));
    assert_eq!(platform_accessibility_options().font_scale, 1.0);
}

#[test]
fn a_composable_reads_the_platform_options_and_a_provider_wins_over_them() {
    set_platform_accessibility_options(large_and_still());
    let seen = captured_in_composition(|| local_accessibility_options().current());
    set_platform_accessibility_options(AccessibilityOptions::default());
    assert_eq!(seen, Some(large_and_still()));

    let under_provider = captured_in_composition(|| {
        let slot = Rc::new(Cell::new(None));
        let sink = Rc::clone(&slot);
        let local = local_accessibility_options();
        ProvideAccessibilityOptions(large_and_still(), move || sink.set(Some(local.current())));
        slot.get()
    });
    assert_eq!(under_provider, Some(Some(large_and_still())));
}