diff --git a/src/oned/UPCAReader.java b/src/oned/UPCAReader.java
deleted file mode 100644
index 1163b57..0000000
--- a/src/oned/UPCAReader.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.BinaryBitmap;
-import com.google.zxing.ChecksumException;
-import com.google.zxing.DecodeHintType;
-import com.google.zxing.FormatException;
-import com.google.zxing.NotFoundException;
-import com.google.zxing.RXingResult;
-import com.google.zxing.common.BitArray;
-
-import java.util.Map;
-
-/**
- *
Implements decoding of the UPC-A format.
- *
- * @author dswitkin@google.com (Daniel Switkin)
- * @author Sean Owen
- */
-public final class UPCAReader extends UPCEANReader {
-
- private final UPCEANReader ean13Reader = new EAN13Reader();
-
- @Override
- public RXingResult decodeRow(int rowNumber,
- BitArray row,
- int[] startGuardRange,
- Map hints)
- throws NotFoundException, FormatException, ChecksumException {
- return maybeReturnRXingResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange, hints));
- }
-
- @Override
- public RXingResult decodeRow(int rowNumber, BitArray row, Map hints)
- throws NotFoundException, FormatException, ChecksumException {
- return maybeReturnRXingResult(ean13Reader.decodeRow(rowNumber, row, hints));
- }
-
- @Override
- public RXingResult decode(BinaryBitmap image) throws NotFoundException, FormatException {
- return maybeReturnRXingResult(ean13Reader.decode(image));
- }
-
- @Override
- public RXingResult decode(BinaryBitmap image, Map hints)
- throws NotFoundException, FormatException {
- return maybeReturnRXingResult(ean13Reader.decode(image, hints));
- }
-
- @Override
- BarcodeFormat getBarcodeFormat() {
- return BarcodeFormat.UPC_A;
- }
-
- @Override
- protected int decodeMiddle(BitArray row, int[] startRange, StringBuilder resultString)
- throws NotFoundException {
- return ean13Reader.decodeMiddle(row, startRange, resultString);
- }
-
- private static RXingResult maybeReturnRXingResult(RXingResult result) throws FormatException {
- String text = result.getText();
- if (text.charAt(0) == '0') {
- RXingResult upcaRXingResult = new RXingResult(text.substring(1), null, result.getRXingResultPoints(), BarcodeFormat.UPC_A);
- if (result.getRXingResultMetadata() != null) {
- upcaRXingResult.putAllMetadata(result.getRXingResultMetadata());
- }
- return upcaRXingResult;
- } else {
- throw FormatException.getFormatInstance();
- }
- }
-
-}
diff --git a/src/oned/ean_13_reader.rs b/src/oned/ean_13_reader.rs
index 4306f98..3f10136 100644
--- a/src/oned/ean_13_reader.rs
+++ b/src/oned/ean_13_reader.rs
@@ -157,3 +157,9 @@ impl EAN13Reader {
return Err(Exceptions::NotFoundException("".to_owned()));
}
}
+
+impl Default for EAN13Reader {
+ fn default() -> Self {
+ Self {}
+ }
+}
diff --git a/src/oned/mod.rs b/src/oned/mod.rs
index 7830f1d..df85e96 100644
--- a/src/oned/mod.rs
+++ b/src/oned/mod.rs
@@ -40,3 +40,6 @@ pub use ean_8_reader::*;
mod ean_13_reader;
pub use ean_13_reader::*;
+
+mod upc_a_reader;
+pub use upc_a_reader::*;
diff --git a/src/oned/upc_a_reader.rs b/src/oned/upc_a_reader.rs
new file mode 100644
index 0000000..f70cd7a
--- /dev/null
+++ b/src/oned/upc_a_reader.rs
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2008 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.
+ */
+
+use crate::{BarcodeFormat, Exceptions, RXingResult, Reader};
+
+use super::{EAN13Reader, OneDReader, UPCEANReader};
+
+/**
+ * Implements decoding of the UPC-A format.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ * @author Sean Owen
+ */
+pub struct UPCAReader(EAN13Reader);
+
+impl Reader for UPCAReader {
+ fn decode(&mut self, image: &crate::BinaryBitmap) -> Result {
+ Self::maybeReturnRXingResult(self.0.decode(image)?)
+ }
+
+ fn decode_with_hints(
+ &mut self,
+ image: &crate::BinaryBitmap,
+ hints: &crate::DecodingHintDictionary,
+ ) -> Result {
+ Self::maybeReturnRXingResult(self.0.decode_with_hints(image, hints)?)
+ }
+}
+
+impl OneDReader for UPCAReader {
+ fn decodeRow(
+ &mut self,
+ rowNumber: u32,
+ row: &crate::common::BitArray,
+ hints: &crate::DecodingHintDictionary,
+ ) -> Result {
+ Self::maybeReturnRXingResult(self.0.decodeRow(rowNumber, row, hints)?)
+ }
+}
+
+impl UPCEANReader for UPCAReader {
+ fn getBarcodeFormat(&self) -> crate::BarcodeFormat {
+ BarcodeFormat::UPC_A
+ }
+
+ fn decodeMiddle(
+ &self,
+ row: &crate::common::BitArray,
+ startRange: &[usize; 2],
+ resultString: &mut String,
+ ) -> Result {
+ self.0.decodeMiddle(row, startRange, resultString)
+ }
+
+ fn decodeRowWithGuardRange(
+ &self,
+ rowNumber: u32,
+ row: &crate::common::BitArray,
+ startGuardRange: &[usize; 2],
+ hints: &crate::DecodingHintDictionary,
+ ) -> Result
+ where
+ Self: Sized,
+ {
+ Self::maybeReturnRXingResult(self.0.decodeRowWithGuardRange(
+ rowNumber,
+ row,
+ startGuardRange,
+ hints,
+ )?)
+ }
+}
+
+impl Default for UPCAReader {
+ fn default() -> Self {
+ Self(Default::default())
+ }
+}
+
+impl UPCAReader {
+ // private final UPCEANReader ean13Reader = new EAN13Reader();
+
+ fn maybeReturnRXingResult(result: RXingResult) -> Result {
+ let text = result.getText();
+ if text.chars().nth(0).unwrap() == '0' {
+ let mut upcaRXingResult = RXingResult::new(
+ &text[1..],
+ Vec::new(),
+ result.getRXingResultPoints().to_vec(),
+ BarcodeFormat::UPC_A,
+ );
+ // if result.getRXingResultMetadata() != null {
+ upcaRXingResult.putAllMetadata(result.getRXingResultMetadata().clone());
+ // }
+ Ok(upcaRXingResult)
+ } else {
+ Err(Exceptions::NotFoundException("".to_owned()))
+ }
+ }
+}
diff --git a/tests/UPCABlackBox1TestCase.java b/tests/UPCABlackBox1TestCase.java
deleted file mode 100644
index 51945ce..0000000
--- a/tests/UPCABlackBox1TestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * @author Sean Owen
- */
-public final class UPCABlackBox1TestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox1TestCase() {
- super("src/test/resources/blackbox/upca-1", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(14, 18, 0, 1, 0.0f);
- addTest(16, 18, 0, 1, 180.0f);
- }
-
-}
\ No newline at end of file
diff --git a/tests/UPCABlackBox2TestCase.java b/tests/UPCABlackBox2TestCase.java
deleted file mode 100644
index b6414df..0000000
--- a/tests/UPCABlackBox2TestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * @author dswitkin@google.com (Daniel Switkin)
- */
-public final class UPCABlackBox2TestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox2TestCase() {
- super("src/test/resources/blackbox/upca-2", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(28, 36, 0, 2, 0.0f);
- addTest(29, 36, 0, 2, 180.0f);
- }
-
-}
diff --git a/tests/UPCABlackBox3ReflectiveTestCase.java b/tests/UPCABlackBox3ReflectiveTestCase.java
deleted file mode 100644
index 4b9a745..0000000
--- a/tests/UPCABlackBox3ReflectiveTestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * @author dswitkin@google.com (Daniel Switkin)
- */
-public final class UPCABlackBox3ReflectiveTestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox3ReflectiveTestCase() {
- super("src/test/resources/blackbox/upca-3", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(7, 9, 0, 2, 0.0f);
- addTest(8, 9, 0, 2, 180.0f);
- }
-
-}
diff --git a/tests/UPCABlackBox4TestCase.java b/tests/UPCABlackBox4TestCase.java
deleted file mode 100644
index 5642dc7..0000000
--- a/tests/UPCABlackBox4TestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * @author dswitkin@google.com (Daniel Switkin)
- */
-public final class UPCABlackBox4TestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox4TestCase() {
- super("src/test/resources/blackbox/upca-4", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(9, 11, 0, 1, 0.0f);
- addTest(9, 11, 0, 1, 180.0f);
- }
-
-}
diff --git a/tests/UPCABlackBox5TestCase.java b/tests/UPCABlackBox5TestCase.java
deleted file mode 100644
index 8ae95ea..0000000
--- a/tests/UPCABlackBox5TestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * @author dswitkin@google.com (Daniel Switkin)
- */
-public final class UPCABlackBox5TestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox5TestCase() {
- super("src/test/resources/blackbox/upca-5", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(20, 23, 0, 0, 0.0f);
- addTest(22, 23, 0, 0, 180.0f);
- }
-
-}
diff --git a/tests/UPCABlackBox6BlurryTestCase.java b/tests/UPCABlackBox6BlurryTestCase.java
deleted file mode 100644
index 6e5690f..0000000
--- a/tests/UPCABlackBox6BlurryTestCase.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2008 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.oned;
-
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.MultiFormatReader;
-import com.google.zxing.common.AbstractBlackBoxTestCase;
-
-/**
- * A set of blurry images taken with a fixed-focus device.
- * @author dswitkin@google.com (Daniel Switkin)
- */
-public final class UPCABlackBox6BlurryTestCase extends AbstractBlackBoxTestCase {
-
- public UPCABlackBox6BlurryTestCase() {
- super("src/test/resources/blackbox/upca-6", new MultiFormatReader(), BarcodeFormat.UPC_A);
- addTest(0, 0, 0.0f);
- addTest(0, 0, 180.0f);
- }
-
-}
diff --git a/tests/upc_a_blackbox_tests.rs b/tests/upc_a_blackbox_tests.rs
new file mode 100644
index 0000000..465801e
--- /dev/null
+++ b/tests/upc_a_blackbox_tests.rs
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2008 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.
+ */
+
+use rxing::{
+ oned::{EAN13Reader, UPCAReader},
+ BarcodeFormat, MultiFormatReader,
+};
+
+mod common;
+
+/**
+ * @author Sean Owen
+ */
+#[test]
+fn upcablack_box1_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-1",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-1", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test_complex(14, 18, 0, 1, 0.0);
+ tester.add_test_complex(16, 18, 0, 1, 180.0);
+
+ tester.test_black_box()
+}
+
+/**
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+#[test]
+fn upcablack_box2_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-2",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-2", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test_complex(28, 36, 0, 2, 0.0);
+ tester.add_test_complex(29, 36, 0, 2, 180.0);
+
+ tester.test_black_box()
+}
+
+/**
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+#[test]
+fn upcablack_box3_reflective_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-3",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-3", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test_complex(7, 9, 0, 2, 0.0);
+ tester.add_test_complex(8, 9, 0, 2, 180.0);
+
+ tester.test_black_box()
+}
+
+/**
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+#[test]
+fn upcablack_box4_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-4",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-4", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test_complex(9, 11, 0, 1, 0.0);
+ tester.add_test_complex(9, 11, 0, 1, 180.0);
+
+ tester.test_black_box()
+}
+
+/**
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+#[test]
+fn upcablack_box5_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-5",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-5", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test_complex(20, 23, 0, 0, 0.0);
+ tester.add_test_complex(22, 23, 0, 0, 180.0);
+
+ tester.test_black_box()
+}
+
+/**
+ * A set of blurry images taken with a fixed-focus device.
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+#[test]
+fn upcablack_box6_blurry_test_case() {
+ let mut tester = common::AbstractBlackBoxTestCase::new(
+ "test_resources/blackbox/upca-6",
+ // MultiFormatReader::default(),
+ UPCAReader::default(),
+ BarcodeFormat::UPC_A,
+ );
+
+ // super("src/test/resources/blackbox/upca-6", new MultiFormatReader(), BarcodeFormat.UPC_A);
+ tester.add_test(0, 0, 0.0);
+ tester.add_test(0, 0, 180.0);
+
+ tester.test_black_box()
+}