ddex_parser/streaming/
verification.rs1use crate::streaming::comprehensive::{ComprehensiveStreamIterator, StreamingElement};
4use ddex_core::models::versions::ERNVersion;
5use std::io::Cursor;
6
7pub fn verify_comprehensive_parser() {
8 let xml = r#"<?xml version="1.0" encoding="UTF-8"?>
9<ERNMessage xmlns="http://ddex.net/xml/ern/43">
10 <MessageHeader>
11 <MessageId>test-message-1</MessageId>
12 <MessageCreatedDateTime>2023-01-01T00:00:00</MessageCreatedDateTime>
13 </MessageHeader>
14 <Release ReleaseReference="REL001">
15 <ReleaseTitle>Test Release</ReleaseTitle>
16 <Genre>Rock</Genre>
17 </Release>
18 <Resource ResourceReference="RES001">
19 <Title>Test Resource</Title>
20 <Duration>180</Duration>
21 </Resource>
22</ERNMessage>"#;
23
24 println!("Testing comprehensive streaming parser with model alignment...");
25
26 let cursor = Cursor::new(xml.as_bytes());
27 let iterator = ComprehensiveStreamIterator::new(cursor, ERNVersion::V4_3);
28
29 let mut element_count = 0;
30 let mut header_found = false;
31 let mut release_found = false;
32 let mut resource_found = false;
33
34 for result in iterator {
35 match result {
36 Ok(element) => {
37 element_count += 1;
38 match element {
39 StreamingElement::Header(_header) => {
40 println!("✅ Parsed MessageHeader successfully");
41 header_found = true;
42 }
43 StreamingElement::Release(release) => {
44 println!("✅ Parsed Release: reference={}", release.release_reference);
45 println!(" Titles: {}", release.release_title.len());
46 println!(" Genres: {}", release.genre.len());
47 release_found = true;
48 }
49 StreamingElement::Resource(resource) => {
50 println!(
51 "✅ Parsed Resource: reference={}",
52 resource.resource_reference
53 );
54 println!(" Titles: {}", resource.reference_title.len());
55 if let Some(duration) = resource.duration {
56 println!(" Duration: {}s", duration.as_secs());
57 }
58 resource_found = true;
59 }
60 StreamingElement::Party(_party) => {
61 println!("✅ Parsed Party");
62 }
63 StreamingElement::EndOfStream => {
64 println!("✅ End of stream reached");
65 }
66 }
67 }
68 Err(e) => {
69 println!("❌ Error parsing: {:?}", e);
70 }
71 }
72 }
73
74 println!("\n=== Verification Results ===");
75 println!("Total elements parsed: {}", element_count);
76 println!("Header found: {}", header_found);
77 println!("Release found: {}", release_found);
78 println!("Resource found: {}", resource_found);
79
80 if header_found && release_found && resource_found {
81 println!("🎉 Model alignment verification PASSED!");
82 } else {
83 println!("❌ Model alignment verification FAILED!");
84 }
85}
86
87#[cfg(test)]
88mod tests {
89 use super::*;
90
91 #[test]
92 fn test_model_alignment() {
93 verify_comprehensive_parser();
94 }
95}