use synta::{Decoder, Encoding, Length};
#[test]
fn test_decoder_creation() {
let data = [0x02, 0x01, 0x2A];
let decoder = Decoder::new(&data, Encoding::Der);
assert_eq!(decoder.position(), 0);
assert_eq!(decoder.remaining(), &data[..]);
}
#[test]
fn test_read_bytes() {
let data = [0x01, 0x02, 0x03, 0x04];
let mut decoder = Decoder::new(&data, Encoding::Der);
let bytes = decoder.read_bytes(2).unwrap();
assert_eq!(bytes, &[0x01, 0x02]);
assert_eq!(decoder.position(), 2);
let bytes = decoder.read_bytes(2).unwrap();
assert_eq!(bytes, &[0x03, 0x04]);
assert_eq!(decoder.position(), 4);
assert!(decoder.read_bytes(1).is_err());
}
#[test]
fn test_read_tag() {
let data = [0x02, 0x00]; let mut decoder = Decoder::new(&data, Encoding::Der);
let tag = decoder.read_tag().unwrap();
assert_eq!(tag.number(), 2);
assert_eq!(decoder.position(), 1);
}
#[test]
fn test_read_length() {
let data = [0x05];
let mut decoder = Decoder::new(&data, Encoding::Der);
let length = decoder.read_length().unwrap();
assert_eq!(length, Length::Definite(5));
let data = [0x81, 0xC8]; let mut decoder = Decoder::new(&data, Encoding::Der);
let length = decoder.read_length().unwrap();
assert_eq!(length, Length::Definite(200));
}
#[test]
fn test_indefinite_length_in_der() {
let data = [0x80]; let mut decoder = Decoder::new(&data, Encoding::Der);
assert!(decoder.read_length().is_err());
}
#[test]
fn test_peek_tag() {
let data = [0x02, 0x00];
let decoder = Decoder::new(&data, Encoding::Der);
let tag = decoder.peek_tag().unwrap();
assert_eq!(tag.number(), 2);
assert_eq!(decoder.position(), 0);
}