cranpose-services 0.1.161

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

use super::*;
use crate::run_test_composition;

const READER_ON: AccessibilityState = AccessibilityState {
    screen_reader_on: true,
};

#[test]
fn the_platform_state_reports_a_change_once() {
    set_platform_accessibility_state(AccessibilityState::default());
    assert!(set_platform_accessibility_state(READER_ON));
    assert!(!set_platform_accessibility_state(READER_ON));
    assert_eq!(platform_accessibility_state(), READER_ON);
    assert!(set_platform_accessibility_state(
        AccessibilityState::default()
    ));
}

#[test]
fn a_composable_reads_what_the_platform_reported() {
    set_platform_accessibility_state(READER_ON);
    let captured = Rc::new(RefCell::new(None));
    {
        let captured = Rc::clone(&captured);
        run_test_composition(move || {
            *captured.borrow_mut() = Some(local_accessibility_state().current());
        });
    }
    set_platform_accessibility_state(AccessibilityState::default());

    assert_eq!(*captured.borrow(), Some(READER_ON));
}

#[test]
fn a_provider_overrides_the_platform_state() {
    set_platform_accessibility_state(AccessibilityState::default());
    let local = local_accessibility_state();
    let captured = Rc::new(RefCell::new(None));
    {
        let captured = Rc::clone(&captured);
        run_test_composition(move || {
            let captured = Rc::clone(&captured);
            let local = local.clone();
            ProvideAccessibilityState(READER_ON, move || {
                *captured.borrow_mut() = Some(local.current());
            });
        });
    }

    assert_eq!(*captured.borrow(), Some(READER_ON));
}