use super::super::*;
use bacnet_objects::event_enrollment::EventEnrollmentObject;
use bacnet_objects::traits::BACnetObject;
use bacnet_types::constructed::{BACnetDeviceObjectPropertyReference, BACnetEventParameter};
#[test]
fn change_of_bitstring_normal() {
let mut db = ObjectDatabase::new();
let mut target = EventEnrollmentObject::new(50, "Target", EventType::NONE).unwrap();
target.set_event_enable(EventTransitionBits::TO_OFFNORMAL | EventTransitionBits::TO_NORMAL);
let target_oid = target.object_identifier();
db.add(Box::new(target)).unwrap();
let mut ee = EventEnrollmentObject::new(51, "EE-COBS", EventType::CHANGE_OF_BITSTRING).unwrap();
ee.set_object_property_reference(Some(BACnetDeviceObjectPropertyReference::new_local(
target_oid,
PropertyIdentifier::EVENT_ENABLE.to_raw(),
)))
.unwrap();
ee.set_event_parameters(BACnetEventParameter::ChangeOfBitstring {
time_delay: 0,
bitmask: (0, vec![0xFF]),
list_of_values: vec![(0, vec![0xE0])],
});
ee.set_event_enable(EventTransitionBits::all());
db.add(Box::new(ee)).unwrap();
let transitions = evaluate_event_enrollments(&mut db, 1);
assert!(transitions.is_empty());
}
#[test]
fn change_of_bitstring_offnormal() {
let mut db = ObjectDatabase::new();
let mut target = EventEnrollmentObject::new(60, "Target2", EventType::NONE).unwrap();
target.set_event_enable(EventTransitionBits::all());
let target_oid = target.object_identifier();
db.add(Box::new(target)).unwrap();
let mut ee =
EventEnrollmentObject::new(61, "EE-COBS2", EventType::CHANGE_OF_BITSTRING).unwrap();
ee.set_object_property_reference(Some(BACnetDeviceObjectPropertyReference::new_local(
target_oid,
PropertyIdentifier::EVENT_ENABLE.to_raw(),
)))
.unwrap();
ee.set_event_parameters(BACnetEventParameter::ChangeOfBitstring {
time_delay: 0,
bitmask: (0, vec![0xE0]),
list_of_values: vec![(0, vec![0xE0])],
});
ee.set_event_enable(EventTransitionBits::all());
db.add(Box::new(ee)).unwrap();
let transitions = evaluate_event_enrollments(&mut db, 1);
assert_eq!(transitions.len(), 1);
assert_eq!(transitions[0].change.to, EventState::OFFNORMAL);
}