neovm-core 0.0.2

Core runtime structures for NeoVM
use super::pure::{
    KEY_CHAR_CODE_MASK, KEY_CHAR_CTRL, basic_char_code, describe_single_key_value,
    event_modifier_bit, event_modifier_prefix, key_sequence_values, resolve_control_code,
    symbol_has_modifier_prefix,
};
use crate::emacs_core::value::Value;

#[test]
fn describe_int_key_succeeds() {
    crate::test_utils::init_test_tracing();
    let value = Value::fixnum(97);
    assert_eq!(describe_single_key_value(&value, false).unwrap(), "a");
}

#[test]
fn key_sequence_values_accept_string_and_list() {
    crate::test_utils::init_test_tracing();
    let string = Value::string("abc");
    let list: Value =
        crate::emacs_core::value::Value::list(vec![Value::fixnum(97), Value::fixnum(98)]);
    assert_eq!(
        key_sequence_values(&string).unwrap(),
        vec![Value::fixnum(97), Value::fixnum(98), Value::fixnum(99)]
    );
    assert_eq!(
        key_sequence_values(&list).unwrap(),
        vec![Value::fixnum(97), Value::fixnum(98)]
    );
}

#[test]
fn symbol_modifier_helpers() {
    crate::test_utils::init_test_tracing();
    assert!(symbol_has_modifier_prefix("C-x"));
    assert!(!symbol_has_modifier_prefix("foo"));
    assert_eq!(event_modifier_bit("control"), Some(KEY_CHAR_CTRL));
    assert!(event_modifier_prefix(KEY_CHAR_CTRL).starts_with("C-"));
}

#[test]
fn control_code_resolution() {
    crate::test_utils::init_test_tracing();
    assert_eq!(resolve_control_code(65), Some(1));
    assert_eq!(resolve_control_code(97), Some(1));
    assert!(resolve_control_code(999).is_none());
}

#[test]
fn basic_char_code_masks() {
    crate::test_utils::init_test_tracing();
    let bits = 0x123456;
    assert!(basic_char_code(bits) <= KEY_CHAR_CODE_MASK);
}