futures-glib 0.4.0

Spawn futures on the glib event loop
Documentation
extern crate futures_glib;

use std::thread;

use futures_glib::MainContext;

#[test]
fn smoke() {
    MainContext::default(|_| ());
}

#[test]
fn locking() {
    let cx = MainContext::new();
    let cx2 = cx.clone();
    assert!(!cx.is_owner());
    let locked = cx.try_lock().unwrap();
    assert!(!locked.pending());
    assert!(cx2.is_owner());
    thread::spawn(move || {
        assert!(!cx2.is_owner());
        assert!(cx2.try_lock().is_none());
    }).join().unwrap();
    drop(locked);
    cx.try_lock().unwrap();
    assert!(!cx.is_owner());
}

#[test]
fn wakeup() {
    let cx = MainContext::new();
    cx.wakeup();
}

#[test]
fn thread_default() {
    let cx = MainContext::new();
    {
        let _scope = cx.push_thread_default();
        MainContext::default(|cx2| {
            let locked = cx2.try_lock().unwrap();
            assert!(cx.is_owner());
            drop(locked);
        });
        assert!(cx.try_lock().is_some());
    }
    MainContext::default(|cx2| {
        let locked = cx2.try_lock().unwrap();
        assert!(!cx.is_owner());
        drop(locked);
    });
}