use synta::tag::TAG_SEQUENCE;
use synta::{Encoder, Encoding, Tag};
#[test]
fn test_encoder_creation() {
let encoder = Encoder::new(Encoding::Der);
assert!(encoder.finish().unwrap().is_empty());
}
#[test]
fn test_write_tag() {
let mut encoder = Encoder::new(Encoding::Der);
let tag = Tag::universal(2);
encoder.write_tag(tag).unwrap();
let result = encoder.finish().unwrap();
assert_eq!(result, &[0x02]);
}
#[test]
fn test_write_length() {
let mut encoder = Encoder::new(Encoding::Der);
encoder.write_length(5).unwrap();
let result = encoder.finish().unwrap();
assert_eq!(result, &[0x05]);
let mut encoder = Encoder::new(Encoding::Der);
encoder.write_length(200).unwrap();
let result = encoder.finish().unwrap();
assert_eq!(result, &[0x81, 0xC8]);
}
#[test]
fn test_constructed_backpatching() {
let mut encoder = Encoder::new(Encoding::Der);
let tag = Tag::universal_constructed(TAG_SEQUENCE);
{
let mut guard = encoder.start_constructed(tag).unwrap();
guard.write_bytes(&[0x02, 0x01, 0x2A]).unwrap();
}
let result = encoder.finish().unwrap();
assert_eq!(result, &[0x30, 0x03, 0x02, 0x01, 0x2A]);
}
#[test]
fn test_nested_constructed() {
let mut encoder = Encoder::new(Encoding::Der);
let tag = Tag::universal_constructed(TAG_SEQUENCE);
{
let mut guard = encoder.start_constructed(tag).unwrap();
guard.write_tag(tag).unwrap();
guard.write_length(3).unwrap();
guard.write_bytes(&[0x02, 0x01, 0x2A]).unwrap();
}
let result = encoder.finish().unwrap();
assert_eq!(result, &[0x30, 0x05, 0x30, 0x03, 0x02, 0x01, 0x2A]);
}