198 lines
6.0 KiB
Rust
198 lines
6.0 KiB
Rust
use vpc_shift_tool::config::{ConfigData, ShiftModifiers, ModifiersArray};
|
|
use vpc_shift_tool::device::{SavedDevice, VpcDevice};
|
|
use vpc_shift_tool::state::State;
|
|
use std::rc::Rc;
|
|
|
|
#[test]
|
|
fn test_config_data_default() {
|
|
// Test that the default ConfigData is created correctly
|
|
let config = ConfigData::default();
|
|
|
|
// Check that sources and receivers are empty
|
|
assert_eq!(config.sources.len(), 0);
|
|
assert_eq!(config.receivers.len(), 0);
|
|
|
|
// Check that shift_modifiers has the default value (all OR)
|
|
for i in 0..8 {
|
|
assert_eq!(config.shift_modifiers[i], ShiftModifiers::OR);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_shift_modifiers_display() {
|
|
// Test the Display implementation for ShiftModifiers
|
|
assert_eq!(format!("{}", ShiftModifiers::OR), "OR");
|
|
assert_eq!(format!("{}", ShiftModifiers::AND), "AND");
|
|
assert_eq!(format!("{}", ShiftModifiers::XOR), "XOR");
|
|
}
|
|
|
|
#[test]
|
|
fn test_saved_device_default() {
|
|
// Test that the default SavedDevice is created correctly
|
|
let device = SavedDevice::default();
|
|
|
|
assert_eq!(device.vendor_id, 0);
|
|
assert_eq!(device.product_id, 0);
|
|
assert_eq!(device.serial_number, "");
|
|
assert_eq!(device.state_enabled, [true; 8]); // All bits enabled by default
|
|
}
|
|
|
|
#[test]
|
|
fn test_state_enum() {
|
|
// Test that the State enum has the expected variants
|
|
let initializing = State::Initialising;
|
|
let about = State::About;
|
|
let running = State::Running;
|
|
|
|
// Test that the variants are different
|
|
assert_ne!(initializing, about);
|
|
assert_ne!(initializing, running);
|
|
assert_ne!(about, running);
|
|
|
|
// Test equality with same variant
|
|
assert_eq!(initializing, State::Initialising);
|
|
assert_eq!(about, State::About);
|
|
assert_eq!(running, State::Running);
|
|
}
|
|
|
|
#[test]
|
|
fn test_config_with_devices() {
|
|
// Test creating a ConfigData with sources and receivers
|
|
let mut config = ConfigData::default();
|
|
|
|
// Create some test devices
|
|
let device1 = SavedDevice {
|
|
vendor_id: 0x3344,
|
|
product_id: 0x0001,
|
|
serial_number: "123456".to_string(),
|
|
state_enabled: [true, false, true, false, true, false, true, false],
|
|
};
|
|
|
|
let device2 = SavedDevice {
|
|
vendor_id: 0x3344,
|
|
product_id: 0x0002,
|
|
serial_number: "654321".to_string(),
|
|
state_enabled: [false, true, false, true, false, true, false, true],
|
|
};
|
|
|
|
// Add devices to sources and receivers
|
|
config.sources.push(device1.clone());
|
|
config.receivers.push(device2.clone());
|
|
|
|
// Check that the devices were added correctly
|
|
assert_eq!(config.sources.len(), 1);
|
|
assert_eq!(config.receivers.len(), 1);
|
|
|
|
assert_eq!(config.sources[0].vendor_id, 0x3344);
|
|
assert_eq!(config.sources[0].product_id, 0x0001);
|
|
assert_eq!(config.sources[0].serial_number, "123456");
|
|
assert_eq!(config.sources[0].state_enabled, [true, false, true, false, true, false, true, false]);
|
|
|
|
assert_eq!(config.receivers[0].vendor_id, 0x3344);
|
|
assert_eq!(config.receivers[0].product_id, 0x0002);
|
|
assert_eq!(config.receivers[0].serial_number, "654321");
|
|
assert_eq!(config.receivers[0].state_enabled, [false, true, false, true, false, true, false, true]);
|
|
}
|
|
|
|
#[test]
|
|
fn test_modifiers_array() {
|
|
// Test the ModifiersArray implementation
|
|
let mut modifiers = ModifiersArray::default();
|
|
|
|
// Check default values
|
|
for i in 0..8 {
|
|
assert_eq!(modifiers[i], ShiftModifiers::OR);
|
|
}
|
|
|
|
// Test setting values
|
|
modifiers[0] = ShiftModifiers::AND;
|
|
modifiers[4] = ShiftModifiers::XOR;
|
|
|
|
// Check the modified values
|
|
assert_eq!(modifiers[0], ShiftModifiers::AND);
|
|
assert_eq!(modifiers[4], ShiftModifiers::XOR);
|
|
|
|
// Check that other values remain unchanged
|
|
for i in 1..4 {
|
|
assert_eq!(modifiers[i], ShiftModifiers::OR);
|
|
}
|
|
for i in 5..8 {
|
|
assert_eq!(modifiers[i], ShiftModifiers::OR);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_vpc_device_default() {
|
|
// Test the default VpcDevice implementation
|
|
let device = VpcDevice::default();
|
|
|
|
assert_eq!(device.full_name, "");
|
|
assert_eq!(*device.name, "-NO CONNECTION (Select device from list)-");
|
|
assert_eq!(*device.firmware, "");
|
|
assert_eq!(device.vendor_id, 0);
|
|
assert_eq!(device.product_id, 0);
|
|
assert_eq!(device.serial_number, "");
|
|
assert_eq!(device.usage, 0);
|
|
assert_eq!(device.active, false);
|
|
}
|
|
|
|
#[test]
|
|
fn test_vpc_device_display() {
|
|
// Test the Display implementation for VpcDevice
|
|
|
|
// Test default device
|
|
let device = VpcDevice::default();
|
|
assert_eq!(format!("{}", device), "-NO CONNECTION (Select device from list)-");
|
|
|
|
// Test a real device
|
|
let device = VpcDevice {
|
|
full_name: "3344:0001:123456".to_string(),
|
|
name: Rc::new("VPC MongoosT-50CM3".to_string()),
|
|
firmware: Rc::new("VIRPIL Controls 20240101".to_string()),
|
|
vendor_id: 0x3344,
|
|
product_id: 0x0001,
|
|
serial_number: "123456".to_string(),
|
|
usage: 0,
|
|
active: false,
|
|
};
|
|
|
|
assert_eq!(
|
|
format!("{}", device),
|
|
"VID:3344 PID:0001 VPC MongoosT-50CM3 (SN:123456 FW:VIRPIL Controls 20240101)"
|
|
);
|
|
|
|
// Test a device with empty serial number
|
|
let device = VpcDevice {
|
|
full_name: "3344:0001:no_sn".to_string(),
|
|
name: Rc::new("VPC MongoosT-50CM3".to_string()),
|
|
firmware: Rc::new("VIRPIL Controls 20240101".to_string()),
|
|
vendor_id: 0x3344,
|
|
product_id: 0x0001,
|
|
serial_number: "".to_string(),
|
|
usage: 0,
|
|
active: false,
|
|
};
|
|
|
|
assert_eq!(
|
|
format!("{}", device),
|
|
"VID:3344 PID:0001 VPC MongoosT-50CM3 (SN:N/A FW:VIRPIL Controls 20240101)"
|
|
);
|
|
|
|
// Test a device with empty firmware
|
|
let device = VpcDevice {
|
|
full_name: "3344:0001:123456".to_string(),
|
|
name: Rc::new("VPC MongoosT-50CM3".to_string()),
|
|
firmware: Rc::new("".to_string()),
|
|
vendor_id: 0x3344,
|
|
product_id: 0x0001,
|
|
serial_number: "123456".to_string(),
|
|
usage: 0,
|
|
active: false,
|
|
};
|
|
|
|
assert_eq!(
|
|
format!("{}", device),
|
|
"VID:3344 PID:0001 VPC MongoosT-50CM3 (SN:123456 FW:N/A)"
|
|
);
|
|
}
|