use nerve_ipc::types::{MessageType, ProtocolErrorKind};
#[test]
fn ping_decodes() {
assert_eq!(MessageType::try_from(0x01), Ok(MessageType::Ping));
}
#[test]
fn search_query_decodes() {
assert_eq!(MessageType::try_from(0x02), Ok(MessageType::SearchQuery));
}
#[test]
fn search_result_decodes() {
assert_eq!(MessageType::try_from(0x03), Ok(MessageType::SearchResult));
}
#[test]
fn ai_token_decodes() {
assert_eq!(MessageType::try_from(0x04), Ok(MessageType::AiToken));
}
#[test]
fn cancel_decodes() {
assert_eq!(MessageType::try_from(0x05), Ok(MessageType::Cancel));
}
#[test]
fn agent_task_start_decodes() {
assert_eq!(MessageType::try_from(0x10), Ok(MessageType::AgentTaskStart));
}
#[test]
fn agent_task_event_decodes() {
assert_eq!(MessageType::try_from(0x11), Ok(MessageType::AgentTaskEvent));
}
#[test]
fn agent_task_done_decodes() {
assert_eq!(MessageType::try_from(0x12), Ok(MessageType::AgentTaskDone));
}
#[test]
fn unknown_type_0x00_rejected() {
assert!(MessageType::try_from(0x00).is_err());
}
#[test]
fn unknown_type_0x06_rejected() {
assert!(MessageType::try_from(0x06).is_err());
}
#[test]
fn unknown_type_0x0f_rejected() {
assert!(MessageType::try_from(0x0F).is_err());
}
#[test]
fn unknown_type_0x13_rejected() {
assert!(MessageType::try_from(0x13).is_err());
}
#[test]
fn unknown_type_0xff_rejected() {
assert!(MessageType::try_from(0xFF).is_err());
}
#[test]
fn decode_rejects_unknown_message_type() {
use nerve_ipc::codec::{decode, encode};
use nerve_ipc::types::{FrameFlags, RequestId};
let mut buf = encode(MessageType::Ping, FrameFlags::empty(), RequestId(1), &[]).unwrap();
buf[6] = 0xFF;
let err = decode(&buf).unwrap_err();
assert_eq!(err.kind(), ProtocolErrorKind::UnknownMessageType);
}