orw changes post tab to space chagnes

This commit is contained in:
Anjali Sridhar 2024-10-12 18:28:31 -07:00
parent 9598db91c7
commit 54e16e2188
31 changed files with 836 additions and 716 deletions

View file

@ -16,7 +16,7 @@ jobs:
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Build with Maven

View file

@ -20,6 +20,9 @@
<artifactId>core</artifactId>
<version>3.5.4-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>

View file

@ -42,8 +42,7 @@ public final class Dimension {
@Override
public boolean equals(Object other) {
if (other instanceof Dimension) {
Dimension d = (Dimension) other;
if (other instanceof Dimension d) {
return width == d.width && height == d.height;
}
return false;

View file

@ -44,8 +44,7 @@ public class ResultPoint {
@Override
public final boolean equals(Object other) {
if (other instanceof ResultPoint) {
ResultPoint otherPoint = (ResultPoint) other;
if (other instanceof ResultPoint otherPoint) {
return x == otherPoint.x && y == otherPoint.y;
}
return false;

View file

@ -85,7 +85,7 @@ public final class Decoder {
byte[] rawBytes = convertBoolArrayToByteArray(correctedBits.correctBits);
String result = getEncodedData(correctedBits.correctBits);
DecoderResult decoderResult =
new DecoderResult(rawBytes, result, null, String.format("%d%%", correctedBits.ecLevel));
new DecoderResult(rawBytes, result, null, "%d%%".formatted(correctedBits.ecLevel));
decoderResult.setNumBits(correctedBits.correctBits.length);
decoderResult.setErrorsCorrected(correctedBits.errorsCorrected);
return decoderResult;

View file

@ -135,7 +135,7 @@ public final class Encoder {
layers = Math.abs(userSpecifiedLayers);
if (layers > (compact ? MAX_NB_BITS_COMPACT : MAX_NB_BITS)) {
throw new IllegalArgumentException(
String.format("Illegal value %s for layers", userSpecifiedLayers));
"Illegal value %s for layers".formatted(userSpecifiedLayers));
}
totalBitsInLayer = totalBitsInLayer(layers, compact);
wordSize = WORD_SIZE[layers];

View file

@ -176,7 +176,7 @@ final class State {
@Override
public String toString() {
return String.format("%s bits=%d bytes=%d", HighLevelEncoder.MODE_NAMES[mode], bitCount, binaryShiftByteCount);
return "%s bits=%d bytes=%d".formatted(HighLevelEncoder.MODE_NAMES[mode], bitCount, binaryShiftByteCount);
}
private static int calculateBinaryShiftCost(int binaryShiftByteCount) {

View file

@ -367,10 +367,12 @@ public final class Code128Writer extends OneDimensionalCodeWriter {
private enum Charset { A, B, C, NONE }
private enum Latch { A, B, C, SHIFT, NONE }
static final String A = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\u0000\u0001\u0002" +
"\u0003\u0004\u0005\u0006\u0007\u0008\u0009\n\u000B\u000C\r\u000E\u000F\u0010\u0011" +
"\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
"\u00FF";
static final String A = """
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\

\
\
ÿ""";
static final String B = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr" +
"stuvwxyz{|}~\u007F\u00FF";

View file

@ -183,7 +183,7 @@ final class DecodedBitStreamParser {
codeIndex < codewords.length &&
codewords[codeIndex] != MACRO_PDF417_TERMINATOR &&
codewords[codeIndex] != BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {
fileId.append(String.format("%03d", codewords[codeIndex]));
fileId.append("%03d".formatted(codewords[codeIndex]));
codeIndex++;
}
if (fileId.length() == 0) {

View file

@ -66,29 +66,31 @@ public final class DecoderTest extends Assert {
@Test
public void testAztecResult() throws FormatException {
BitMatrix matrix = BitMatrix.parse(
"X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X X X \n" +
" X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X \n" +
" X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X \n",
"""
X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X\s
X X X X X X X X X X\s
X X X X X X X X\s
X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X \s
X X X X X X X X X X X X X X X X X\s
X X X X X X X X X\s
X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X \s
X X X X X X X X X X X \s
X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X\s
X X X X X X X X X X X X X X\s
X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X\s
X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X\s
X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X \s
""",
"X ", " ");
AztecDetectorResult r = new AztecDetectorResult(matrix, NO_POINTS, false, 30, 2);
DecoderResult result = new Decoder().decode(r);
@ -104,25 +106,27 @@ public final class DecoderTest extends Assert {
@Test
public void testAztecResultECI() throws FormatException {
BitMatrix matrix = BitMatrix.parse(
" X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X \n" +
" X X X X X X X X X X X X X X X X X \n" +
" X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X \n" +
" X X X X X X X X X \n" +
"X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X \n" +
" X X X X X X X X X X X X X \n" +
" X X X \n" +
"X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X \n" +
" X X X X X X X X X X X \n" +
"X X X X X X X X \n",
"""
X X X X X X \s
X X X X X X X X X X X X \s
X X X X\s
X X X X X X X X X X X X X X X X X \s
X X \s
X X X X X X X X X X X X \s
X X X X X X X X \s
X X X X X X X X X X X X \s
X X X X X X X X \s
X X X X X X X X X \s
X X X X X X X X X\s
X X X X X X X X X X X X \s
X X X X X X\s
X X X X X X X X X X X X X\s
X X X \s
X X X X X X X X X X X X X X X X X \s
X X X X X X X X X\s
X X X X X X X X X X X \s
X X X X X X X X \s
""",
"X ", " ");
AztecDetectorResult r = new AztecDetectorResult(matrix, NO_POINTS, false, 15, 1);
DecoderResult result = new Decoder().decode(r);
@ -131,34 +135,35 @@ public final class DecoderTest extends Assert {
@Test(expected = FormatException.class)
public void testDecodeTooManyErrors() throws FormatException {
BitMatrix matrix = BitMatrix.parse(""
+ "X X . X . . . X X . . . X . . X X X . X . X X X X X . \n"
+ "X X . . X X . . . . . X X . . . X X . . . X . X . . X \n"
+ "X . . . X X . . X X X . X X . X X X X . X X . . X . . \n"
+ ". . . . X . X X . . X X . X X . X . X X X X . X . . X \n"
+ "X X X . . X X X X X . . . . . X X . . . X . X . X . X \n"
+ "X X . . . . . . . . X . . . X . X X X . X . . X . . . \n"
+ "X X . . X . . . . . X X . . . . . X . . . . X . . X X \n"
+ ". . . X . X . X . . . . . X X X X X X . . . . . . X X \n"
+ "X . . . X . X X X X X X . . X X X . X . X X X X X X . \n"
+ "X . . X X X . X X X X X X X X X X X X X . . . X . X X \n"
+ ". . . . X X . . . X . . . . . . . X X . . . X X . X . \n"
+ ". . . X X X . . X X . X X X X X . X . . X . . . . . . \n"
+ "X . . . . X . X . X . X . . . X . X . X X . X X . X X \n"
+ "X . X . . X . X . X . X . X . X . X . . . . . X . X X \n"
+ "X . X X X . . X . X . X . . . X . X . X X X . . . X X \n"
+ "X X X X X X X X . X . X X X X X . X . X . X . X X X . \n"
+ ". . . . . . . X . X . . . . . . . X X X X . . . X X X \n"
+ "X X . . X . . X . X X X X X X X X X X X X X . . X . X \n"
+ "X X X . X X X X . . X X X X . . X . . . . X . . X X X \n"
+ ". . . . X . X X X . . . . X X X X . . X X X X . . . . \n"
+ ". . X . . X . X . . . X . X X . X X . X . . . X . X . \n"
+ "X X . . X . . X X X X X X X . . X . X X X X X X X . . \n"
+ "X . X X . . X X . . . . . X . . . . . . X X . X X X . \n"
+ "X . . X X . . X X . X . X . . . . X . X . . X . . X . \n"
+ "X . X . X . . X . X X X X X X X X . X X X X . . X X . \n"
+ "X X X X . . . X . . X X X . X X . . X . . . . X X X . \n"
+ "X X . X . X . . . X . X . . . . X X . X . . X X . . . \n",
BitMatrix matrix = BitMatrix.parse("""
X X . X . . . X X . . . X . . X X X . X . X X X X X .\s
X X . . X X . . . . . X X . . . X X . . . X . X . . X\s
X . . . X X . . X X X . X X . X X X X . X X . . X . .\s
. . . . X . X X . . X X . X X . X . X X X X . X . . X\s
X X X . . X X X X X . . . . . X X . . . X . X . X . X\s
X X . . . . . . . . X . . . X . X X X . X . . X . . .\s
X X . . X . . . . . X X . . . . . X . . . . X . . X X\s
. . . X . X . X . . . . . X X X X X X . . . . . . X X\s
X . . . X . X X X X X X . . X X X . X . X X X X X X .\s
X . . X X X . X X X X X X X X X X X X X . . . X . X X\s
. . . . X X . . . X . . . . . . . X X . . . X X . X .\s
. . . X X X . . X X . X X X X X . X . . X . . . . . .\s
X . . . . X . X . X . X . . . X . X . X X . X X . X X\s
X . X . . X . X . X . X . X . X . X . . . . . X . X X\s
X . X X X . . X . X . X . . . X . X . X X X . . . X X\s
X X X X X X X X . X . X X X X X . X . X . X . X X X .\s
. . . . . . . X . X . . . . . . . X X X X . . . X X X\s
X X . . X . . X . X X X X X X X X X X X X X . . X . X\s
X X X . X X X X . . X X X X . . X . . . . X . . X X X\s
. . . . X . X X X . . . . X X X X . . X X X X . . . .\s
. . X . . X . X . . . X . X X . X X . X . . . X . X .\s
X X . . X . . X X X X X X X . . X . X X X X X X X . .\s
X . X X . . X X . . . . . X . . . . . . X X . X X X .\s
X . . X X . . X X . X . X . . . . X . X . . X . . X .\s
X . X . X . . X . X X X X X X X X . X X X X . . X X .\s
X X X X . . . X . . X X X . X X . . X . . . . X X X .\s
X X . X . X . . . X . X . . . . X X . X . . X X . . .\s
""",
"X ", ". ");
AztecDetectorResult r = new AztecDetectorResult(matrix, NO_POINTS, true, 16, 4);
new Decoder().decode(r);
@ -166,34 +171,35 @@ public final class DecoderTest extends Assert {
@Test(expected = FormatException.class)
public void testDecodeTooManyErrors2() throws FormatException {
BitMatrix matrix = BitMatrix.parse(""
+ ". X X . . X . X X . . . X . . X X X . . . X X . X X . \n"
+ "X X . X X . . X . . . X X . . . X X . X X X . X . X X \n"
+ ". . . . X . . . X X X . X X . X X X X . X X . . X . . \n"
+ "X . X X . . X . . . X X . X X . X . X X . . . . . X . \n"
+ "X X . X . . X . X X . . . . . X X . . . . . X . . . X \n"
+ "X . . X . . . . . . X . . . X . X X X X X X X . . . X \n"
+ "X . . X X . . X . . X X . . . . . X . . . . . X X X . \n"
+ ". . X X X X . X . . . . . X X X X X X . . . . . . X X \n"
+ "X . . . X . X X X X X X . . X X X . X . X X X X X X . \n"
+ "X . . X X X . X X X X X X X X X X X X X . . . X . X X \n"
+ ". . . . X X . . . X . . . . . . . X X . . . X X . X . \n"
+ ". . . X X X . . X X . X X X X X . X . . X . . . . . . \n"
+ "X . . . . X . X . X . X . . . X . X . X X . X X . X X \n"
+ "X . X . . X . X . X . X . X . X . X . . . . . X . X X \n"
+ "X . X X X . . X . X . X . . . X . X . X X X . . . X X \n"
+ "X X X X X X X X . X . X X X X X . X . X . X . X X X . \n"
+ ". . . . . . . X . X . . . . . . . X X X X . . . X X X \n"
+ "X X . . X . . X . X X X X X X X X X X X X X . . X . X \n"
+ "X X X . X X X X . . X X X X . . X . . . . X . . X X X \n"
+ ". . X X X X X . X . . . . X X X X . . X X X . X . X . \n"
+ ". . X X . X . X . . . X . X X . X X . . . . X X . . . \n"
+ "X . . . X . X . X X X X X X . . X . X X X X X . X . . \n"
+ ". X . . . X X X . . . . . X . . . . . X X X X X . X . \n"
+ "X . . X . X X X X . X . X . . . . X . X X . X . . X . \n"
+ "X . . . X X . X . X X X X X X X X . X X X X . . X X . \n"
+ ". X X X X . . X . . X X X . X X . . X . . . . X X X . \n"
+ "X X . . . X X . . X . X . . . . X X . X . . X . X . X \n",
BitMatrix matrix = BitMatrix.parse("""
. X X . . X . X X . . . X . . X X X . . . X X . X X .\s
X X . X X . . X . . . X X . . . X X . X X X . X . X X\s
. . . . X . . . X X X . X X . X X X X . X X . . X . .\s
X . X X . . X . . . X X . X X . X . X X . . . . . X .\s
X X . X . . X . X X . . . . . X X . . . . . X . . . X\s
X . . X . . . . . . X . . . X . X X X X X X X . . . X\s
X . . X X . . X . . X X . . . . . X . . . . . X X X .\s
. . X X X X . X . . . . . X X X X X X . . . . . . X X\s
X . . . X . X X X X X X . . X X X . X . X X X X X X .\s
X . . X X X . X X X X X X X X X X X X X . . . X . X X\s
. . . . X X . . . X . . . . . . . X X . . . X X . X .\s
. . . X X X . . X X . X X X X X . X . . X . . . . . .\s
X . . . . X . X . X . X . . . X . X . X X . X X . X X\s
X . X . . X . X . X . X . X . X . X . . . . . X . X X\s
X . X X X . . X . X . X . . . X . X . X X X . . . X X\s
X X X X X X X X . X . X X X X X . X . X . X . X X X .\s
. . . . . . . X . X . . . . . . . X X X X . . . X X X\s
X X . . X . . X . X X X X X X X X X X X X X . . X . X\s
X X X . X X X X . . X X X X . . X . . . . X . . X X X\s
. . X X X X X . X . . . . X X X X . . X X X . X . X .\s
. . X X . X . X . . . X . X X . X X . . . . X X . . .\s
X . . . X . X . X X X X X X . . X . X X X X X . X . .\s
. X . . . X X X . . . . . X . . . . . X X X X X . X .\s
X . . X . X X X X . X . X . . . . X . X X . X . . X .\s
X . . . X X . X . X X X X X X X X . X X X X . . X X .\s
. X X X X . . X . . X X X . X X . . X . . . . X X X .\s
X X . . . X X . . X . X . . . . X X . X . . X . X . X\s
""",
"X ", ". ");
AztecDetectorResult r = new AztecDetectorResult(matrix, NO_POINTS, true, 16, 4);
new Decoder().decode(r);

View file

@ -59,29 +59,31 @@ public final class EncoderTest extends Assert {
@Test
public void testEncode1() {
testEncode("This is an example Aztec symbol for Wikipedia.", true, 3,
"X X X X X X X X \n" +
"X X X X X X X X X X \n" +
"X X X X X X X X X X X \n" +
"X X X X X X X X X X X \n" +
" X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X \n" +
"X X X X X X X X X X \n" +
" X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X \n" +
" X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X \n" +
" X X X X X X X X X X \n" +
" X X X X X X X X X X \n");
"""
X X X X X X X X \s
X X X X X X X X X X\s
X X X X X X X X X X X \s
X X X X X X X X X X X\s
X X X X X X X X X X X \s
X X X X X X X X X X X X X \s
X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X\s
X X X X X X X X X X\s
X X X X X X X X X X \s
X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X \s
X X X X X X X X \s
X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X \s
X X X \s
X X X X X X X X X X\s
X X X X X X X X X X\s
""");
}
@Test
@ -89,47 +91,49 @@ public final class EncoderTest extends Assert {
testEncode("Aztec Code is a public domain 2D matrix barcode symbology" +
" of nominally square symbols built on a square grid with a " +
"distinctive square bullseye pattern at their center.", false, 6,
" X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X \n" +
" X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X \n");
"""
X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X \s
X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X \s
""");
}
@Test

View file

@ -100,10 +100,13 @@ public final class AddressBookParsedResultTestCase extends Assert {
@Test
public void testQuotedPrintable() {
doTest("BEGIN:VCARD\r\nADR;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;" +
"=38=38=20=4C=79=6E=62=72=6F=6F=6B=0D=0A=43=\r\n" +
"=4F=20=36=39=39=\r\n" +
"=39=39;;;\r\nEND:VCARD",
doTest("""
BEGIN:VCARD
ADR;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;\
=38=38=20=4C=79=6E=62=72=6F=6F=6B=0D=0A=43=
=4F=20=36=39=39=
=39=39;;;
END:VCARD""",
null, null, null, new String[] {"88 Lynbrook\r\nCO 69999"},
null, null, null, null, null, null, null);
}

View file

@ -51,100 +51,132 @@ public final class CalendarParsedResultTestCase extends Assert {
@Test
public void testStartEnd() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DTEND:20080505T234555Z\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
DTEND:20080505T234555Z
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", "20080505T234555Z");
}
@Test
public void testNoVCalendar() {
doTest(
"BEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DTEND:20080505T234555Z\r\n" +
"END:VEVENT",
"""
BEGIN:VEVENT
DTSTART:20080504T123456Z
DTEND:20080505T234555Z
END:VEVENT""",
null, null, null, "20080504T123456Z", "20080505T234555Z");
}
@Test
public void testStart() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", null);
}
@Test
public void testDuration() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DURATION:P1D\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
DURATION:P1D
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", "20080505T123456Z");
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DURATION:P1DT2H3M4S\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
DURATION:P1DT2H3M4S
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", "20080505T143800Z");
}
@Test
public void testSummary() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"SUMMARY:foo\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:foo
DTSTART:20080504T123456Z
END:VEVENT
END:VCALENDAR""",
null, "foo", null, "20080504T123456Z", null);
}
@Test
public void testLocation() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"LOCATION:Miami\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
LOCATION:Miami
DTSTART:20080504T123456Z
END:VEVENT
END:VCALENDAR""",
null, null, "Miami", "20080504T123456Z", null);
}
@Test
public void testDescription() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DESCRIPTION:This is a test\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
DESCRIPTION:This is a test
END:VEVENT
END:VCALENDAR""",
"This is a test", null, null, "20080504T123456Z", null);
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"DESCRIPTION:This is a test\r\n\t with a continuation\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
DESCRIPTION:This is a test
with a continuation
END:VEVENT
END:VCALENDAR""",
"This is a test with a continuation", null, null, "20080504T123456Z", null);
}
@Test
public void testGeo() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"GEO:-12.345;-45.678\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
GEO:-12.345;-45.678
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", null, null, null, -12.345, -45.678);
}
@Test
public void testBadGeo() {
// Not parsed as VEVENT
Result fakeResult = new Result("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"GEO:-12.345\r\n" +
"END:VEVENT\r\nEND:VCALENDAR", null, null, BarcodeFormat.QR_CODE);
Result fakeResult = new Result("""
BEGIN:VCALENDAR
BEGIN:VEVENT
GEO:-12.345
END:VEVENT
END:VCALENDAR""", null, null, BarcodeFormat.QR_CODE);
ParsedResult result = ResultParser.parseResult(fakeResult);
assertSame(ParsedResultType.TEXT, result.getType());
}
@ -152,42 +184,49 @@ public final class CalendarParsedResultTestCase extends Assert {
@Test
public void testOrganizer() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"ORGANIZER:mailto:bob@example.org\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
ORGANIZER:mailto:bob@example.org
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", null, "bob@example.org", null, Double.NaN, Double.NaN);
}
@Test
public void testAttendees() {
doTest(
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n" +
"DTSTART:20080504T123456Z\r\n" +
"ATTENDEE:mailto:bob@example.org\r\n" +
"ATTENDEE:mailto:alice@example.org\r\n" +
"END:VEVENT\r\nEND:VCALENDAR",
"""
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20080504T123456Z
ATTENDEE:mailto:bob@example.org
ATTENDEE:mailto:alice@example.org
END:VEVENT
END:VCALENDAR""",
null, null, null, "20080504T123456Z", null, null,
new String[] {"bob@example.org", "alice@example.org"}, Double.NaN, Double.NaN);
}
@Test
public void testVEventEscapes() {
doTest("BEGIN:VEVENT\n" +
"CREATED:20111109T110351Z\n" +
"LAST-MODIFIED:20111109T170034Z\n" +
"DTSTAMP:20111109T170034Z\n" +
"UID:0f6d14ef-6cb7-4484-9080-61447ccdf9c2\n" +
"SUMMARY:Summary line\n" +
"CATEGORIES:Private\n" +
"DTSTART;TZID=Europe/Vienna:20111110T110000\n" +
"DTEND;TZID=Europe/Vienna:20111110T120000\n" +
"LOCATION:Location\\, with\\, escaped\\, commas\n" +
"DESCRIPTION:Meeting with a friend\\nlook at homepage first\\n\\n\n" +
" \\n\n" +
"SEQUENCE:1\n" +
"X-MOZ-GENERATION:1\n" +
"END:VEVENT",
doTest("""
BEGIN:VEVENT
CREATED:20111109T110351Z
LAST-MODIFIED:20111109T170034Z
DTSTAMP:20111109T170034Z
UID:0f6d14ef-6cb7-4484-9080-61447ccdf9c2
SUMMARY:Summary line
CATEGORIES:Private
DTSTART;TZID=Europe/Vienna:20111110T110000
DTEND;TZID=Europe/Vienna:20111110T120000
LOCATION:Location\\, with\\, escaped\\, commas
DESCRIPTION:Meeting with a friend\\nlook at homepage first\\n\\n
\\n
SEQUENCE:1
X-MOZ-GENERATION:1
END:VEVENT""",
"Meeting with a friend\nlook at homepage first\n\n\n \n",
"Summary line",
"Location, with, escaped, commas",
@ -197,10 +236,11 @@ public final class CalendarParsedResultTestCase extends Assert {
@Test
public void testAllDayValueDate() {
doTest("BEGIN:VEVENT\n" +
"DTSTART;VALUE=DATE:20111110\n" +
"DTEND;VALUE=DATE:20111110\n" +
"END:VEVENT",
doTest("""
BEGIN:VEVENT
DTSTART;VALUE=DATE:20111110
DTEND;VALUE=DATE:20111110
END:VEVENT""",
null, null, null, "20111110T000000Z", "20111110T000000Z");
}
@ -247,4 +287,4 @@ public final class CalendarParsedResultTestCase extends Assert {
}
}
}
}

View file

@ -212,22 +212,40 @@ public final class ParsedReaderResultTestCase extends Assert {
@Test
public void testVEvent() {
// UTC times
doTestResult("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\n" +
"DTEND:20080505T234555Z\r\nEND:VEVENT\r\nEND:VCALENDAR",
doTestResult("""
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:foo
DTSTART:20080504T123456Z
DTEND:20080505T234555Z
END:VEVENT
END:VCALENDAR""",
"foo\n" + formatTime(2008, 5, 4, 12, 34, 56) + "\n" + formatTime(2008, 5, 5, 23, 45, 55),
ParsedResultType.CALENDAR);
doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\n" +
"DTEND:20080505T234555Z\r\nEND:VEVENT", "foo\n" + formatTime(2008, 5, 4, 12, 34, 56) + "\n" +
doTestResult("""
BEGIN:VEVENT
SUMMARY:foo
DTSTART:20080504T123456Z
DTEND:20080505T234555Z
END:VEVENT""", "foo\n" + formatTime(2008, 5, 4, 12, 34, 56) + "\n" +
formatTime(2008, 5, 5, 23, 45, 55),
ParsedResultType.CALENDAR);
// Local times
doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456\r\n" +
"DTEND:20080505T234555\r\nEND:VEVENT", "foo\n" + formatTime(2008, 5, 4, 12, 34, 56) + "\n" +
doTestResult("""
BEGIN:VEVENT
SUMMARY:foo
DTSTART:20080504T123456
DTEND:20080505T234555
END:VEVENT""", "foo\n" + formatTime(2008, 5, 4, 12, 34, 56) + "\n" +
formatTime(2008, 5, 5, 23, 45, 55),
ParsedResultType.CALENDAR);
// Date only (all day event)
doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504\r\n" +
"DTEND:20080505\r\nEND:VEVENT", "foo\n" + formatDate(2008, 5, 4) + "\n" +
doTestResult("""
BEGIN:VEVENT
SUMMARY:foo
DTSTART:20080504
DTEND:20080505
END:VEVENT""", "foo\n" + formatDate(2008, 5, 4) + "\n" +
formatDate(2008, 5, 5),
ParsedResultType.CALENDAR);
// Start time only

View file

@ -42,7 +42,6 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
@ -66,10 +65,10 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
public static Path buildTestBase(String testBasePathSuffix) {
// A little workaround to prevent aggravation in my IDE
Path testBase = Paths.get(testBasePathSuffix);
Path testBase = Path.of(testBasePathSuffix);
if (!Files.exists(testBase)) {
// try starting with 'core' since the test base is often given as the project root
testBase = Paths.get("core").resolve(testBasePathSuffix);
testBase = Path.of("core").resolve(testBasePathSuffix);
}
return testBase;
}
@ -143,7 +142,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
int[] tryHarderMisreadCounts = new int[testCount];
for (Path testImage : imageFiles) {
log.info(String.format("Starting %s", testImage));
log.info("Starting %s".formatted(testImage));
BufferedImage image = ImageIO.read(testImage.toFile());
@ -181,7 +180,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
misreadCounts[x]++;
}
} catch (ReaderException ignored) {
log.fine(String.format("could not read at rotation %f", rotation));
log.fine("could not read at rotation %f".formatted(rotation));
}
try {
if (decode(bitmap, rotation, expectedText, expectedMetadata, true)) {
@ -190,7 +189,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
tryHarderMisreadCounts[x]++;
}
} catch (ReaderException ignored) {
log.fine(String.format("could not read at rotation %f w/TH", rotation));
log.fine("could not read at rotation %f w/TH".formatted(rotation));
}
}
}
@ -203,17 +202,17 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
for (int x = 0; x < testResults.size(); x++) {
TestResult testResult = testResults.get(x);
log.info(String.format("Rotation %d degrees:", (int) testResult.getRotation()));
log.info(String.format(" %d of %d images passed (%d required)",
passedCounts[x], imageFiles.size(), testResult.getMustPassCount()));
log.info("Rotation %d degrees:".formatted((int) testResult.getRotation()));
log.info(" %d of %d images passed (%d required)".formatted(
passedCounts[x], imageFiles.size(), testResult.getMustPassCount()));
int failed = imageFiles.size() - passedCounts[x];
log.info(String.format(" %d failed due to misreads, %d not detected",
misreadCounts[x], failed - misreadCounts[x]));
log.info(String.format(" %d of %d images passed with try harder (%d required)",
tryHarderCounts[x], imageFiles.size(), testResult.getTryHarderCount()));
log.info(" %d failed due to misreads, %d not detected".formatted(
misreadCounts[x], failed - misreadCounts[x]));
log.info(" %d of %d images passed with try harder (%d required)".formatted(
tryHarderCounts[x], imageFiles.size(), testResult.getTryHarderCount()));
failed = imageFiles.size() - tryHarderCounts[x];
log.info(String.format(" %d failed due to misreads, %d not detected",
tryHarderMisreadCounts[x], failed - tryHarderMisreadCounts[x]));
log.info(" %d failed due to misreads, %d not detected".formatted(
tryHarderMisreadCounts[x], failed - tryHarderMisreadCounts[x]));
totalFound += passedCounts[x] + tryHarderCounts[x];
totalMustPass += testResult.getMustPassCount() + testResult.getTryHarderCount();
totalMisread += misreadCounts[x] + tryHarderMisreadCounts[x];
@ -221,18 +220,18 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
}
int totalTests = imageFiles.size() * testCount * 2;
log.info(String.format("Decoded %d images out of %d (%d%%, %d required)",
totalFound, totalTests, totalFound * 100 / totalTests, totalMustPass));
log.info("Decoded %d images out of %d (%d%%, %d required)".formatted(
totalFound, totalTests, totalFound * 100 / totalTests, totalMustPass));
if (totalFound > totalMustPass) {
log.warning(String.format("+++ Test too lax by %d images", totalFound - totalMustPass));
log.warning("+++ Test too lax by %d images".formatted(totalFound - totalMustPass));
} else if (totalFound < totalMustPass) {
log.warning(String.format("--- Test failed by %d images", totalMustPass - totalFound));
log.warning("--- Test failed by %d images".formatted(totalMustPass - totalFound));
}
if (totalMisread < totalMaxMisread) {
log.warning(String.format("+++ Test expects too many misreads by %d images", totalMaxMisread - totalMisread));
log.warning("+++ Test expects too many misreads by %d images".formatted(totalMaxMisread - totalMisread));
} else if (totalMisread > totalMaxMisread) {
log.warning(String.format("--- Test had too many misreads by %d images", totalMisread - totalMaxMisread));
log.warning("--- Test had too many misreads by %d images".formatted(totalMisread - totalMaxMisread));
}
// Then run through again and assert if any failed
@ -266,7 +265,7 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
Map<?,?> expectedMetadata,
boolean tryHarder) throws ReaderException {
String suffix = String.format(" (%srotation: %d)", tryHarder ? "try harder, " : "", (int) rotation);
String suffix = " (%srotation: %d)".formatted(tryHarder ? "try harder, " : "", (int) rotation);
Map<DecodeHintType,Object> hints = this.hints.clone();
if (tryHarder) {
@ -289,15 +288,15 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
}
if (expectedFormat != result.getBarcodeFormat()) {
log.info(String.format("Format mismatch: expected '%s' but got '%s'%s",
expectedFormat, result.getBarcodeFormat(), suffix));
log.info("Format mismatch: expected '%s' but got '%s'%s".formatted(
expectedFormat, result.getBarcodeFormat(), suffix));
return false;
}
String resultText = result.getText();
if (!expectedText.equals(resultText)) {
log.info(String.format("Content mismatch: expected '%s' but got '%s'%s",
expectedText, resultText, suffix));
log.info("Content mismatch: expected '%s' but got '%s'%s".formatted(
expectedText, resultText, suffix));
return false;
}
@ -307,8 +306,8 @@ public abstract class AbstractBlackBoxTestCase extends Assert {
Object expectedValue = metadatum.getValue();
Object actualValue = resultMetadata == null ? null : resultMetadata.get(key);
if (!expectedValue.equals(actualValue)) {
log.info(String.format("Metadata mismatch for key '%s': expected '%s' but got '%s'",
key, expectedValue, actualValue));
log.info("Metadata mismatch for key '%s': expected '%s' but got '%s'".formatted(
key, expectedValue, actualValue));
return false;
}
}

View file

@ -83,7 +83,7 @@ public abstract class AbstractNegativeBlackBoxTestCase extends AbstractBlackBoxT
List<Path> imageFiles = getImageFiles();
int[] falsePositives = new int[testResults.size()];
for (Path testImage : imageFiles) {
log.info(String.format("Starting %s", testImage));
log.info("Starting %s".formatted(testImage));
BufferedImage image = ImageIO.read(testImage.toFile());
if (image == null) {
throw new IOException("Could not read image: " + testImage);
@ -106,16 +106,16 @@ public abstract class AbstractNegativeBlackBoxTestCase extends AbstractBlackBoxT
}
if (totalFalsePositives < totalAllowed) {
log.warning(String.format("+++ Test too lax by %d images", totalAllowed - totalFalsePositives));
log.warning("+++ Test too lax by %d images".formatted(totalAllowed - totalFalsePositives));
} else if (totalFalsePositives > totalAllowed) {
log.warning(String.format("--- Test failed by %d images", totalFalsePositives - totalAllowed));
log.warning("--- Test failed by %d images".formatted(totalFalsePositives - totalAllowed));
}
for (int x = 0; x < testResults.size(); x++) {
TestResult testResult = testResults.get(x);
log.info(String.format("Rotation %d degrees: %d of %d images were false positives (%d allowed)",
(int) testResult.getRotation(), falsePositives[x], imageFiles.size(),
testResult.getFalsePositivesAllowed()));
log.info("Rotation %d degrees: %d of %d images were false positives (%d allowed)".formatted(
(int) testResult.getRotation(), falsePositives[x], imageFiles.size(),
testResult.getFalsePositivesAllowed()));
assertTrue("Rotation " + testResult.getRotation() + " degrees: Too many false positives found",
falsePositives[x] <= testResult.getFalsePositivesAllowed());
}
@ -135,8 +135,8 @@ public abstract class AbstractNegativeBlackBoxTestCase extends AbstractBlackBoxT
Result result;
try {
result = getReader().decode(bitmap);
log.info(String.format("Found false positive: '%s' with format '%s' (rotation: %d)",
result.getText(), result.getBarcodeFormat(), (int) rotationInDegrees));
log.info("Found false positive: '%s' with format '%s' (rotation: %d)".formatted(
result.getText(), result.getBarcodeFormat(), (int) rotationInDegrees));
return false;
} catch (ReaderException re) {
// continue
@ -147,8 +147,8 @@ public abstract class AbstractNegativeBlackBoxTestCase extends AbstractBlackBoxT
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
try {
result = getReader().decode(bitmap, hints);
log.info(String.format("Try harder found false positive: '%s' with format '%s' (rotation: %d)",
result.getText(), result.getBarcodeFormat(), (int) rotationInDegrees));
log.info("Try harder found false positive: '%s' with format '%s' (rotation: %d)".formatted(
result.getText(), result.getBarcodeFormat(), (int) rotationInDegrees));
return false;
} catch (ReaderException re) {
// continue

View file

@ -513,7 +513,7 @@ public final class ReedSolomonTestCase extends Assert {
private static String arrayToString(int[] data) {
StringBuilder sb = new StringBuilder("{");
for (int i = 0; i < data.length; i++) {
sb.append(String.format(i > 0 ? ",%X" : "%X", data[i]));
sb.append((i > 0 ? ",%X" : "%X").formatted(data[i]));
}
return sb.append('}').toString();
}

View file

@ -80,7 +80,7 @@ public final class PDF417BlackBox4TestCase extends AbstractBlackBoxTestCase {
Path testBase = getTestBase();
for (Entry<String,List<Path>> testImageGroup : imageFiles.entrySet()) {
log.fine(String.format("Starting Image Group %s", testImageGroup.getKey()));
log.fine("Starting Image Group %s".formatted(testImageGroup.getKey()));
String fileBaseName = testImageGroup.getKey();
String expectedText;
@ -133,23 +133,23 @@ public final class PDF417BlackBox4TestCase extends AbstractBlackBoxTestCase {
int numberOfTests = imageFiles.keySet().size();
for (int x = 0; x < testResults.size(); x++) {
TestResult testResult = testResults.get(x);
log.info(String.format("Rotation %d degrees:", (int) testResult.getRotation()));
log.info(String.format(" %d of %d images passed (%d required)", passedCounts[x], numberOfTests,
log.info("Rotation %d degrees:".formatted((int) testResult.getRotation()));
log.info(" %d of %d images passed (%d required)".formatted(passedCounts[x], numberOfTests,
testResult.getMustPassCount()));
log.info(String.format(" %d of %d images passed with try harder (%d required)", tryHarderCounts[x],
log.info(" %d of %d images passed with try harder (%d required)".formatted(tryHarderCounts[x],
numberOfTests, testResult.getTryHarderCount()));
totalFound += passedCounts[x] + tryHarderCounts[x];
totalMustPass += testResult.getMustPassCount() + testResult.getTryHarderCount();
}
int totalTests = numberOfTests * testCount * 2;
log.info(String.format("Decoded %d images out of %d (%d%%, %d required)", totalFound, totalTests, totalFound *
log.info("Decoded %d images out of %d (%d%%, %d required)".formatted(totalFound, totalTests, totalFound *
100 /
totalTests, totalMustPass));
if (totalFound > totalMustPass) {
log.warning(String.format("+++ Test too lax by %d images", totalFound - totalMustPass));
log.warning("+++ Test too lax by %d images".formatted(totalFound - totalMustPass));
} else if (totalFound < totalMustPass) {
log.warning(String.format("--- Test failed by %d images", totalMustPass - totalFound));
log.warning("--- Test failed by %d images".formatted(totalMustPass - totalFound));
}
// Then run through again and assert if any failed

View file

@ -41,30 +41,32 @@ public final class PDF417WriterTestCase extends Assert {
BitMatrix matrix = writer.encode("Hello Google", BarcodeFormat.PDF_417, size, size, hints);
assertNotNull(matrix);
String expected =
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n" +
"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n";
"""
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X\s
""";
assertEquals(expected, matrix.toString());
}

View file

@ -33,7 +33,6 @@ import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.EnumMap;
import java.util.Map;
@ -43,13 +42,13 @@ import java.util.Map;
*/
public final class QRCodeWriterTestCase extends Assert {
private static final Path BASE_IMAGE_PATH = Paths.get("src/test/resources/golden/qrcode/");
private static final Path BASE_IMAGE_PATH = Path.of("src/test/resources/golden/qrcode/");
private static BufferedImage loadImage(String fileName) throws IOException {
Path file = BASE_IMAGE_PATH.resolve(fileName);
if (!Files.exists(file)) {
// try starting with 'core' since the test base is often given as the project root
file = Paths.get("core/").resolve(BASE_IMAGE_PATH).resolve(fileName);
file = Path.of("core/").resolve(BASE_IMAGE_PATH).resolve(fileName);
}
assertTrue("Please download and install test images, and run from the 'core' directory", Files.exists(file));
return ImageIO.read(file.toFile());

View file

@ -97,34 +97,36 @@ public final class EncoderTestCase extends Assert {
@Test
public void testEncode() throws WriterException {
QRCode qrCode = Encoder.encode("ABCDEF", ErrorCorrectionLevel.H);
String expected = "<<\n" +
" mode: ALPHANUMERIC\n" +
" ecLevel: H\n" +
" version: 1\n" +
" maskPattern: 0\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" +
" 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" +
" 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" +
" 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" +
" 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" +
" 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" +
" 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" +
" 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" +
" 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" +
" 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" +
">>\n";
String expected = """
<<
mode: ALPHANUMERIC
ecLevel: H
version: 1
maskPattern: 0
matrix:
1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1
1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0
1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0
0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0
0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0
1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1
1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1
1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0
1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -148,34 +150,36 @@ public final class EncoderTestCase extends Assert {
Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
hints.put(EncodeHintType.CHARACTER_SET, "UTF8");
QRCode qrCode = Encoder.encode("hello", ErrorCorrectionLevel.H, hints);
String expected = "<<\n" +
" mode: BYTE\n" +
" ecLevel: H\n" +
" version: 1\n" +
" maskPattern: 3\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0\n" +
" 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0\n" +
" 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1\n" +
" 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0\n" +
" 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0\n" +
" 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0\n" +
" 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0\n" +
" 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0\n" +
">>\n";
String expected = """
<<
mode: BYTE
ecLevel: H
version: 1
maskPattern: 3
matrix:
1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0
0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0
0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1
1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0
0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1
1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0
1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0
1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0
1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0
1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0
1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -185,34 +189,36 @@ public final class EncoderTestCase extends Assert {
hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
// Nihon in Kanji
QRCode qrCode = Encoder.encode("\u65e5\u672c", ErrorCorrectionLevel.M, hints);
String expected = "<<\n" +
" mode: KANJI\n" +
" ecLevel: M\n" +
" version: 1\n" +
" maskPattern: 4\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1\n" +
" 0 1 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1\n" +
" 1 1 1 1 0 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 1\n" +
" 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 0\n" +
" 0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1\n" +
" 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0\n" +
" 1 1 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 1 1 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 0 0 0\n" +
" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 0\n" +
">>\n";
String expected = """
<<
mode: KANJI
ecLevel: M
version: 1
maskPattern: 4
matrix:
1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1
0 1 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1
1 1 1 1 0 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 1
1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 0
0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1
0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0
1 1 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0
1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1
1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 1 1 1
1 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1
1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 0 0 0
1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1 1 0
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -221,34 +227,36 @@ public final class EncoderTestCase extends Assert {
Map<EncodeHintType,Object> hints = new EnumMap<>(EncodeHintType.class);
hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
QRCode qrCode = Encoder.encode("0123", ErrorCorrectionLevel.M, hints);
String expected = "<<\n" +
" mode: NUMERIC\n" +
" ecLevel: M\n" +
" version: 1\n" +
" maskPattern: 0\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0\n" +
" 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0\n" +
" 0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0\n" +
" 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0\n" +
" 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1\n" +
" 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0\n" +
" 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0\n" +
" 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0\n" +
" 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1\n" +
">>\n";
String expected = """
<<
mode: NUMERIC
ecLevel: M
version: 1
maskPattern: 0
matrix:
1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0
1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0
0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0
0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1
0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0
1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0
1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1
1 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1
1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0
1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -290,34 +298,36 @@ public final class EncoderTestCase extends Assert {
hints.put(EncodeHintType.CHARACTER_SET, "UTF8");
hints.put(EncodeHintType.GS1_FORMAT, true);
QRCode qrCode = Encoder.encode("hello", ErrorCorrectionLevel.H, hints);
String expected = "<<\n" +
" mode: BYTE\n" +
" ecLevel: H\n" +
" version: 1\n" +
" maskPattern: 6\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0\n" +
" 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 0\n" +
" 0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1\n" +
" 0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 1 0 0 1 0 1\n" +
" 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0\n" +
" 1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 1\n" +
" 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 0\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 0 0\n" +
" 1 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 0 1 1 0\n" +
" 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0\n" +
" 1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0\n" +
">>\n";
String expected = """
<<
mode: BYTE
ecLevel: H
version: 1
maskPattern: 6
matrix:
1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 0
0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1
0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 1 0 0 1 0 1
1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0
1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 1
0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 1
1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 0
1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 0 0
1 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0
1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 0 1 1 0
1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 1 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0
1 1 1 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -913,70 +923,74 @@ public final class EncoderTestCase extends Assert {
}
private static void verifyGS1EncodedData(QRCode qrCode) {
String expected = "<<\n" +
" mode: ALPHANUMERIC\n" +
" ecLevel: H\n" +
" version: 2\n" +
" maskPattern: 2\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0\n" +
" 0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1\n" +
" 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1\n" +
" 1 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1\n" +
" 0 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 1\n" +
" 0 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0\n" +
" 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0\n" +
" 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1\n" +
" 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 0 0 1\n" +
" 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0\n" +
" 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0\n" +
" 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 1 1 0 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1\n" +
" 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1\n" +
">>\n";
String expected = """
<<
mode: ALPHANUMERIC
ecLevel: H
version: 2
maskPattern: 2
matrix:
1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1
0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1
1 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 0 0 1
0 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 1
0 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0
1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0
1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1
1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 0 0 1
1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0
1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 1 1 1
1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1
1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1
1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0
1 0 1 1 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 1 1 0 1 0 1
1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1
1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1
>>
""";
assertEquals(expected, qrCode.toString());
}
private static void verifyNotGS1EncodedData(QRCode qrCode) {
String expected = "<<\n" +
" mode: ALPHANUMERIC\n" +
" ecLevel: H\n" +
" version: 1\n" +
" maskPattern: 0\n" +
" matrix:\n" +
" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" +
" 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" +
" 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" +
" 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" +
" 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" +
" 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" +
" 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" +
" 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" +
" 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" +
" 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" +
">>\n";
String expected = """
<<
mode: ALPHANUMERIC
ecLevel: H
version: 1
maskPattern: 0
matrix:
1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1
1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0
1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0
0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0
0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0
1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1
1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1
1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0
1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1
>>
""";
assertEquals(expected, qrCode.toString());
}

View file

@ -62,27 +62,29 @@ public final class MatrixUtilTestCase extends Assert {
MatrixUtil.clearMatrix(matrix);
MatrixUtil.embedBasicPatterns(Version.getVersionForNumber(1), matrix);
String expected =
" 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 \n" +
" 0 \n" +
" 1 \n" +
" 0 \n" +
" 1 \n" +
" 0 0 0 0 0 0 0 0 1 \n" +
" 1 1 1 1 1 1 1 0 \n" +
" 1 0 0 0 0 0 1 0 \n" +
" 1 0 1 1 1 0 1 0 \n" +
" 1 0 1 1 1 0 1 0 \n" +
" 1 0 1 1 1 0 1 0 \n" +
" 1 0 0 0 0 0 1 0 \n" +
" 1 1 1 1 1 1 1 0 \n";
"""
1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 \s
0 \s
1 \s
0 \s
1 \s
0 0 0 0 0 0 0 0 1 \s
1 1 1 1 1 1 1 0 \s
1 0 0 0 0 0 1 0 \s
1 0 1 1 1 0 1 0 \s
1 0 1 1 1 0 1 0 \s
1 0 1 1 1 0 1 0 \s
1 0 0 0 0 0 1 0 \s
1 1 1 1 1 1 1 0 \s
""";
assertEquals(expected, matrix.toString());
}
@ -94,31 +96,33 @@ public final class MatrixUtilTestCase extends Assert {
MatrixUtil.clearMatrix(matrix);
MatrixUtil.embedBasicPatterns(Version.getVersionForNumber(2), matrix);
String expected =
" 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 \n" +
" 0 \n" +
" 1 \n" +
" 0 \n" +
" 1 \n" +
" 0 \n" +
" 1 \n" +
" 0 \n" +
" 1 1 1 1 1 1 \n" +
" 0 0 0 0 0 0 0 0 1 1 0 0 0 1 \n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 \n" +
" 1 0 0 0 0 0 1 0 1 0 0 0 1 \n" +
" 1 0 1 1 1 0 1 0 1 1 1 1 1 \n" +
" 1 0 1 1 1 0 1 0 \n" +
" 1 0 1 1 1 0 1 0 \n" +
" 1 0 0 0 0 0 1 0 \n" +
" 1 1 1 1 1 1 1 0 \n";
"""
1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 \s
0 \s
1 \s
0 \s
1 \s
0 \s
1 \s
0 \s
1 1 1 1 1 1 \s
0 0 0 0 0 0 0 0 1 1 0 0 0 1 \s
1 1 1 1 1 1 1 0 1 0 1 0 1 \s
1 0 0 0 0 0 1 0 1 0 0 0 1 \s
1 0 1 1 1 0 1 0 1 1 1 1 1 \s
1 0 1 1 1 0 1 0 \s
1 0 1 1 1 0 1 0 \s
1 0 0 0 0 0 1 0 \s
1 1 1 1 1 1 1 0 \s
""";
assertEquals(expected, matrix.toString());
}
@ -129,27 +133,29 @@ public final class MatrixUtilTestCase extends Assert {
MatrixUtil.clearMatrix(matrix);
MatrixUtil.embedTypeInfo(ErrorCorrectionLevel.M, 5, matrix);
String expected =
" 0 \n" +
" 1 \n" +
" 1 \n" +
" 1 \n" +
" 0 \n" +
" 0 \n" +
" \n" +
" 1 \n" +
" 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0\n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" 0 \n" +
" 0 \n" +
" 0 \n" +
" 0 \n" +
" 0 \n" +
" 0 \n" +
" 1 \n";
"""
0 \s
1 \s
1 \s
1 \s
0 \s
0 \s
\s
1 \s
1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0
\s
\s
\s
\s
\s
0 \s
0 \s
0 \s
0 \s
0 \s
0 \s
1 \s
""";
assertEquals(expected, matrix.toString());
}
@ -162,27 +168,29 @@ public final class MatrixUtilTestCase extends Assert {
MatrixUtil.clearMatrix(matrix);
MatrixUtil.maybeEmbedVersionInfo(Version.getVersionForNumber(7), matrix);
String expected =
" 0 0 1 \n" +
" 0 1 0 \n" +
" 0 1 0 \n" +
" 0 1 1 \n" +
" 1 1 1 \n" +
" 0 0 0 \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" 0 0 0 0 1 0 \n" +
" 0 1 1 1 1 0 \n" +
" 1 0 0 1 1 0 \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n" +
" \n";
"""
0 0 1 \s
0 1 0 \s
0 1 0 \s
0 1 1 \s
1 1 1 \s
0 0 0 \s
\s
\s
\s
\s
0 0 0 0 1 0 \s
0 1 1 1 1 0 \s
1 0 0 1 1 0 \s
\s
\s
\s
\s
\s
\s
\s
\s
""";
assertEquals(expected, matrix.toString());
}
@ -195,27 +203,29 @@ public final class MatrixUtilTestCase extends Assert {
BitArray bits = new BitArray();
MatrixUtil.embedDataBits(bits, -1, matrix);
String expected =
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" +
" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n";
"""
1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
""";
assertEquals(expected, matrix.toString());
}
@ -236,27 +246,29 @@ public final class MatrixUtilTestCase extends Assert {
3, // Mask pattern 3
matrix);
String expected =
" 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" +
" 1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1\n" +
" 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1\n" +
" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0\n" +
" 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0\n" +
" 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0\n" +
" 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0\n" +
" 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0\n" +
" 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1\n" +
" 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1\n" +
" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0\n" +
" 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1\n" +
" 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0\n" +
" 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0\n" +
" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0\n" +
" 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0\n";
"""
1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1
1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1
1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0
1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0
1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0
1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0
0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1
1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0
1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0
1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1
1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0
1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0
1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0
1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0
""";
assertEquals(expected, matrix.toString());
}

View file

@ -62,13 +62,15 @@ public final class QRCodeTestCase extends Assert {
public void testToString1() {
QRCode qrCode = new QRCode();
String expected =
"<<\n" +
" mode: null\n" +
" ecLevel: null\n" +
" version: null\n" +
" maskPattern: -1\n" +
" matrix: null\n" +
">>\n";
"""
<<
mode: null
ecLevel: null
version: null
maskPattern: -1
matrix: null
>>
""";
assertEquals(expected, qrCode.toString());
}
@ -86,34 +88,36 @@ public final class QRCodeTestCase extends Assert {
}
}
qrCode.setMatrix(matrix);
String expected = "<<\n" +
" mode: BYTE\n" +
" ecLevel: H\n" +
" version: 1\n" +
" maskPattern: 3\n" +
" matrix:\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
" 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\n" +
" 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0\n" +
">>\n";
String expected = """
<<
mode: BYTE
ecLevel: H
version: 1
maskPattern: 3
matrix:
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
>>
""";
assertEquals(expected, qrCode.toString());
}

View file

@ -20,6 +20,9 @@
<artifactId>javase</artifactId>
<version>3.5.4-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>

View file

@ -22,7 +22,7 @@ import com.google.zxing.common.BitMatrix;
import com.beust.jcommander.JCommander;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.util.EnumMap;
import java.util.Locale;
import java.util.Map;
@ -59,7 +59,7 @@ public final class CommandLineEncoder {
config.contents.get(0), config.barcodeFormat, config.width,
config.height, hints);
MatrixToImageWriter.writeToPath(matrix, config.imageFormat,
Paths.get(outFileString));
Path.of(outFileString));
}
}

View file

@ -23,7 +23,6 @@ import java.net.URISyntaxException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@ -64,7 +63,7 @@ public final class CommandLineRunner {
uri = new URI(inputPath);
} catch (URISyntaxException use) {
// Assume it must be a file
if (!Files.exists(Paths.get(inputPath))) {
if (!Files.exists(Path.of(inputPath))) {
throw use;
}
uri = new URI("file", inputPath, null);
@ -109,7 +108,7 @@ public final class CommandLineRunner {
List<URI> expanded = new ArrayList<>();
for (URI input : inputs) {
if (isFileOrDir(input)) {
Path inputPath = Paths.get(input);
Path inputPath = Path.of(input);
if (Files.isDirectory(inputPath)) {
try (DirectoryStream<Path> childPaths = Files.newDirectoryStream(inputPath)) {
for (Path childPath : childPaths) {
@ -126,7 +125,7 @@ public final class CommandLineRunner {
for (int i = 0; i < expanded.size(); i++) {
URI input = expanded.get(i);
if (input.getScheme() == null) {
expanded.set(i, Paths.get(input.getRawPath()).toUri());
expanded.set(i, Path.of(input.getRawPath()).toUri());
}
}
return expanded;
@ -137,7 +136,7 @@ public final class CommandLineRunner {
for (URI input : inputs) {
boolean retain;
if (isFileOrDir(input)) {
Path inputPath = Paths.get(input);
Path inputPath = Path.of(input);
retain =
!inputPath.getFileName().toString().startsWith(".") &&
(recursive || !Files.isDirectory(inputPath));
@ -153,7 +152,7 @@ public final class CommandLineRunner {
private static boolean isExpandable(Iterable<URI> inputs) {
for (URI input : inputs) {
if (isFileOrDir(input) && Files.isDirectory(Paths.get(input))) {
if (isFileOrDir(input) && Files.isDirectory(Path.of(input))) {
return true;
}
}

View file

@ -39,7 +39,6 @@ import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -88,11 +87,11 @@ final class DecodeWorker implements Callable<Integer> {
Path outDir;
String inputFileName;
if ("file".equals(input.getScheme())) {
Path inputPath = Paths.get(input);
Path inputPath = Path.of(input);
outDir = inputPath.getParent();
inputFileName = inputPath.getFileName().toString();
} else {
outDir = Paths.get(".").toRealPath();
outDir = Path.of(".").toRealPath();
String path = input.getPath();
if (path == null) {
inputFileName = "input";
@ -172,7 +171,7 @@ final class DecodeWorker implements Callable<Integer> {
if (rawBytes != null) {
for (byte b : rawBytes) {
rawData.append(String.format("%02X", b & 0xff));
rawData.append("%02X".formatted(b & 0xff));
rawData.append(" ");
}
rawData.setLength(rawData.length() - 1); // chop off final space

View file

@ -35,7 +35,6 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -77,7 +76,7 @@ public final class HtmlAssetTranslator {
"(all|lang1[,lang2 ...]) (all|file1.html[ file2.html ...])");
return;
}
Path assetsDir = Paths.get(args[0]);
Path assetsDir = Path.of(args[0]);
Collection<String> languagesToTranslate = parseLanguagesToTranslate(assetsDir, args[1]);
List<String> restOfArgs = Arrays.asList(args).subList(2, args.length);
Collection<String> fileNamesToTranslate = parseFileNamesToTranslate(assetsDir, restOfArgs);

View file

@ -27,7 +27,6 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Collection;
@ -92,7 +91,7 @@ public final class StringsResourceTranslator {
private StringsResourceTranslator() {}
public static void main(String[] args) throws IOException {
Path resDir = Paths.get(args[0]);
Path resDir = Path.of(args[0]);
Path valueDir = resDir.resolve("values");
Path stringsFile = valueDir.resolve("strings.xml");
Collection<String> forceRetranslation = Arrays.asList(args).subList(1, args.length);

24
pom.xml
View file

@ -64,7 +64,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>17</java.version>
<android.home>${env.ANDROID_HOME}</android.home>
<proguard.plugin.version>2.6.1</proguard.plugin.version>
<!-- This can't reference project.version as some subprojects version differently -->
@ -74,6 +74,23 @@
<build>
<plugins>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.42.0</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.migrate.UpgradeToJava17</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-migrate-java</artifactId>
<version>2.26.1</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
@ -140,12 +157,11 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<arg>-Xlint:all</arg>
<arg>-Xlint:-serial</arg>
</compilerArgs>
<release>${java.version}</release>
</configuration>
</plugin>
<plugin>
@ -395,7 +411,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.4.0</version>
<version>3.5.0</version>
<configuration>
<configLocation>src/checkstyle/checkstyle.xml</configLocation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>

View file

@ -38,6 +38,7 @@
<properties>
<gwt.version>2.10.0</gwt.version>
<java.version>17</java.version>
</properties>
<build>