Skip to content

Commit

Permalink
add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
SingingBush committed Oct 12, 2024
1 parent 574497c commit cc31ff1
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.awt.Dimension;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.krysalis.barcode4j.BarGroup;
import org.krysalis.barcode4j.ClassicBarcodeLogicHandler;
Expand Down Expand Up @@ -184,36 +185,30 @@ private static void encodeLowLevel(String fullCodewords, int c, int r,
* @param pdf417Bean reference to the PDF417 bean for configuration access
*/
public static void generateBarcodeLogic(TwoDimBarcodeLogicHandler logic,
String msg, PDF417Bean pdf417Bean) {
String msg,
@NotNull final PDF417Bean pdf417Bean) {

int errorCorrectionLevel = pdf417Bean.getErrorCorrectionLevel();

//1. step: High-level encoding
int errorCorrectionCodeWords = PDF417ErrorCorrection.getErrorCorrectionCodewordCount(
errorCorrectionLevel);
String highLevel = PDF417HighLevelEncoder.encodeHighLevel(msg,
pdf417Bean.getEncoding(), pdf417Bean.isECIEnabled());
int errorCorrectionCodeWords = PDF417ErrorCorrection.getErrorCorrectionCodewordCount(errorCorrectionLevel);
String highLevel = PDF417HighLevelEncoder.encodeHighLevel(msg, pdf417Bean.getEncoding(), pdf417Bean.isECIEnabled());
int sourceCodeWords = highLevel.length();

Dimension dimension = determineDimensions(pdf417Bean, sourceCodeWords);

if (dimension == null) {
throw new IllegalArgumentException(
"Unable to fit message in columns");
throw new IllegalArgumentException("Unable to fit message in columns");
}

int rows = dimension.height;
int cols = dimension.width;
int pad = getNumberOfPadCodewords(sourceCodeWords,
errorCorrectionCodeWords, cols, rows);
int pad = getNumberOfPadCodewords(sourceCodeWords, errorCorrectionCodeWords, cols, rows);

//2. step: construct data codewords
int n = getNumberOfDataCodewords(sourceCodeWords, errorCorrectionLevel,
cols);
int n = getNumberOfDataCodewords(sourceCodeWords, errorCorrectionLevel, cols);
if (n > 929) {
throw new IllegalArgumentException(
"Encoded message contains to many code words, message to big ("
+ msg.length() + " bytes)");
throw new IllegalArgumentException("Encoded message contains to many code words, message to big (" + msg.length() + " bytes)");
}

final StringBuilder sb = new StringBuilder(n);
Expand Down Expand Up @@ -242,7 +237,7 @@ public static void generateBarcodeLogic(TwoDimBarcodeLogicHandler logic,
* @return dimension object containing cols as width and rows as height
*/
@Nullable
public static Dimension determineDimensions(PDF417Bean pdf417Bean, int sourceCodeWords) {
public static Dimension determineDimensions(@NotNull PDF417Bean pdf417Bean, int sourceCodeWords) {

int minCols = pdf417Bean.getMinCols();
int maxCols = pdf417Bean.getMaxCols();
Expand Down Expand Up @@ -283,4 +278,3 @@ public static Dimension determineDimensions(PDF417Bean pdf417Bean, int sourceCod
return dimension;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.krysalis.barcode4j.impl.codabar;

import org.junit.jupiter.api.Test;
import org.krysalis.barcode4j.impl.MockClassicBarcodeLogicHandler;

import static org.junit.jupiter.api.Assertions.*;

/**
* @author Samael Bate (singingbush)
* created on 12/10/2024
*/
class CodabarTest {

@Test
void testBeanType() {
final Codabar impl = new Codabar();

assertEquals(CodabarBean.class, impl.getCodabarBean().getClass());
}

@Test
void testIllegalArguments() {
final Codabar impl = new Codabar();

// due to @NotNull on args, can be one of two exceptions depending on how tests are run
assertThrows(RuntimeException.class,
() -> impl.generateBarcode(null, null),
"Expected a NullPointerException or IllegalArgumentException");
}

@Test
void testLogic() {
final StringBuffer sb = new StringBuffer();
final CodabarLogicImpl logic = new CodabarLogicImpl();
logic.generateBarcodeLogic(new MockClassicBarcodeLogicHandler(sb), "123");

final String expected = "<BC>" +
"<SBG:msg-char:1>B1W1B1W1B2W2B1</SBG>W1<SBG:msg-char:2>B1W1B1W2B1W1B2</SBG>W1<SBG:msg-char:3>B2W2B1W1B1W1B1</SBG>" +
"</BC>";

assertEquals(expected, sb.toString());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package org.krysalis.barcode4j.impl.pdf417;

import org.junit.jupiter.api.Test;
import org.krysalis.barcode4j.BarGroup;
import org.krysalis.barcode4j.TwoDimBarcodeLogicHandler;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

/**
* @author Samael Bate (singingbush)
* created on 12/10/2024
*/
class PDF417Test {

@Test
void testBeanType() {
final PDF417 impl = new PDF417();

assertEquals(PDF417Bean.class, impl.getPDF417Bean().getClass());
}

@Test
void testIllegalArguments() {
final PDF417 impl = new PDF417();

// due to @NotNull on args, can be one of two exceptions depending on how tests are run
assertThrows(RuntimeException.class,
() -> impl.generateBarcode(null, null),
"Expected a NullPointerException or IllegalArgumentException");
}

@Test
void testLogic() {
final PDF417Bean bean = new PDF417Bean();
final TwoDimBarcodeLogicHandler handler = new MockTwoDimBarcodeLogicHandler();

final PDF417LogicImpl logic = new PDF417LogicImpl();
logic.generateBarcodeLogic(handler, "123", bean);

final String expected = "<BC>" +
"<row><SBG:start-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:stop-char:null></SBG></row><row><SBG:start-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:stop-char:null></SBG></row><row><SBG:start-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:msg-char:null></SBG><SBG:stop-char:null></SBG></row>" +
"</BC>";

assertEquals(expected, handler.toString());
}

private static final class MockTwoDimBarcodeLogicHandler implements TwoDimBarcodeLogicHandler {
private final StringBuffer sb;

public MockTwoDimBarcodeLogicHandler() {
this.sb = new StringBuffer();
}

@Override
public void startRow() {
sb.append("<row>");
}

@Override
public void endRow() {
sb.append("</row>");
}

/** {@inheritDoc} */
public void startBarGroup(BarGroup type, String submsg) {
sb.append("<SBG:");
sb.append(type.getName());
sb.append(":");
sb.append(submsg);
sb.append(">");
}

/** {@inheritDoc} */
public void addBar(boolean black, int weight) {
// NO-OP
}

/** {@inheritDoc} */
public void endBarGroup() {
sb.append("</SBG>");
}

/** {@inheritDoc} */
public void startBarcode(String msg, String formattedMsg) {
sb.append("<BC>");
}

/** {@inheritDoc} */
public void endBarcode() {
sb.append("</BC>");
}

@Override
public String toString() {
return sb.toString();
}
}

}

0 comments on commit cc31ff1

Please sign in to comment.