pub mod decoder;
pub mod encoder;
pub use decoder::{DecodeResult, QrDecoder};
pub use encoder::{QrEncoder, QrFrame};
#[cfg(test)]
mod python_equivalent_tests {
use super::*;
use crate::config::QrConfig;
#[test]
fn test_python_equivalent_qr_encode_decode() {
let encoder = QrEncoder::new(QrConfig::default());
let decoder = QrDecoder::new();
let test_data = "Test data for QR encoding and decoding round trip";
let qr_frame = encoder.encode_text(test_data).unwrap();
let decode_result = decoder.decode_image(&qr_frame.image).unwrap();
assert_eq!(decode_result.text, test_data);
}
#[test]
fn test_python_equivalent_qr_round_trip_various_sizes() {
let encoder = QrEncoder::new(QrConfig::default());
let decoder = QrDecoder::new();
let test_cases = vec![
"Short",
"Medium length test data that spans multiple words",
"This is a much longer test string that will test the QR code capabilities with more substantial content and should verify that larger amounts of data can be encoded and decoded correctly.",
];
for test_data in test_cases {
let qr_frame = encoder.encode_text(test_data).unwrap();
let decode_result = decoder.decode_image(&qr_frame.image).unwrap();
assert_eq!(decode_result.text, test_data);
}
}
#[test]
fn test_python_equivalent_qr_unicode_data() {
let encoder = QrEncoder::new(QrConfig::default());
let decoder = QrDecoder::new();
let unicode_data = "Hello 世界! 🚀 Testing Unicode: åäö, éèê, ñ, ü";
let qr_frame = encoder.encode_text(unicode_data).unwrap();
let decode_result = decoder.decode_image(&qr_frame.image).unwrap();
assert_eq!(decode_result.text, unicode_data);
}
#[test]
fn test_python_equivalent_qr_json_data() {
let encoder = QrEncoder::new(QrConfig::default());
let decoder = QrDecoder::new();
let json_data =
r#"{"id": 123, "text": "Sample chunk", "metadata": {"source": "test", "page": 1}}"#;
let qr_frame = encoder.encode_text(json_data).unwrap();
let decode_result = decoder.decode_image(&qr_frame.image).unwrap();
assert_eq!(decode_result.text, json_data);
let _: serde_json::Value = serde_json::from_str(&decode_result.text).unwrap();
}
}