use eztrans_rs::ipc_protocol::*;
use std::mem::size_of;
#[test]
fn test_message_header_size() {
assert_eq!(size_of::<MessageHeader>(), 16);
}
#[test]
fn test_initialize_response_size() {
assert_eq!(size_of::<InitializeResponse>(), 8);
}
#[test]
fn test_generic_response_size() {
assert_eq!(size_of::<GenericResponse>(), 4);
}
#[test]
fn test_initialize_request_size() {
assert_eq!(size_of::<InitializeRequest>(), 520);
}
#[test]
fn test_translate_mmnt_request_size() {
assert_eq!(size_of::<TranslateMMNTRequest>(), 4100);
}
#[test]
fn test_translate_mmnt_response_size() {
assert_eq!(size_of::<TranslateMMNTResponse>(), 4104);
}
#[test]
fn test_translate_mmntw_request_size() {
assert_eq!(size_of::<TranslateMMNTWRequest>(), 8196);
}
#[test]
fn test_translate_mmntw_response_size() {
assert_eq!(size_of::<TranslateMMNTWResponse>(), 8200);
}
#[test]
fn test_command_values() {
assert_eq!(Command::Initialize as u32, 1);
assert_eq!(Command::Terminate as u32, 2);
assert_eq!(Command::TranslateMMNT as u32, 3);
assert_eq!(Command::TranslateMMNTW as u32, 4);
assert_eq!(Command::ReloadUserDict as u32, 5);
assert_eq!(Command::SetProperty as u32, 6);
assert_eq!(Command::Shutdown as u32, 7);
assert_eq!(Command::Ping as u32, 8);
}
#[test]
fn test_status_values() {
assert_eq!(Status::Success as u32, 0);
assert_eq!(Status::Error as u32, 1);
assert_eq!(Status::NotInitialized as u32, 2);
assert_eq!(Status::InvalidParameter as u32, 3);
}
#[test]
fn test_message_header_creation() {
let header = MessageHeader {
command: Command::Ping as u32,
payload_size: 0,
request_id: 12345,
};
assert_eq!(header.command, 8);
assert_eq!(header.payload_size, 0);
assert_eq!(header.request_id, 12345);
}
#[test]
fn test_buffer_initialization() {
let mut request = TranslateMMNTRequest {
data0: 0,
text: [0; 4096],
};
let test_str = b"Hello";
request.text[..test_str.len()].copy_from_slice(test_str);
assert_eq!(&request.text[..5], b"Hello");
assert_eq!(request.text[5], 0);
}
#[test]
fn test_wide_buffer_initialization() {
let mut request = TranslateMMNTWRequest {
data0: 0,
text: [0; 4096],
};
let test_str = "테스트";
let encoded: Vec<u16> = test_str.encode_utf16().collect();
request.text[..encoded.len()].copy_from_slice(&encoded);
let decoded = String::from_utf16_lossy(&request.text[..encoded.len()]);
assert_eq!(decoded, test_str);
}
#[test]
fn test_set_property_request_size() {
assert_eq!(size_of::<SetPropertyRequest>(), 8);
}
#[test]
fn test_set_property_request_creation() {
let request = SetPropertyRequest {
property_id: 1,
value: 100,
};
assert_eq!(request.property_id, 1);
assert_eq!(request.value, 100);
}
#[test]
fn test_command_try_from_valid() {
assert_eq!(Command::try_from(1).unwrap(), Command::Initialize);
assert_eq!(Command::try_from(2).unwrap(), Command::Terminate);
assert_eq!(Command::try_from(3).unwrap(), Command::TranslateMMNT);
assert_eq!(Command::try_from(4).unwrap(), Command::TranslateMMNTW);
assert_eq!(Command::try_from(5).unwrap(), Command::ReloadUserDict);
assert_eq!(Command::try_from(6).unwrap(), Command::SetProperty);
assert_eq!(Command::try_from(7).unwrap(), Command::Shutdown);
assert_eq!(Command::try_from(8).unwrap(), Command::Ping);
}
#[test]
fn test_command_try_from_invalid() {
assert!(Command::try_from(0).is_err());
assert!(Command::try_from(9).is_err());
assert!(Command::try_from(100).is_err());
}