From 0fbd3baef9641a3cd055f2111fc9d155274504b3 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Fri, 16 Dec 2022 16:52:08 -0600 Subject: [PATCH] stacked test internal --- .../RSSExpandedStackedInternalTestCase.java | 89 ------------------- src/oned/rss/expanded/expanded_pair.rs | 5 ++ src/oned/rss/expanded/expanded_row.rs | 5 ++ src/oned/rss/expanded/mod.rs | 6 ++ src/oned/rss/expanded/rss_expanded_reader.rs | 15 ++-- ...rss_expanded_stacked_internal_test_case.rs | 83 +++++++++++++++++ .../{TestCaseUtil.java => test_case_util.rs} | 36 +++----- src/oned/rss/finder_pattern.rs | 5 ++ 8 files changed, 128 insertions(+), 116 deletions(-) delete mode 100644 src/oned/rss/expanded/RSSExpandedStackedInternalTestCase.java create mode 100644 src/oned/rss/expanded/rss_expanded_stacked_internal_test_case.rs rename src/oned/rss/expanded/{TestCaseUtil.java => test_case_util.rs} (51%) diff --git a/src/oned/rss/expanded/RSSExpandedStackedInternalTestCase.java b/src/oned/rss/expanded/RSSExpandedStackedInternalTestCase.java deleted file mode 100644 index 86c0a6d..0000000 --- a/src/oned/rss/expanded/RSSExpandedStackedInternalTestCase.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2012 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. - */ - -/* - * These authors would like to acknowledge the Spanish Ministry of Industry, - * Tourism and Trade, for the support in the project TSI020301-2008-2 - * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled - * Mobile Dynamic Environments", led by Treelogic - * ( http://www.treelogic.com/ ): - * - * http://www.piramidepse.com/ - */ - -package com.google.zxing.oned.rss.expanded; - -import java.util.List; - -import com.google.zxing.oned.OneDReader; -import org.junit.Assert; -import org.junit.Test; - -import com.google.zxing.BinaryBitmap; -import com.google.zxing.NotFoundException; -import com.google.zxing.RXingResult; -import com.google.zxing.common.BitArray; - -/** - * Tests {@link RSSExpandedReader} handling of stacked RSS barcodes. - */ -public final class RSSExpandedStackedInternalTestCase extends Assert { - - @Test - public void testDecodingRowByRow() throws Exception { - RSSExpandedReader rssExpandedReader = new RSSExpandedReader(); - - BinaryBitmap binaryMap = TestCaseUtil.getBinaryBitmap("src/test/resources/blackbox/rssexpandedstacked-2/1000.png"); - - int firstRowNumber = binaryMap.getHeight() / 3; - BitArray firstRow = binaryMap.getBlackRow(firstRowNumber, null); - try { - rssExpandedReader.decodeRow2pairs(firstRowNumber, firstRow); - fail(NotFoundException.class.getName() + " expected"); - } catch (NotFoundException nfe) { - // ok - } - - assertEquals(1, rssExpandedReader.getRows().size()); - ExpandedRow firstExpandedRow = rssExpandedReader.getRows().get(0); - assertEquals(firstRowNumber, firstExpandedRow.getRowNumber()); - - assertEquals(2, firstExpandedRow.getPairs().size()); - - firstExpandedRow.getPairs().get(1).getFinderPattern().getStartEnd()[1] = 0; - - int secondRowNumber = 2 * binaryMap.getHeight() / 3; - BitArray secondRow = binaryMap.getBlackRow(secondRowNumber, null); - secondRow.reverse(); - - List totalPairs = rssExpandedReader.decodeRow2pairs(secondRowNumber, secondRow); - - RXingResult result = RSSExpandedReader.constructRXingResult(totalPairs); - assertEquals("(01)98898765432106(3202)012345(15)991231", result.getText()); - } - - @Test - public void testCompleteDecode() throws Exception { - OneDReader rssExpandedReader = new RSSExpandedReader(); - - BinaryBitmap binaryMap = TestCaseUtil.getBinaryBitmap("src/test/resources/blackbox/rssexpandedstacked-2/1000.png"); - - RXingResult result = rssExpandedReader.decode(binaryMap); - assertEquals("(01)98898765432106(3202)012345(15)991231", result.getText()); - } - - -} diff --git a/src/oned/rss/expanded/expanded_pair.rs b/src/oned/rss/expanded/expanded_pair.rs index 61f53b5..fe5ab6e 100644 --- a/src/oned/rss/expanded/expanded_pair.rs +++ b/src/oned/rss/expanded/expanded_pair.rs @@ -63,6 +63,11 @@ impl ExpandedPair { &self.finderPattern } + #[cfg(test)] + pub(crate) fn getFinderPatternMut(&mut self) -> &mut Option { + &mut self.finderPattern + } + pub fn mustBeLast(&self) -> bool { self.rightChar.is_none() } diff --git a/src/oned/rss/expanded/expanded_row.rs b/src/oned/rss/expanded/expanded_row.rs index 902d62c..12190ae 100644 --- a/src/oned/rss/expanded/expanded_row.rs +++ b/src/oned/rss/expanded/expanded_row.rs @@ -35,6 +35,11 @@ impl ExpandedRow { &self.pairs } + #[cfg(test)] + pub(crate) fn getPairsMut(&mut self) -> &mut [ExpandedPair]{ + &mut self.pairs + } + pub fn getRowNumber(&self) -> u32 { self.rowNumber } diff --git a/src/oned/rss/expanded/mod.rs b/src/oned/rss/expanded/mod.rs index 80e87e8..1a7480f 100644 --- a/src/oned/rss/expanded/mod.rs +++ b/src/oned/rss/expanded/mod.rs @@ -26,3 +26,9 @@ mod rss_expanded_image_2_result_test_case; #[cfg(test)] mod rss_expanded_image_2_string_test_case; + +#[cfg(test)] +mod rss_expanded_stacked_internal_test_case; + +#[cfg(test)] +mod test_case_util; \ No newline at end of file diff --git a/src/oned/rss/expanded/rss_expanded_reader.rs b/src/oned/rss/expanded/rss_expanded_reader.rs index b6b1adf..0a2547e 100644 --- a/src/oned/rss/expanded/rss_expanded_reader.rs +++ b/src/oned/rss/expanded/rss_expanded_reader.rs @@ -142,8 +142,8 @@ pub struct RSSExpandedReader { oddCounts: [u32; 4], evenCounts: [u32; 4], - pairs: Vec, //new ArrayList<>(MAX_PAIRS); - rows: Vec, // new ArrayList<>(); + pub(super) pairs: Vec, //new ArrayList<>(MAX_PAIRS); + pub(super) rows: Vec, // new ArrayList<>(); startEnd: [u32; 2], // new int[2]; startFromEven: bool, } @@ -529,12 +529,17 @@ impl RSSExpandedReader { } // Only used for unit testing - fn getRows(&self) -> &[ExpandedRow] { - &self.rows + #[cfg(test)] + pub(crate) fn getRowsMut(&mut self) -> &mut [ExpandedRow] { + &mut self.rows + } + #[cfg(test)] + pub(crate) fn getRows(& self) -> & [ExpandedRow] { + & self.rows } // Not private for unit testing - fn constructRXingResult(pairs: &[ExpandedPair]) -> Result { + pub(crate) fn constructRXingResult(pairs: &[ExpandedPair]) -> Result { let binary = bit_array_builder::buildBitArray(&pairs.to_vec()); let mut decoder = abstract_expanded_decoder::createDecoder(&binary)?; diff --git a/src/oned/rss/expanded/rss_expanded_stacked_internal_test_case.rs b/src/oned/rss/expanded/rss_expanded_stacked_internal_test_case.rs new file mode 100644 index 0000000..f6f4538 --- /dev/null +++ b/src/oned/rss/expanded/rss_expanded_stacked_internal_test_case.rs @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2012 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. + */ + +/* + * These authors would like to acknowledge the Spanish Ministry of Industry, + * Tourism and Trade, for the support in the project TSI020301-2008-2 + * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled + * Mobile Dynamic Environments", led by Treelogic + * ( http://www.treelogic.com/ ): + * + * http://www.piramidepse.com/ + */ + +use crate::{Exceptions, common::BitArray, oned::rss::expanded::ExpandedPair, Reader}; + +use super::{RSSExpandedReader, test_case_util}; + + +/** + * Tests {@link RSSExpandedReader} handling of stacked RSS barcodes. + */ + + + #[test] + fn testDecodingRowByRow() { + let mut rssExpandedReader = RSSExpandedReader::new(); + + let binaryMap = test_case_util::getBinaryBitmap("1000.png"); + + let firstRowNumber = binaryMap.getHeight() / 3; + let firstRow = binaryMap.getBlackRow(firstRowNumber, &mut BitArray::new()).expect("get row"); + + // let tester = ; + + assert!(|| -> Result,Exceptions> { + rssExpandedReader.decodeRow2pairs(firstRowNumber as u32, &firstRow) + // fail(NotFoundException.class.getName() + " expected"); + }().is_err()); + + + assert_eq!(1, rssExpandedReader.getRows().len()); + let firstExpandedRow = &mut rssExpandedReader.rows[0]; //&mut rssExpandedReader.getRowsMut()[0];//.expect("not None"); + + assert_eq!(firstRowNumber as u32, firstExpandedRow.getRowNumber()); + + assert_eq!(2, firstExpandedRow.getPairs().len()); + + firstExpandedRow.getPairsMut()[1].getFinderPatternMut().as_mut().unwrap().getStartEndMut()[1] = 0; + rssExpandedReader.pairs.last_mut().as_mut().unwrap().getFinderPatternMut().as_mut().unwrap().getStartEndMut()[1] = 0; + + let secondRowNumber = 2 * binaryMap.getHeight() / 3; + let mut secondRow = binaryMap.getBlackRow(secondRowNumber, &mut BitArray::new()).expect("get row"); + secondRow.reverse(); + + let totalPairs = rssExpandedReader.decodeRow2pairs(secondRowNumber as u32, &secondRow).expect("decode pairs"); + + let result = RSSExpandedReader::constructRXingResult(&totalPairs).expect("construct"); + assert_eq!("(01)98898765432106(3202)012345(15)991231", result.getText()); + } + + #[test] + fn testCompleteDecode() { + let mut rssExpandedReader = RSSExpandedReader::new(); + + let binaryMap = test_case_util::getBinaryBitmap("1000.png"); + + let result = rssExpandedReader.decode(&binaryMap).expect("decode"); + assert_eq!("(01)98898765432106(3202)012345(15)991231", result.getText()); + } + diff --git a/src/oned/rss/expanded/TestCaseUtil.java b/src/oned/rss/expanded/test_case_util.rs similarity index 51% rename from src/oned/rss/expanded/TestCaseUtil.java rename to src/oned/rss/expanded/test_case_util.rs index dc4af85..9004d1c 100644 --- a/src/oned/rss/expanded/TestCaseUtil.java +++ b/src/oned/rss/expanded/test_case_util.rs @@ -24,33 +24,25 @@ * http://www.piramidepse.com/ */ -package com.google.zxing.oned.rss.expanded; +use std::rc::Rc; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.nio.file.Path; +use image::DynamicImage; -import javax.imageio.ImageIO; +use crate::{BinaryBitmap, common::GlobalHistogramBinarizer, BufferedImageLuminanceSource}; -import com.google.zxing.BinaryBitmap; -import com.google.zxing.BufferedImageLuminanceSource; -import com.google.zxing.common.AbstractBlackBoxTestCase; -import com.google.zxing.common.GlobalHistogramBinarizer; -final class TestCaseUtil { + fn getBufferedImage( fileName:&str) -> DynamicImage { + let path = format!("test_resources/blackbox/rssexpandedstacked-2/{}",fileName); - private TestCaseUtil() { + let image = image::open(path).expect("load image"); + + image } - private static BufferedImage getBufferedImage(String path) throws IOException { - Path file = AbstractBlackBoxTestCase.buildTestBase(path); - return ImageIO.read(file.toFile()); + pub(crate) fn getBinaryBitmap( fileName:&str) -> BinaryBitmap { + let bufferedImage = getBufferedImage(fileName); + let binaryMap = + BinaryBitmap::new(Rc::new(GlobalHistogramBinarizer::new(Box::new(BufferedImageLuminanceSource::new(bufferedImage))))); + + binaryMap } - - static BinaryBitmap getBinaryBitmap(String path) throws IOException { - BufferedImage bufferedImage = getBufferedImage(path); - BufferedImageLuminanceSource luminanceSource = new BufferedImageLuminanceSource(bufferedImage); - return new BinaryBitmap(new GlobalHistogramBinarizer(luminanceSource)); - } - -} diff --git a/src/oned/rss/finder_pattern.rs b/src/oned/rss/finder_pattern.rs index 26ae4d6..e7f7270 100644 --- a/src/oned/rss/finder_pattern.rs +++ b/src/oned/rss/finder_pattern.rs @@ -48,6 +48,11 @@ impl FinderPattern { &self.startEnd } + #[cfg(test)] + pub(crate)fn getStartEndMut(&mut self) -> &mut [usize]{ + &mut self.startEnd + } + pub fn getRXingResultPoints(&self) -> &[RXingResultPoint] { &self.resultPoints }