diff --git a/pom.xml b/pom.xml
index d14c929..f095a38 100755
--- a/pom.xml
+++ b/pom.xml
@@ -45,13 +45,14 @@
- 4.13.2
- 2.13.1
3.8.1
3.2.0
3.3.1
3.0.1
1.0.0.RC2
+ 4.13.2
+ 3.19.0
+ 2.13.1
@@ -66,6 +67,12 @@
${junit.version}
test
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
diff --git a/src/test/java/org/jnbis/records/CommonRecordsTest.java b/src/test/java/org/jnbis/records/CommonRecordsTest.java
new file mode 100644
index 0000000..62ff814
--- /dev/null
+++ b/src/test/java/org/jnbis/records/CommonRecordsTest.java
@@ -0,0 +1,133 @@
+package org.jnbis.records;
+
+import org.jnbis.FileUtils;
+import org.jnbis.api.Jnbis;
+import org.jnbis.api.model.Nist;
+import org.jnbis.api.model.record.SignatureImage;
+import org.jnbis.api.model.record.TransactionInformation;
+import org.jnbis.api.model.record.UserDefinedTestingImage;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author TeeSofteis
+ */
+
+@RunWith(Parameterized.class)
+public class CommonRecordsTest {
+
+ @Parameterized.Parameters(name = "{index}: {0}")
+ public static Collection data() {
+ File[] files = new File(FileUtils.absolute("ansi/references"))
+ .listFiles((f, name) -> name.endsWith(".an2"));
+
+ assert files != null;
+ return Arrays.asList(files);
+ }
+
+ private final File file;
+
+ public CommonRecordsTest(File file) {
+ this.file = file;
+ }
+
+ @Test
+ public void verify() {
+ Nist decoded = Jnbis.nist().decode(file);
+
+ verifyUserDefinedFields(decoded);
+ verifyTransactionInfo(decoded);
+
+ verifySignatureImageIfPresent(decoded.getSignatures());
+ verifyUserDefinedTestingImageIfPresent(decoded.getUserDefinedTestingImages());
+
+ verifyOtherCollections(decoded);
+ }
+
+ private void verifyUserDefinedFields(Nist decoded) {
+ assertThat(decoded.getUserDefinedTexts()).hasSize(1);
+ Map fields = decoded.getUserDefinedTexts().get(0).getUserDefinedFields();
+
+ assertThat(fields.get(0)).isNull();
+ assertThat(fields.get(1)).isIn("55", "57");
+ assertThat(fields.get(2)).isEqualTo("00");
+ assertThat(fields.get(3)).isIn(
+ "two chinese characters: 華裔",
+ "domain defined text place holder");
+
+ }
+
+ private void verifyTransactionInfo(Nist decoded) {
+ TransactionInformation info = decoded.getTransactionInfo();
+
+ assertThat(info).isNotNull();
+ assertThat(info.getLogicalRecordLength()).isBetween("158", "273");
+ assertThat(info.getTypeOfTransaction()).isIn("AMN", "FAUF", "CAR", "ABC");
+ assertThat(info.getDestinationAgencyId()).isIn("DAI000000", "Wallace");
+ assertThat(info.getOriginatingAgencyId()).isIn("MDNISTIMG", "Gormit");
+ }
+
+ private void verifyOtherCollections(Nist decoded) {
+ assertThat(decoded.getLowResGrayscaleFingerprints().size()).isIn(0, 1, 14);
+ assertThat(decoded.getHiResGrayscaleFingerprints().size()).isIn(0, 1, 2, 4, 14);
+ assertThat(decoded.getLowResBinaryFingerprints().size()).isIn(0, 1);
+ assertThat(decoded.getHiResBinaryFingerprints().size()).isIn(0, 1);
+ assertThat(decoded.getUserDefinedImages().size()).isIn(0, 1);
+ assertThat(decoded.getSignatures().size()).isIn(0, 1);
+ assertThat(decoded.getMinutiaeData().size()).isIn(0, 1, 2);
+ assertThat(decoded.getFacialAndSmtImages().size()).isIn(0, 1, 2, 6);
+ assertThat(decoded.getVariableResLatentImages().size()).isIn(0, 1, 5);
+ assertThat(decoded.getVariableResFingerprints().size()).isIn(0, 1, 2, 3, 5, 14);
+ assertThat(decoded.getVariableResPalmprints().size()).isIn(0, 2);
+ assertThat(decoded.getUserDefinedTestingImages().size()).isIn(0, 1);
+ assertThat(decoded.getIrisImages().size()).isIn(0, 1);
+ }
+
+ private void verifySignatureImageIfPresent(List images) {
+ if (images.isEmpty()) return;
+
+ SignatureImage image = images.get(0);
+ assertThat(image.getLogicalRecordLength()).isIn("48474", "455", "36012");
+ assertThat(image.getImageDesignationCharacter()).isEqualTo("1");
+ assertThat(image.getImageScanningResolution()).isEqualTo("1");
+ assertThat(image.getSignatureType()).isEqualTo("0");
+ assertThat(image.getSignatureRepresentationType()).isIn("0", "1");
+ }
+
+ private void verifyUserDefinedTestingImageIfPresent(List images) {
+ if (images.isEmpty()) return;
+
+ UserDefinedTestingImage image = images.get(0);
+
+ assertThat(image.getLogicalRecordLength()).isEqualTo("4733");
+ assertThat(image.getImageDesignationCharacter()).isEqualTo("01");
+ assertThat(image.getScaleUnits()).isEqualTo("1");
+ assertThat(image.getHorizontalPixelScale()).isEqualTo("1");
+ assertThat(image.getVerticalPixelScale()).isEqualTo("1");
+ assertThat(image.getBitsPerPixel()).isEqualTo("24");
+
+ Map userDefinedFields = image.getUserDefinedFields();
+ assertThat(userDefinedFields).hasSize(4);
+
+ // Tag 16.003
+ assertThat(userDefinedFields.get(3)).isEqualTo("Wallace\u001FGromit\u001FMcGraw");
+
+ // Tag 16.004
+ assertThat(userDefinedFields.get(4)).isEqualTo("Shaun\u001EPreston\u001EPiella Backleicht");
+
+ // Tag 16.005
+ assertThat(userDefinedFields.get(5)).isEqualTo("single value");
+
+ // Tag 16.013
+ assertThat(userDefinedFields.get(13)).isEqualTo("A1\u001FB1\u001FC1\u001EA2\u001FB2\u001FC2\u001EA3\u001FB3\u001FC3");
+ }
+}
diff --git a/src/test/java/org/jnbis/records/SignatureImageTest.java b/src/test/java/org/jnbis/records/SignatureImageTest.java
deleted file mode 100644
index a89c5d1..0000000
--- a/src/test/java/org/jnbis/records/SignatureImageTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.jnbis.records;
-
-import org.jnbis.FileUtils;
-import org.jnbis.api.Jnbis;
-import org.jnbis.api.model.Nist;
-import org.jnbis.api.model.record.SignatureImage;
-import org.junit.Test;
-
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class SignatureImageTest {
- private static final String[] FILES = {
- "ansi/references/type-8-sig.an2"
- };
-
- @Test
- public void verify() {
- String fileName = FileUtils.absolute(FILES[0]);
- Nist decoded = Jnbis.nist().decode(fileName);
-
- commonAssert(decoded);
-
- // Record 01:
- assertEquals("158", decoded.getTransactionInfo().getLogicalRecordLength()); // 1.001
- assertEquals("FAUF", decoded.getTransactionInfo().getTypeOfTransaction()); // 1.004
- assertEquals("DAI000000", decoded.getTransactionInfo().getDestinationAgencyId()); // 1.007
- assertEquals("MDNISTIMG", decoded.getTransactionInfo().getOriginatingAgencyId()); // 1.008
-
- // Record 08:
- assertEquals(1, decoded.getSignatures().size()); // only one record
-
- SignatureImage image = decoded.getSignatures().get(0);
- assertEquals("48474", image.getLogicalRecordLength()); // 8.001
- assertEquals("1", image.getImageDesignationCharacter()); // 8.002
- assertEquals("1", image.getImageScanningResolution());
- assertEquals("0", image.getSignatureType());
- assertEquals("0", image.getSignatureRepresentationType());
- }
-
- private void commonAssert(Nist decoded) {
- assertNotNull(decoded.getTransactionInfo());
- assertEquals(1, decoded.getUserDefinedTexts().size());
-
- Map userDefinedFields = decoded.getUserDefinedTexts().get(0).getUserDefinedFields();
- assertEquals("57", userDefinedFields.get(1));
- assertEquals("00", userDefinedFields.get(2));
- assertEquals("domain defined text place holder", userDefinedFields.get(3));
- }
-}
diff --git a/src/test/java/org/jnbis/records/UserDefinedTestingImageTest.java b/src/test/java/org/jnbis/records/UserDefinedTestingImageTest.java
deleted file mode 100644
index e3163fa..0000000
--- a/src/test/java/org/jnbis/records/UserDefinedTestingImageTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.jnbis.records;
-
-import org.jnbis.FileUtils;
-import org.jnbis.api.Jnbis;
-import org.jnbis.api.model.Nist;
-import org.jnbis.api.model.record.UserDefinedTestingImage;
-import org.junit.Test;
-
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * @author TeeSofteis
- */
-public class UserDefinedTestingImageTest {
- private static final String[] FILES = {
- "samples/nist/rec01_rec02_rec16.nst"
- };
-
- @Test
- public void verify() {
- Nist decoded = decode(FILES[0]);
- commonAssert(decoded);
-
- // Record 01:
- assertEquals("194", decoded.getTransactionInfo().getLogicalRecordLength()); // 1.001
- assertEquals("ABC", decoded.getTransactionInfo().getTypeOfTransaction()); // 1.004
- assertEquals("Wallace", decoded.getTransactionInfo().getDestinationAgencyId()); // 1.007
- assertEquals("Gormit", decoded.getTransactionInfo().getOriginatingAgencyId()); // 1.008
-
- assertEquals(1, decoded.getUserDefinedTestingImages().size()); // only one record
- UserDefinedTestingImage image = decoded.getUserDefinedTestingImages().get(0);
-
- // Record 16:
- assertEquals("4733", image.getLogicalRecordLength()); // 16.001
- assertEquals("01", image.getImageDesignationCharacter()); // 16.002
- assertEquals("1", image.getScaleUnits());
- assertEquals("1", image.getHorizontalPixelScale());
- assertEquals("1", image.getVerticalPixelScale());
- assertEquals("24", image.getBitsPerPixel());
-
- Map userDefinedFields = image.getUserDefinedFields();
- assertEquals(4, userDefinedFields.size());
-
- // Tag 16.003
- assertEquals("Wallace\u001FGromit\u001FMcGraw", userDefinedFields.get(3));
-
- // Tag 16.004
- assertEquals("Shaun\u001EPreston\u001EPiella Backleicht", userDefinedFields.get(4));
-
- // Tag 16.005
- assertEquals("single value", userDefinedFields.get(5));
-
- // Tag 16.013
- assertEquals("A1\u001FB1\u001FC1\u001EA2\u001FB2\u001FC2\u001EA3\u001FB3\u001FC3", userDefinedFields.get(13));
- }
-
- private void commonAssert(Nist decoded) {
- assertNotNull(decoded.getTransactionInfo());
- assertEquals(1, decoded.getUserDefinedTexts().size());
-
- Map userDefinedFields = decoded.getUserDefinedTexts().get(0).getUserDefinedFields();
- assertEquals("57", userDefinedFields.get(1));
- assertEquals("00", userDefinedFields.get(2));
- assertEquals("domain defined text place holder", userDefinedFields.get(3));
- }
-
- private Nist decode(String name) {
- String fileName = FileUtils.absolute(name);
- Nist nist = Jnbis.nist().decode(fileName);
- assertNotNull(nist);
- return nist;
- }
-}
diff --git a/src/test/resources/samples/nist/rec01_rec02_rec16.nst b/src/test/resources/ansi/references/rec01_rec02_rec16.nst.an2
similarity index 100%
rename from src/test/resources/samples/nist/rec01_rec02_rec16.nst
rename to src/test/resources/ansi/references/rec01_rec02_rec16.nst.an2