kbvm 0.1.5

An implementation of the XKB specification
Documentation
use crate::{
    syms,
    xkb::{Context, diagnostic::WriteToStderr},
};

#[test]
fn iter() {
    const COMPOSE: &str = r#"
        <a> <a>: x
        <a> <b>: "y"
        <a> <c>: "z" z
        <q>: q
        <q> <x>: v
        <b>: b
    "#;
    let context = Context::default();
    let mut builder = context.compose_table_builder();
    builder.buffer(COMPOSE);
    let table = builder.build(WriteToStderr).unwrap();
    let mut iter = table.iter();
    {
        let r = iter.next().unwrap();
        assert_eq!(
            r.steps().iter().map(|s| s.keysym()).collect::<Vec<_>>(),
            [syms::a, syms::a],
        );
        assert_eq!(r.string(), None);
        assert_eq!(r.keysym(), Some(syms::x));
    }
    {
        let r = iter.next().unwrap();
        assert_eq!(
            r.steps().iter().map(|s| s.keysym()).collect::<Vec<_>>(),
            [syms::a, syms::b],
        );
        assert_eq!(r.string(), Some("y"));
        assert_eq!(r.keysym(), None);
    }
    {
        let r = iter.next().unwrap();
        assert_eq!(
            r.steps().iter().map(|s| s.keysym()).collect::<Vec<_>>(),
            [syms::a, syms::c],
        );
        assert_eq!(r.string(), Some("z"));
        assert_eq!(r.keysym(), Some(syms::z));
    }
    {
        let r = iter.next().unwrap();
        assert_eq!(
            r.steps().iter().map(|s| s.keysym()).collect::<Vec<_>>(),
            [syms::b],
        );
        assert_eq!(r.string(), None);
        assert_eq!(r.keysym(), Some(syms::b));
    }
    {
        let r = iter.next().unwrap();
        assert_eq!(
            r.steps().iter().map(|s| s.keysym()).collect::<Vec<_>>(),
            [syms::q, syms::x],
        );
        assert_eq!(r.string(), None);
        assert_eq!(r.keysym(), Some(syms::v));
    }
    assert!(iter.next().is_none());
}