//! Generic and coverage tests use asn1_rs::*; use std::io; #[test] fn new_embedded_pdv() { fn create_pdv(identification: PdvIdentification) -> EmbeddedPdv { let pdv = EmbeddedPdv { identification, data_value_descriptor: None, data_value: &[0x00, 0xff], }; assert!(pdv.data_value_descriptor.is_none()); assert_eq!(pdv.data_value.len(), 2); pdv } let identification = PdvIdentification::ContextNegotiation { presentation_context_id: Integer::from(42_u8), presentation_syntax: oid! { 1.2.3.4.5 }, }; let pdv1 = create_pdv(identification); let identification = PdvIdentification::Syntaxes { s_abstract: oid! { 1.2.3 }, s_transfer: oid! { 1.2.3.4.5 }, }; let pdv2 = create_pdv(identification); assert!(pdv1 != pdv2); let identification = PdvIdentification::Syntaxes { s_abstract: oid! { 1.2.3 }, s_transfer: oid! { 1.2.3.4.5 }, }; let pdv3 = create_pdv(identification); assert!(pdv3 == pdv2); } #[test] fn methods_error() { let e = Error::invalid_value(Tag(0), "msg".to_string()); assert_eq!( e, Error::InvalidValue { tag: Tag(0), msg: "msg".to_string(), } ); // let e = Error::unexpected_tag(None, Tag(0)); assert_eq!( e, Error::UnexpectedTag { expected: None, actual: Tag(0), } ); // let e = Error::unexpected_class(None, Class::Application); assert_eq!( e, Error::UnexpectedClass { expected: None, actual: Class::Application } ); // use nom::error::ParseError; let e = Error::from_error_kind(&[], nom::error::ErrorKind::Fail); let e = >::append(&[], nom::error::ErrorKind::Eof, e); let s = format!("{}", e); assert!(s.starts_with("nom error:")); // let e1 = Error::from(nom::Err::Error(Error::BerTypeError)); let e2 = Error::from(nom::Err::Incomplete(nom::Needed::new(2))); assert!(e1 != e2); // let e = SerializeError::from(Error::BerTypeError); let s = format!("{}", e); assert!(s.starts_with("ASN.1 error:")); // let e = SerializeError::InvalidClass { class: 4 }; let s = format!("{}", e); assert!(s.starts_with("Invalid Class")); // let e = SerializeError::from(io::Error::new(io::ErrorKind::Other, "msg")); let s = format!("{}", e); assert!(s.starts_with("I/O error:")); } #[test] fn methods_tag() { let t = Tag::from(2); assert_eq!(t, Tag::Integer); // let err = t.invalid_value("test"); if let Error::InvalidValue { tag, .. } = err { assert_eq!(tag, Tag::Integer); } else { unreachable!(); } }