use reovim_kernel::api::v1::*;
#[test]
fn api_boundary_enforced() {
let version: Version = API_VERSION;
assert_eq!(version.major, 0);
}
#[test]
fn module_types_accessible() {
let id = ModuleId::new("test-module");
assert_eq!(id.as_str(), "test-module");
}
#[test]
fn mode_types_accessible() {
let module = ModuleId::new("test");
let mode_id = ModeId::new(module.clone(), "normal");
let cmd_id = CommandId::new(module, "test-cmd");
assert_eq!(mode_id.name(), "normal");
assert_eq!(cmd_id.name(), "test-cmd");
}
#[test]
fn mode_stack_accessible() {
let module = ModuleId::new("test");
let normal = ModeId::new(module.clone(), "normal");
let insert = ModeId::new(module, "insert");
let mut stack = ModeStack::new(normal.clone());
assert_eq!(stack.current(), &normal);
stack.push(insert.clone());
assert_eq!(stack.current(), &insert);
stack.pop();
assert_eq!(stack.current(), &normal);
}
#[test]
fn register_bank_accessible() {
let bank = RegisterBank::new();
assert!(bank.get().text.is_empty());
}
#[test]
fn mark_bank_accessible() {
let mut bank = MarkBank::new();
bank.set_local('a', Position::new(10, 5));
assert_eq!(bank.get_local('a'), Some(Position::new(10, 5)));
}
#[test]
fn motion_engine_accessible() {
let engine = MotionEngine;
_ = engine; }
#[test]
fn text_object_engine_accessible() {
let engine = TextObjectEngine;
_ = engine; }
#[test]
fn undo_tree_accessible() {
let tree = UndoTree::new();
assert!(!tree.can_undo());
}
#[test]
fn window_id_accessible() {
let id1 = WindowId::new();
let id2 = WindowId::new();
assert_ne!(id1, id2);
}
#[test]
fn buffer_types_accessible() {
let id = BufferId::new();
let buf = Buffer::from_string("Hello\nWorld");
assert_eq!(buf.line_count(), 2);
_ = id; }
#[test]
fn event_bus_accessible() {
let _bus = EventBus::new();
}
#[test]
fn sync_primitives_accessible() {
use std::sync::Arc;
let value = Arc::new(RwLock::new(42));
assert_eq!(*value.read(), 42);
}
const TEST_MODULE: ModuleId = ModuleId::new("test");
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u16)]
enum TestMode {
Normal = 0,
Insert = 1,
}
impl Mode for TestMode {
fn module() -> ModuleId {
TEST_MODULE
}
fn discriminant(&self) -> u16 {
*self as u16
}
fn id(&self) -> ModeId {
let name = match self {
Self::Normal => "normal",
Self::Insert => "insert",
};
ModeId::with_discriminant(TEST_MODULE, name, self.discriminant())
}
fn display_name(&self) -> &'static str {
match self {
Self::Normal => "NORMAL",
Self::Insert => "INSERT",
}
}
fn cursor_style(&self) -> CursorStyle {
match self {
Self::Normal => CursorStyle::Block,
Self::Insert => CursorStyle::Bar,
}
}
fn accepts_char_input(&self) -> bool {
matches!(self, Self::Insert)
}
}
#[test]
fn mode_trait_accessible() {
let mode = TestMode::Normal;
assert_eq!(mode.id().name(), "normal");
assert_eq!(mode.id().module(), &TEST_MODULE);
assert_eq!(mode.discriminant(), 0);
assert_eq!(mode.cursor_style(), CursorStyle::Block);
assert!(!mode.accepts_char_input());
assert_eq!(mode.display_name(), "NORMAL");
let insert = TestMode::Insert;
assert_eq!(insert.id().name(), "insert");
assert_eq!(insert.cursor_style(), CursorStyle::Bar);
assert!(insert.accepts_char_input());
assert_eq!(insert.display_name(), "INSERT");
let mode_id: ModeId = mode.into();
assert_eq!(mode_id.name(), "normal");
}