use brlapi::{
BrlApiError, Connection,
parameters::{Parameter, ParameterFlags, ParameterValue, constants},
};
#[test]
fn test_parameter_system() {
match Connection::open() {
Ok(connection) => {
println!("Connection established, testing parameter system");
match connection.get_parameter::<u32>(
Parameter::ServerVersion,
0,
ParameterFlags::LOCAL,
) {
Ok(version) => {
println!("[SUCCESS] Server version parameter: {}", version);
assert!(version > 0, "Server version should be positive");
}
Err(e) => {
println!("Server version parameter failed: {} (may be expected)", e);
}
}
match connection.get_parameter::<(u32, u32)>(
Parameter::DisplaySize,
0,
ParameterFlags::LOCAL,
) {
Ok((width, height)) => {
println!("[SUCCESS] Display size parameter: {}x{}", width, height);
}
Err(e) => {
println!("Display size parameter failed: {} (may be expected)", e);
}
}
match connection.get_parameter::<String>(
Parameter::DriverName,
0,
ParameterFlags::LOCAL,
) {
Ok(driver_name) => {
println!("[SUCCESS] Driver name parameter: '{}'", driver_name);
assert!(!driver_name.is_empty(), "Driver name should not be empty");
}
Err(e) => {
println!("Driver name parameter failed: {} (may be expected)", e);
}
}
match connection.set_parameter(
Parameter::ClientPriority,
0,
ParameterFlags::LOCAL,
&constants::CLIENT_PRIORITY_DEFAULT,
) {
Ok(()) => {
println!("[SUCCESS] Client priority parameter set successfully");
match connection.get_parameter::<u32>(
Parameter::ClientPriority,
0,
ParameterFlags::LOCAL,
) {
Ok(priority) => {
println!("[SUCCESS] Client priority readback: {}", priority);
assert_eq!(priority, constants::CLIENT_PRIORITY_DEFAULT);
}
Err(e) => {
println!("Client priority readback failed: {}", e);
}
}
}
Err(e) => {
println!("Setting client priority failed: {} (may be expected)", e);
}
}
match connection.get_parameter_alloc::<String>(
Parameter::DriverName,
0,
ParameterFlags::LOCAL,
) {
Ok(driver_name) => {
println!("[SUCCESS] Driver name (alloc): '{}'", driver_name);
assert!(!driver_name.is_empty(), "Driver name should not be empty");
}
Err(e) => {
println!("Driver name (alloc) failed: {} (may be expected)", e);
}
}
match connection.get_parameter::<bool>(
Parameter::DeviceOnline,
0,
ParameterFlags::LOCAL,
) {
Ok(online) => {
println!("[SUCCESS] Device online parameter: {}", online);
}
Err(e) => {
println!("Device online parameter failed: {} (may be expected)", e);
}
}
println!("[SUCCESS] Parameter system tests completed");
}
Err(BrlApiError::ConnectionTimeout) => {
println!("BRLTTY not running - parameter tests skipped (timeout)");
println!(" Start BRLTTY to run parameter tests: sudo systemctl start brltty");
}
Err(BrlApiError::ConnectionRefused) => {
println!("BRLTTY not running - parameter tests skipped (refused)");
println!(" Start BRLTTY to run parameter tests: sudo systemctl start brltty");
}
Err(BrlApiError::LibCError) => {
println!("BRLTTY not running - parameter tests skipped (system error)");
println!(" Start BRLTTY to run parameter tests: sudo systemctl start brltty");
}
Err(e) => {
panic!("Unexpected connection error: {e}");
}
}
}
#[test]
fn test_parameter_flags_operations() {
let local = ParameterFlags::LOCAL;
let global = ParameterFlags::GLOBAL;
let self_flag = ParameterFlags::SELF;
let combined = local.with(self_flag);
assert_eq!(combined.raw(), 0x02);
let global_self = global.with(self_flag);
assert_eq!(global_self.raw(), 0x03);
let from_raw = ParameterFlags::from_raw(0x01);
assert_eq!(from_raw, global);
println!("[SUCCESS] Parameter flags operations work correctly");
}
#[test]
fn test_parameter_value_conversions() {
let value = 0x12345678u32;
let data = value
.to_parameter_data()
.expect("u32 to parameter data conversion should succeed");
let converted =
u32::from_parameter_data(&data).expect("Parameter data to u32 conversion should succeed");
assert_eq!(value, converted);
let text = "Hello, BrlAPI!";
let data = text
.to_string()
.to_parameter_data()
.expect("String to parameter data conversion should succeed");
let converted = String::from_parameter_data(&data)
.expect("Parameter data to String conversion should succeed");
assert_eq!(text, converted);
let bool_val = true;
let data = bool_val
.to_parameter_data()
.expect("bool to parameter data conversion should succeed");
let converted =
bool::from_parameter_data(&data).expect("Parameter data to bool conversion should succeed");
assert_eq!(bool_val, converted);
let size = (80u32, 25u32);
let data = size
.to_parameter_data()
.expect("Display size to parameter data conversion should succeed");
let converted = <(u32, u32)>::from_parameter_data(&data)
.expect("Parameter data to display size conversion should succeed");
assert_eq!(size, converted);
println!("[SUCCESS] Parameter value conversions work correctly");
}
#[test]
fn test_parameter_constants() {
assert_eq!(constants::CLIENT_PRIORITY_DEFAULT, 50);
assert_eq!(constants::CLIENT_PRIORITY_DISABLE, 0);
println!("[SUCCESS] Parameter constants are correct");
}