boxdd 0.6.0

Safe, ergonomic Rust bindings for Box2D v3
Documentation
use crate::World;
use crate::error::Error;

fn query_error(world: &World) -> Error {
    match world.query() {
        Ok(_) => panic!("query capability acquisition unexpectedly succeeded"),
        Err(error) => error,
    }
}

#[test]
fn query_acquisition_rejects_busy_worlds() {
    let world = crate::Foundation::initialize_default()
        .unwrap()
        .create_world(
            crate::Foundation::get()
                .expect("Foundation must be initialized before constructing a WorldDef")
                .world_def(),
        )
        .unwrap();
    let core = world.core();

    let recording = core.begin_recording_activity().unwrap();
    assert_eq!(query_error(&world), Error::WorldBusy);
    drop(recording);

    let restoring = core.begin_restore_activity().unwrap();
    assert_eq!(query_error(&world), Error::WorldBusy);
    drop(restoring);
}

#[test]
fn query_acquisition_rejects_poisoned_worlds() {
    let world = crate::Foundation::initialize_default()
        .unwrap()
        .create_world(
            crate::Foundation::get()
                .expect("Foundation must be initialized before constructing a WorldDef")
                .world_def(),
        )
        .unwrap();
    world.core().poison();
    assert_eq!(query_error(&world), Error::WorldPoisoned);
}

#[test]
fn callback_error_takes_precedence_over_world_activity() {
    let world = crate::Foundation::initialize_default()
        .unwrap()
        .create_world(
            crate::Foundation::get()
                .expect("Foundation must be initialized before constructing a WorldDef")
                .world_def(),
        )
        .unwrap();
    let core = world.core();
    let recording = core.begin_recording_activity().unwrap();

    {
        let _guard = crate::core::callback_state::CallbackGuard::enter();
        assert_eq!(query_error(&world), Error::InCallback);
    }

    drop(recording);
}