mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
non passing aztec decoder port
This commit is contained in:
285
src/aztec/DecoderTest.rs
Normal file
285
src/aztec/DecoderTest.rs
Normal file
@@ -0,0 +1,285 @@
|
||||
/*
|
||||
* Copyright 2014 ZXing authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
// package com.google.zxing.aztec.decoder;
|
||||
|
||||
// import com.google.zxing.aztec.encoder.EncoderTest;
|
||||
|
||||
// import com.google.zxing.FormatException;
|
||||
// import com.google.zxing.RXingResultPoint;
|
||||
// import com.google.zxing.aztec.AztecDetectorRXingResult;
|
||||
// import com.google.zxing.common.BitArray;
|
||||
// import com.google.zxing.common.BitMatrix;
|
||||
// import com.google.zxing.common.DecoderRXingResult;
|
||||
// import org.junit.Test;
|
||||
// import org.junit.Assert;
|
||||
|
||||
use crate::{
|
||||
aztec::shared_test_methods::{stripSpace, toBitArray, toBooleanArray},
|
||||
common::BitMatrix,
|
||||
RXingResultPoint,
|
||||
};
|
||||
|
||||
use super::{decoder, AztecDetectorResult::AztecDetectorRXingResult};
|
||||
|
||||
/**
|
||||
* Tests {@link Decoder}.
|
||||
*/
|
||||
|
||||
const NO_POINTS: &[RXingResultPoint] = &[RXingResultPoint { x: 0.0, y: 0.0 }; 0];
|
||||
|
||||
#[test]
|
||||
fn testHighLevelDecode() {
|
||||
// no ECI codes
|
||||
testHighLevelDecodeString(
|
||||
"A. b.",
|
||||
// 'A' P/S '. ' L/L b D/L '.'
|
||||
"...X. ..... ...XX XXX.. ...XX XXXX. XX.X",
|
||||
);
|
||||
|
||||
// initial ECI code 26 (switch to UTF-8)
|
||||
testHighLevelDecodeString(
|
||||
"Ça",
|
||||
// P/S FLG(n) 2 '2' '6' B/S 2 0xc3 0x87 L/L 'a'
|
||||
"..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.",
|
||||
);
|
||||
|
||||
// initial character without ECI (must be interpreted as ISO_8859_1)
|
||||
// followed by ECI code 26 (= UTF-8) and UTF-8 text
|
||||
testHighLevelDecodeString(
|
||||
"±Ça",
|
||||
// B/S 1 0xb1 P/S FLG(n) 2 '2' '6' B/S 2 0xc3 0x87 L/L 'a'
|
||||
"XXXXX ....X X.XX...X ..... ..... .X. .X.. X... XXXXX ...X. XX....XX X....XXX XXX.. ...X.",
|
||||
);
|
||||
|
||||
// GS1 data
|
||||
testHighLevelDecodeString(
|
||||
"101233742",
|
||||
// P/S FLG(n) 0 D/L 1 0 1 2 3 P/S FLG(n) 0 3 7 4 2
|
||||
"..... ..... ... XXXX. ..XX ..X. ..XX .X.. .X.X .... ..... ... .X.X X..X .XX. .X..",
|
||||
);
|
||||
}
|
||||
|
||||
fn testHighLevelDecodeString(expectedString: &str, b: &str) {
|
||||
let bits = toBitArray(&stripSpace(b));
|
||||
assert_eq!(
|
||||
expectedString,
|
||||
decoder::highLevelDecode(&toBooleanArray(&bits)).expect("highLevelDecode Failed"),
|
||||
"highLevelDecode() failed for input bits: {}",
|
||||
b
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testAztecRXingResult() {
|
||||
let matrix = BitMatrix::parse_strings(
|
||||
r"X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X X X
|
||||
X X X X X X X X
|
||||
X X X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X
|
||||
X X X X X X X X X X X X X X
|
||||
X X X X X X X X
|
||||
X X X X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X X X
|
||||
X X X X X X X X X X X X X
|
||||
",
|
||||
"X ",
|
||||
" ",
|
||||
)
|
||||
.expect("Bitmatrix should init");
|
||||
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), false, 30, 2);
|
||||
let result = decoder::decode(&r).expect("decoder should init");
|
||||
assert_eq!("88888TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", result.getText());
|
||||
assert_eq!(
|
||||
&vec![
|
||||
-11i8 as u8,
|
||||
85,
|
||||
85,
|
||||
117,
|
||||
107,
|
||||
90,
|
||||
-42i8 as u8,
|
||||
-75i8 as u8,
|
||||
-83i8 as u8,
|
||||
107,
|
||||
90,
|
||||
-42i8 as u8,
|
||||
-75i8 as u8,
|
||||
-83i8 as u8,
|
||||
107,
|
||||
90,
|
||||
-42i8 as u8,
|
||||
-75i8 as u8,
|
||||
-83i8 as u8,
|
||||
107,
|
||||
90,
|
||||
-42i8 as u8,
|
||||
-80i8 as u8
|
||||
],
|
||||
result.getRawBytes()
|
||||
);
|
||||
assert_eq!(180, result.getNumBits());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testAztecRXingResultECI() {
|
||||
let matrix = BitMatrix::parse_strings(
|
||||
r" X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X
|
||||
X X X X X X X X X X X X X X X X X
|
||||
X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X X X X
|
||||
X X X X X X
|
||||
X X X X X X X X X X X X X
|
||||
X X X
|
||||
X X X X X X X X X X X X X X X X X
|
||||
X X X X X X X X X
|
||||
X X X X X X X X X X X
|
||||
X X X X X X X X ",
|
||||
"X ",
|
||||
" ",
|
||||
)
|
||||
.expect("string parse success");
|
||||
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), false, 15, 1);
|
||||
let result = decoder::decode(&r).expect("decode success");
|
||||
assert_eq!("Français", result.getText());
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn testDecodeTooManyErrors() {
|
||||
let matrix = BitMatrix::parse_strings(
|
||||
r"
|
||||
X X . X . . . X X . . . X . . X X X . X . X X X X X .
|
||||
X X . . X X . . . . . X X . . . X X . . . X . X . . X
|
||||
X . . . X X . . X X X . X X . X X X X . X X . . X . .
|
||||
. . . . X . X X . . X X . X X . X . X X X X . X . . X
|
||||
X X X . . X X X X X . . . . . X X . . . X . X . X . X
|
||||
X X . . . . . . . . X . . . X . X X X . X . . X . . .
|
||||
X X . . X . . . . . X X . . . . . X . . . . X . . X X \
|
||||
. . . X . X . X . . . . . X X X X X X . . . . . . X X
|
||||
X . . . X . X X X X X X . . X X X . X . X X X X X X .
|
||||
X . . X X X . X X X X X X X X X X X X X . . . X . X X
|
||||
. . . . X X . . . X . . . . . . . X X . . . X X . X .
|
||||
. . . X X X . . X X . X X X X X . X . . X . . . . . .
|
||||
X . . . . X . X . X . X . . . X . X . X X . X X . X X
|
||||
X . X . . X . X . X . X . X . X . X . . . . . X . X X
|
||||
X . X X X . . X . X . X . . . X . X . X X X . . . X X
|
||||
X X X X X X X X . X . X X X X X . X . X . X . X X X .
|
||||
. . . . . . . X . X . . . . . . . X X X X . . . X X X
|
||||
X X . . X . . X . X X X X X X X X X X X X X . . X . X
|
||||
X X X . X X X X . . X X X X . . X . . . . X . . X X X
|
||||
. . . . X . X X X . . . . X X X X . . X X X X . . . .
|
||||
. . X . . X . X . . . X . X X . X X . X . . . X . X .
|
||||
X X . . X . . X X X X X X X . . X . X X X X X X X . .
|
||||
X . X X . . X X . . . . . X . . . . . . X X . X X X .
|
||||
X . . X X . . X X . X . X . . . . X . X . . X . . X .
|
||||
X . X . X . . X . X X X X X X X X . X X X X . . X X .
|
||||
X X X X . . . X . . X X X . X X . . X . . . . X X X .
|
||||
X X . X . X . . . X . X . . . . X X . X . . X X . . . ",
|
||||
"X ",
|
||||
". ",
|
||||
)
|
||||
.expect("parse string success");
|
||||
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), true, 16, 4);
|
||||
decoder::decode(&r);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn testDecodeTooManyErrors2() {
|
||||
let matrix = BitMatrix::parse_strings(
|
||||
r"
|
||||
. X X . . X . X X . . . X . . X X X . . . X X . X X .
|
||||
X X . X X . . X . . . X X . . . X X . X X X . X . X X
|
||||
. . . . X . . . X X X . X X . X X X X . X X . . X . .
|
||||
X . X X . . X . . . X X . X X . X . X X . . . . . X .
|
||||
X X . X . . X . X X . . . . . X X . . . . . X . . . X
|
||||
X . . X . . . . . . X . . . X . X X X X X X X . . . X
|
||||
X . . X X . . X . . X X . . . . . X . . . . . X X X .
|
||||
. . X X X X . X . . . . . X X X X X X . . . . . . X X
|
||||
X . . . X . X X X X X X . . X X X . X . X X X X X X .
|
||||
X . . X X X . X X X X X X X X X X X X X . . . X . X X
|
||||
. . . . X X . . . X . . . . . . . X X . . . X X . X .
|
||||
. . . X X X . . X X . X X X X X . X . . X . . . . . .
|
||||
X . . . . X . X . X . X . . . X . X . X X . X X . X X
|
||||
X . X . . X . X . X . X . X . X . X . . . . . X . X X
|
||||
X . X X X . . X . X . X . . . X . X . X X X . . . X X
|
||||
X X X X X X X X . X . X X X X X . X . X . X . X X X .
|
||||
. . . . . . . X . X . . . . . . . X X X X . . . X X X
|
||||
X X . . X . . X . X X X X X X X X X X X X X . . X . X
|
||||
X X X . X X X X . . X X X X . . X . . . . X . . X X X
|
||||
. . X X X X X . X . . . . X X X X . . X X X . X . X .
|
||||
. . X X . X . X . . . X . X X . X X . . . . X X . . .
|
||||
X . . . X . X . X X X X X X . . X . X X X X X . X . .
|
||||
. X . . . X X X . . . . . X . . . . . X X X X X . X .
|
||||
X . . X . X X X X . X . X . . . . X . X X . X . . X .
|
||||
X . . . X X . X . X X X X X X X X . X X X X . . X X .
|
||||
. X X X X . . X . . X X X . X X . . X . . . . X X X .
|
||||
X X . . . X X . . X . X . . . . X X . X . . X . X . X ",
|
||||
"X ",
|
||||
". ",
|
||||
)
|
||||
.expect("String Parse OK");
|
||||
let r = AztecDetectorRXingResult::new(matrix, NO_POINTS.to_vec(), true, 16, 4);
|
||||
decoder::decode(&r);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testRawBytes() {
|
||||
let bool0 = vec![false; 0];
|
||||
let bool1 = vec![true];
|
||||
let bool7 = vec![true, false, true, false, true, false, true];
|
||||
let bool8 = vec![true, false, true, false, true, false, true, false];
|
||||
let bool9 = vec![true, false, true, false, true, false, true, false, true];
|
||||
let bool16 = vec![
|
||||
false, true, true, false, false, false, true, true, true, true, false, false, false, false,
|
||||
false, true,
|
||||
];
|
||||
let byte0 = vec![0u8; 0];
|
||||
let byte1 = vec![-128i8 as u8];
|
||||
let byte7 = vec![-86i8 as u8];
|
||||
let byte8 = vec![-86i8 as u8];
|
||||
let byte9 = vec![-86i8 as u8, -128i8 as u8];
|
||||
let byte16 = vec![99, -63i8 as u8];
|
||||
|
||||
assert_eq!(byte0, decoder::convertBoolArrayToByteArray(&bool0));
|
||||
assert_eq!(byte1, decoder::convertBoolArrayToByteArray(&bool1));
|
||||
assert_eq!(byte7, decoder::convertBoolArrayToByteArray(&bool7));
|
||||
assert_eq!(byte8, decoder::convertBoolArrayToByteArray(&bool8));
|
||||
assert_eq!(byte9, decoder::convertBoolArrayToByteArray(&bool9));
|
||||
assert_eq!(byte16, decoder::convertBoolArrayToByteArray(&bool16));
|
||||
}
|
||||
Reference in New Issue
Block a user