diff options
| author | François Tiercelin <francois.tiercelin@hpe.com> | 2024-11-17 19:25:04 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-17 19:25:04 +0300 |
| commit | 2dfb2054af1e1872ac5354e6d8218931fb88e021 (patch) | |
| tree | ddc39ce5511c75881eb3a39c5464ded533d1014b /core/src/test/java/com | |
| parent | 3b189fc700c9c7c210f4b78fc66b01f4c13ae5d2 (diff) | |
| download | zxing-2dfb2054af1e1872ac5354e6d8218931fb88e021.tar.xz | |
Fixing issue #1831 (#1879)
* throw a more explicit exception when trying to PDF417/TEXT encode something outside of 0...255
* refactor PDF417HighLevelEncoder to avoid code duplication
extend UT to new method PDF417HighLevelEncoder#checkCharset
* fix javadoc typo
make UT more stringent on PDF417HighLevelEncoder#checkCharset
* restrict TEXT to 0...127
test with CP437 and Greek chars
* reinstate testEncodeAuto UT
* refactor testEncodeAuto UT
* address codacy findings
* formatting
* fix issue #1831
make PDF417#determineDimensions to enable finer UT
add UT coverage to validate fix for #1831
* fix javadoc for PDF417#determineDimensions
remove stacktrace when UT fails
* make UT Java 8 compliant
Diffstat (limited to 'core/src/test/java/com')
| -rw-r--r-- | core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java b/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java index 2f582b901..6f99c4229 100644 --- a/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java +++ b/core/src/test/java/com/google/zxing/pdf417/encoder/PDF417EncoderTestCase.java @@ -23,7 +23,10 @@ import java.util.UUID; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; +import com.google.zxing.Writer; import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.pdf417.PDF417Writer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -161,4 +164,44 @@ public final class PDF417EncoderTestCase extends Assert { public void testEncodeEmptyString() throws Exception { PDF417HighLevelEncoder.encodeHighLevel("", Compaction.AUTO, null, false); } + + @Test + public void testDimensions() throws Exception { + // test https://github.com/zxing/zxing/issues/1831 + String input = "0000000001000000022200000003330444400888888881010101010"; + testDimensions(input, new Dimensions(1, 30, 7, 10)); + testDimensions(input, new Dimensions(1, 40, 1, 7)); + testDimensions(input, new Dimensions(10, 30, 1, 5)); + testDimensions(input, new Dimensions(1, 3, 1, 15)); + testDimensions(input, new Dimensions(5, 30, 7, 7)); + testDimensions(input, new Dimensions(12, 12, 1, 17)); + testDimensions(input, new Dimensions(1, 30, 7, 7)); + } + + public static void testDimensions(String input, Dimensions dimensions) throws Exception { + int sourceCodeWords = 20; + int errorCorrectionCodeWords = 8; + + int[] calculated = PDF417.determineDimensions(dimensions.getMinCols(), dimensions.getMaxCols(), + dimensions.getMinRows(), dimensions.getMaxRows(), + sourceCodeWords, errorCorrectionCodeWords); + + assertNotNull(calculated); + assertEquals(2,calculated.length); + assertTrue(dimensions.getMinCols() <= calculated[0]); + assertTrue(dimensions.getMaxCols() >= calculated[0]); + assertTrue(dimensions.getMinRows() <= calculated[1]); + assertTrue(dimensions.getMaxRows() >= calculated[1]); + assertNotNull(generatePDF417BitMatrix(input, 371, null, dimensions)); + } + + public static BitMatrix generatePDF417BitMatrix(final String barcodeText, final int width, + final Integer heightRequested, final Dimensions dimensions) throws WriterException { + final Writer barcodeWriter = new PDF417Writer(); + final int height = heightRequested == null ? width / 4 : heightRequested; + Map<EncodeHintType, Object> hints = new HashMap<>(); + hints.put(EncodeHintType.MARGIN, 0); + hints.put(EncodeHintType.PDF417_DIMENSIONS, dimensions); + return barcodeWriter.encode(barcodeText, BarcodeFormat.PDF_417, width, height, hints); + } } |
