use crate::{
common::BitArray,
qrcode::{
common::{ErrorCorrectionLevel, Version},
cpp_port::decoder::DecodeBitStream,
},
};
#[test]
fn SimpleByteMode() {
let mut ba = BitArray::new();
ba.appendBits(0x04, 4).unwrap(); ba.appendBits(0x03, 8).unwrap(); ba.appendBits(0xF1, 8).unwrap();
ba.appendBits(0xF2, 8).unwrap();
ba.appendBits(0xF3, 8).unwrap();
let bytes: Vec<u8> = ba.into();
let result = DecodeBitStream(
&bytes,
Version::Model2(1).expect("find_version"),
ErrorCorrectionLevel::M,
)
.expect("Decode")
.content()
.to_string();
let str = String::from_utf16(&[0xF1, 0xF2, 0xF3]).unwrap();
assert_eq!(str, result);
}
#[test]
fn SimpleSJIS() {
let mut ba = BitArray::new();
ba.appendBits(0x04, 4).expect("append"); ba.appendBits(0x04, 8).expect("append"); ba.appendBits(0xA1, 8).expect("append");
ba.appendBits(0xA2, 8).expect("append");
ba.appendBits(0xA3, 8).expect("append");
ba.appendBits(0xD0, 8).expect("append");
let bytes: Vec<u8> = ba.into();
let result = DecodeBitStream(&bytes, Version::Model2(1).unwrap(), ErrorCorrectionLevel::M)
.unwrap()
.content()
.to_string();
assert_eq!("\u{ff61}\u{ff62}\u{ff63}\u{ff90}", result);
}
#[test]
fn ECI() {
let mut ba = BitArray::new();
ba.appendBits(0x07, 4).expect("append"); ba.appendBits(0x02, 8).expect("append"); ba.appendBits(0x04, 4).expect("append"); ba.appendBits(0x03, 8).expect("append"); ba.appendBits(0xA1, 8).expect("append");
ba.appendBits(0xA2, 8).expect("append");
ba.appendBits(0xA3, 8).expect("append");
let bytes: Vec<u8> = ba.into();
let result = DecodeBitStream(&bytes, Version::Model2(1).unwrap(), ErrorCorrectionLevel::M)
.unwrap()
.content()
.to_string();
assert_eq!("\u{ED}\u{F3}\u{FA}", result);
}
#[test]
fn Hanzi() {
let mut ba = BitArray::new();
ba.appendBits(0x0D, 4).expect("append"); ba.appendBits(0x01, 4).expect("append"); ba.appendBits(0x01, 8).expect("append"); ba.appendBits(0x03C1, 13).expect("append");
let bytes: Vec<u8> = ba.into();
let result = DecodeBitStream(&bytes, Version::Model2(1).unwrap(), ErrorCorrectionLevel::M)
.unwrap()
.content()
.to_string();
assert_eq!("\u{963f}", result);
}
#[test]
fn HanziLevel1() {
let mut ba = BitArray::new();
ba.appendBits(0x0D, 4).expect("append"); ba.appendBits(0x01, 4).expect("append"); ba.appendBits(0x01, 8).expect("append"); ba.appendBits(0x0181, 13).expect("append");
let bytes: Vec<u8> = ba.into();
let result = DecodeBitStream(&bytes, Version::Model2(1).unwrap(), ErrorCorrectionLevel::M)
.unwrap()
.content()
.to_string();
assert_eq!("\u{30a2}", result);
}
#[test]
fn SymbologyIdentifier() {
let version = Version::Model2(1).unwrap();
let ecLevel = ErrorCorrectionLevel::M;
let result = DecodeBitStream(&[0x20, 0x09, 0x40], version, ecLevel).unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q1");
assert_eq!(result.text(), "A");
let result = DecodeBitStream(&[0x51, 0x01, 0x0C, 0x81, 0x00], version, ecLevel).unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q3");
assert_eq!(result.text(), "2001");
let result = DecodeBitStream(
&[0x10, 0x10, 0xC8, 0x15, 0x10, 0x0D, 0x2D, 0x00],
version,
ecLevel,
)
.unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q3");
assert_eq!(result.text(), "2001301");
let result = DecodeBitStream(&[0x96, 0x32, 0x00, 0x94, 0x00], version, ecLevel).unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q5");
assert_eq!(result.text(), "99A");
let result = DecodeBitStream(&[0x9A, 0x52, 0x00, 0x96, 0x00], version, ecLevel).unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q5");
assert_eq!(result.text(), "AB");
let result = DecodeBitStream(&[0x9C, 0x52, 0x00, 0x96, 0x00], version, ecLevel).unwrap();
assert_eq!(result.symbologyIdentifier(), "]Q5");
assert_eq!(result.text(), "aB");
let result = DecodeBitStream(&[0x9A, 0x42, 0x00, 0x96, 0x00], version, ecLevel).unwrap();
assert!(!result.isValid());
}