11 Commits
Author SHA1 Message Date
Enrique Zamudio 3c17b05bbc 1.10.2 2014-12-04 10:30:03 -06:00
Enrique Zamudio 3e3fbaa3fa fix #26 2014-12-04 10:27:55 -06:00
Enrique Zamudio ba486239bd fix #27 2014-12-04 10:27:28 -06:00
Enrique Zamudio c57ad2c5ee fix #31 2014-11-28 12:06:07 -06:00
Enrique Zamudio 6b7ec73e92 mark length final for #31 2014-11-28 11:49:50 -06:00
Enrique Zamudio 0f3cdec460 1.10.1 2014-04-10 17:07:33 -05:00
Enrique Zamudio 327041d3c0 fix #24 2014-04-10 17:07:25 -05:00
Enrique Zamudio a8f699343f tests for #24 2014-04-10 17:07:16 -05:00
Enrique Zamudio a09b72e66e junit 4.11 does have assertNotEquals 2014-03-05 17:22:15 -06:00
Enrique Zamudio 1cbda9aaa9 encoding tests 2014-03-05 17:13:27 -06:00
Enrique Zamudio bb1b23b282 moved tests to proper packages 2014-03-05 16:54:32 -06:00
22 changed files with 144 additions and 114 deletions
+5 -5
View File
@@ -1,7 +1,7 @@
apply plugin:'java' apply plugin:'java'
apply plugin: 'maven' apply plugin: 'maven'
defaultTasks 'build' defaultTasks 'build'
version='1.10.0' version='1.10.2'
description='Java implementation of the ISO 8583 protocol, focused on making the creation, edition and reading of ISO8583 messages as simple and flexible as possible.' description='Java implementation of the ISO 8583 protocol, focused on making the creation, edition and reading of ISO8583 messages as simple and flexible as possible.'
sourceCompatibility=6 sourceCompatibility=6
targetCompatibility=6 targetCompatibility=6
@@ -17,9 +17,9 @@ configurations {
} }
dependencies { dependencies {
compile 'org.slf4j:slf4j-api:1.7.5' compile 'org.slf4j:slf4j-api:1.7.7'
testCompile 'junit:junit:4.11' testCompile 'junit:junit:4.11'
testRuntime 'org.slf4j:slf4j-simple:1.7.5' testRuntime 'org.slf4j:slf4j-simple:1.7.7'
} }
tasks.javadoc.options.use=true tasks.javadoc.options.use=true
@@ -34,7 +34,7 @@ task sourcesJar(type:Jar) {
classifier='sources' classifier='sources'
} }
tasks.withType(Compile) { Compile compile -> tasks.withType(AbstractCompile) { AbstractCompile compile ->
compile.options.debug = true compile.options.debug = true
compile.options.compilerArgs = ['-Xlint:all'] compile.options.compilerArgs = ['-Xlint:all']
} }
@@ -56,7 +56,7 @@ uploadArchives {
beforeDeployment { MavenDeployment deployment -> beforeDeployment { MavenDeployment deployment ->
signing.signPom(deployment) signing.signPom(deployment)
} }
repository(url:'http://oss.sonatype.org/service/local/staging/deploy/maven2/') { repository(url:'https://oss.sonatype.org/service/local/staging/deploy/maven2/') {
authentication(userName:nexusUsername, password:nexusPassword) authentication(userName:nexusUsername, password:nexusPassword)
} }
pom.project { pom.project {
@@ -496,4 +496,10 @@ public class IsoMessage {
} }
} }
/** Remove the specified fields from the message. */
public void removeFields(int... idx) {
for (int i : idx) {
setField(i, null);
}
}
} }
@@ -373,7 +373,7 @@ public class MessageFactory<T extends IsoMessage> {
throw new ParseException("Insufficient length for secondary bitmap", minlength); throw new ParseException("Insufficient length for secondary bitmap", minlength);
} }
if (forceStringEncoding) { if (forceStringEncoding) {
byte[] _bb = new String(buf, isoHeaderLength+4, 16, encoding).getBytes(); byte[] _bb = new String(buf, isoHeaderLength+20, 16, encoding).getBytes();
System.arraycopy(_bb, 0, bitmapBuffer, 20+isoHeaderLength, 16); System.arraycopy(_bb, 0, bitmapBuffer, 20+isoHeaderLength, 16);
} }
for (int i = isoHeaderLength + 20; i < isoHeaderLength + 36; i++) { for (int i = isoHeaderLength + 20; i < isoHeaderLength + 36; i++) {
@@ -32,7 +32,7 @@ import com.solab.iso8583.IsoValue;
public abstract class FieldParseInfo { public abstract class FieldParseInfo {
protected IsoType type; protected IsoType type;
protected int length; protected final int length;
private String encoding = System.getProperty("file.encoding"); private String encoding = System.getProperty("file.encoding");
protected boolean forceStringDecoding; protected boolean forceStringDecoding;
private CustomField<?> decoder; private CustomField<?> decoder;
@@ -137,7 +137,7 @@ public abstract class FieldParseInfo {
protected int decodeLength(byte[] buf, int pos, int digits) throws UnsupportedEncodingException { protected int decodeLength(byte[] buf, int pos, int digits) throws UnsupportedEncodingException {
if (forceStringDecoding) { if (forceStringDecoding) {
return Integer.parseInt(new String(buf, pos, digits, encoding)); return Integer.parseInt(new String(buf, pos, digits, encoding), 10);
} else if (digits == 3) { } else if (digits == 3) {
return ((buf[pos] - 48) * 100) + ((buf[pos + 1] - 48) * 10) + (buf[pos + 2] - 48); return ((buf[pos] - 48) * 100) + ((buf[pos + 1] - 48) * 10) + (buf[pos + 2] - 48);
} else { } else {
@@ -49,22 +49,23 @@ public class LlbinParseInfo extends FieldParseInfo {
throw new ParseException(String.format("Insufficient LLBIN header field %d", throw new ParseException(String.format("Insufficient LLBIN header field %d",
field), pos); field), pos);
} }
length = decodeLength(buf, pos, 2); final int len = decodeLength(buf, pos, 2);
if (length < 0) { if (len < 0) {
throw new ParseException(String.format("Invalid LLBIN field %d length %d pos %d", throw new ParseException(String.format("Invalid LLBIN field %d length %d pos %d",
field, length, pos), pos); field, len, pos), pos);
} }
if (length+pos+2 > buf.length) { if (len+pos+2 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for LLBIN field %d, pos %d (LEN states '%s')", "Insufficient data for LLBIN field %d, pos %d (LEN states '%s')",
field, pos, new String(buf, pos, 2)), pos); field, pos, new String(buf, pos, 2)), pos);
} }
byte[] binval = length == 0 ? new byte[0] : HexCodec.hexDecode(new String(buf, pos + 2, length)); byte[] binval = len == 0 ? new byte[0] : HexCodec.hexDecode(
new String(buf, pos + 2, len));
if (custom == null) { if (custom == null) {
return new IsoValue<byte[]>(type, binval, binval.length, null); return new IsoValue<byte[]>(type, binval, binval.length, null);
} else if (custom instanceof CustomBinaryField) { } else if (custom instanceof CustomBinaryField) {
try { try {
T dec = ((CustomBinaryField<T>)custom).decodeBinaryField(buf, pos + 2, length); T dec = ((CustomBinaryField<T>)custom).decodeBinaryField(buf, pos + 2, len);
return dec == null ? new IsoValue<byte[]>(type, binval, binval.length, null) : return dec == null ? new IsoValue<byte[]>(type, binval, binval.length, null) :
new IsoValue<T>(type, dec, 0, custom); new IsoValue<T>(type, dec, 0, custom);
} catch (IndexOutOfBoundsException ex) { } catch (IndexOutOfBoundsException ex) {
@@ -74,7 +75,7 @@ public class LlbinParseInfo extends FieldParseInfo {
} }
} else { } else {
try { try {
T dec = custom.decodeField(new String(buf, pos + 2, length)); T dec = custom.decodeField(new String(buf, pos + 2, len));
return dec == null ? new IsoValue<byte[]>(type, binval, binval.length, null) : return dec == null ? new IsoValue<byte[]>(type, binval, binval.length, null) :
new IsoValue<T>(type, dec, binval.length, custom); new IsoValue<T>(type, dec, binval.length, custom);
} catch (IndexOutOfBoundsException ex) { } catch (IndexOutOfBoundsException ex) {
@@ -98,7 +99,7 @@ public class LlbinParseInfo extends FieldParseInfo {
} }
final int l = (((buf[pos] & 0xf0) >> 4) * 10) + (buf[pos] & 0x0f); final int l = (((buf[pos] & 0xf0) >> 4) * 10) + (buf[pos] & 0x0f);
if (l < 0) { if (l < 0) {
throw new ParseException(String.format("Invalid bin LLBIN length %d pos %d", length, pos), pos); throw new ParseException(String.format("Invalid bin LLBIN length %d pos %d", l, pos), pos);
} }
if (l+pos+1 > buf.length) { if (l+pos+1 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
@@ -46,34 +46,35 @@ public class LllvarParseInfo extends FieldParseInfo {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for LLLVAR header field %d pos %d", field, pos), pos); "Insufficient data for LLLVAR header field %d pos %d", field, pos), pos);
} }
length = decodeLength(buf, pos, 3); final int len = decodeLength(buf, pos, 3);
if (length < 0) { if (len < 0) {
throw new ParseException(String.format("Invalid LLLVAR length %d field %d pos %d", throw new ParseException(String.format("Invalid LLLVAR length %d field %d pos %d",
length, field, pos), pos); len, field, pos), pos);
} else if (length+pos+3 > buf.length) { } else if (len+pos+3 > buf.length) {
throw new ParseException(String.format("Insufficient data for LLLVAR field %d, pos %d", throw new ParseException(String.format("Insufficient data for LLLVAR field %d, pos %d",
field, pos), pos); field, pos), pos);
} }
String _v; String _v;
try { try {
_v = length == 0 ? "" : new String(buf, pos + 3, length, getCharacterEncoding()); _v = len == 0 ? "" : new String(buf, pos + 3, len, getCharacterEncoding());
} catch (IndexOutOfBoundsException ex) { } catch (IndexOutOfBoundsException ex) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for LLLVAR header, field %d pos %d", field, pos), pos); "Insufficient data for LLLVAR header, field %d pos %d", field, pos), pos);
} }
//This is new: if the String's length is different from the specified length in the buffer, //This is new: if the String's length is different from the specified length in the
//there are probably some extended characters. So we create a String from the rest of the buffer, //buffer, there are probably some extended characters. So we create a String from
//and then cut it to the specified length. //the rest of the buffer, and then cut it to the specified length.
if (_v.length() != length) { if (_v.length() != len) {
_v = new String(buf, pos + 3, buf.length-pos-3, getCharacterEncoding()).substring(0, length); _v = new String(buf, pos + 3, buf.length-pos-3,
getCharacterEncoding()).substring(0, len);
} }
if (custom == null) { if (custom == null) {
return new IsoValue<String>(type, _v, length, null); return new IsoValue<String>(type, _v, len, null);
} else { } else {
T decoded = custom.decodeField(_v); T decoded = custom.decodeField(_v);
//If decode fails, return string; otherwise use the decoded object and its codec //If decode fails, return string; otherwise use the decoded object and its codec
return decoded == null ? new IsoValue<String>(type, _v, length, null) : return decoded == null ? new IsoValue<String>(type, _v, len, null) :
new IsoValue<T>(type, decoded, length, custom); new IsoValue<T>(type, decoded, len, custom);
} }
} }
@@ -86,20 +87,22 @@ public class LllvarParseInfo extends FieldParseInfo {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for bin LLLVAR header, field %d pos %d", field, pos), pos); "Insufficient data for bin LLLVAR header, field %d pos %d", field, pos), pos);
} }
length = ((buf[pos] & 0x0f) * 100) + (((buf[pos + 1] & 0xf0) >> 4) * 10) + (buf[pos + 1] & 0x0f); final int len = ((buf[pos] & 0x0f) * 100) + (((buf[pos + 1] & 0xf0) >> 4) * 10) + (buf[pos + 1] & 0x0f);
if (length < 0) { if (len < 0) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Invalid bin LLLVAR length %d, field %d pos %d", length, field, pos), pos); "Invalid bin LLLVAR length %d, field %d pos %d", len, field, pos), pos);
} else if (length+pos+2 > buf.length) { } else if (len+pos+2 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for bin LLLVAR field %d, pos %d", field, pos), pos); "Insufficient data for bin LLLVAR field %d, pos %d", field, pos), pos);
} }
if (custom == null) { if (custom == null) {
return new IsoValue<String>(type, new String(buf, pos + 2, length, getCharacterEncoding()), null); return new IsoValue<String>(type, new String(buf, pos + 2, len, getCharacterEncoding()), null);
} else { } else {
IsoValue<T> v = new IsoValue<T>(type, custom.decodeField(new String(buf, pos + 2, length, getCharacterEncoding())), custom); IsoValue<T> v = new IsoValue<T>(type, custom.decodeField(
new String(buf, pos + 2, len, getCharacterEncoding())), custom);
if (v.getValue() == null) { if (v.getValue() == null) {
return new IsoValue<String>(type, new String(buf, pos + 2, length, getCharacterEncoding()), null); return new IsoValue<String>(type,
new String(buf, pos + 2, len, getCharacterEncoding()), null);
} }
return v; return v;
} }
@@ -40,37 +40,41 @@ public class LlvarParseInfo extends FieldParseInfo {
final int pos, final CustomField<T> custom) final int pos, final CustomField<T> custom)
throws ParseException, UnsupportedEncodingException { throws ParseException, UnsupportedEncodingException {
if (pos < 0) { if (pos < 0) {
throw new ParseException(String.format("Invalid LLVAR field %d %d", field, pos), pos);
} else if (pos+2 > buf.length) {
throw new ParseException(String.format("Insufficient data for LLVAR header, pos %d", pos), pos);
}
length = decodeLength(buf, pos, 2);
if (length < 0) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Invalid LLVAR length %d, field %d pos %d", length, field, pos), pos); "Invalid LLVAR field %d %d", field, pos), pos);
} else if (length+pos+2 > buf.length) { } else if (pos+2 > buf.length) {
throw new ParseException(String.format(
"Insufficient data for LLVAR header, pos %d", pos), pos);
}
final int len = decodeLength(buf, pos, 2);
if (len < 0) {
throw new ParseException(String.format(
"Invalid LLVAR length %d, field %d pos %d", len, field, pos), pos);
} else if (len+pos+2 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for LLVAR field %d, pos %d", field, pos), pos); "Insufficient data for LLVAR field %d, pos %d", field, pos), pos);
} }
String _v; String _v;
try { try {
_v = length == 0 ? "" : new String(buf, pos + 2, length, getCharacterEncoding()); _v = len == 0 ? "" : new String(buf, pos + 2, len, getCharacterEncoding());
} catch (IndexOutOfBoundsException ex) { } catch (IndexOutOfBoundsException ex) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for LLVAR header, field %d pos %d", field, pos), pos); "Insufficient data for LLVAR header, field %d pos %d", field, pos), pos);
} }
//This is new: if the String's length is different from the specified length in the buffer, //This is new: if the String's length is different from the specified
//there are probably some extended characters. So we create a String from the rest of the buffer, // length in the buffer, there are probably some extended characters.
//and then cut it to the specified length. // So we create a String from the rest of the buffer, and then cut it to
if (_v.length() != length) { // the specified length.
_v = new String(buf, pos + 2, buf.length-pos-2, getCharacterEncoding()).substring(0, length); if (_v.length() != len) {
_v = new String(buf, pos + 2, buf.length-pos-2,
getCharacterEncoding()).substring(0, len);
} }
if (custom == null) { if (custom == null) {
return new IsoValue<String>(type, _v, length, null); return new IsoValue<String>(type, _v, len, null);
} else { } else {
T dec = custom.decodeField(_v); T dec = custom.decodeField(_v);
return dec == null ? new IsoValue<String>(type, _v, length, null) : return dec == null ? new IsoValue<String>(type, _v, len, null) :
new IsoValue<T>(type, dec, length, custom); new IsoValue<T>(type, dec, len, custom);
} }
} }
@@ -83,22 +87,25 @@ public class LlvarParseInfo extends FieldParseInfo {
field, pos), pos); field, pos), pos);
} else if (pos+1 > buf.length) { } else if (pos+1 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for bin LLVAR header, field %d pos %d", field, pos), pos); "Insufficient data for bin LLVAR header, field %d pos %d",
field, pos), pos);
} }
length = (((buf[pos] & 0xf0) >> 4) * 10) + (buf[pos] & 0x0f); final int len = (((buf[pos] & 0xf0) >> 4) * 10) + (buf[pos] & 0x0f);
if (length < 0) { if (len < 0) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Invalid bin LLVAR length %d, field %d pos %d", length, field, pos), pos); "Invalid bin LLVAR length %d, field %d pos %d", len, field, pos), pos);
} }
if (length+pos+1 > buf.length) { if (len+pos+1 > buf.length) {
throw new ParseException(String.format( throw new ParseException(String.format(
"Insufficient data for bin LLVAR field %d, pos %d", field, pos), pos); "Insufficient data for bin LLVAR field %d, pos %d", field, pos), pos);
} }
if (custom == null) { if (custom == null) {
return new IsoValue<String>(type, new String(buf, pos + 1, length, getCharacterEncoding()), null); return new IsoValue<String>(type, new String(buf, pos + 1, len,
getCharacterEncoding()), null);
} else { } else {
T dec = custom.decodeField(new String(buf, pos + 1, length, getCharacterEncoding())); T dec = custom.decodeField(new String(buf, pos + 1, len, getCharacterEncoding()));
return dec == null ? new IsoValue<String>(type, new String(buf, pos + 1, length, getCharacterEncoding()), null) : return dec == null ? new IsoValue<String>(type,
new String(buf, pos + 1, len, getCharacterEncoding()), null) :
new IsoValue<T>(type, dec, custom); new IsoValue<T>(type, dec, custom);
} }
} }
@@ -8,7 +8,7 @@
<!ATTLIST template type NMTOKEN #REQUIRED > <!ATTLIST template type NMTOKEN #REQUIRED >
<!ATTLIST template extends NMTOKEN #IMPLIED > <!ATTLIST template extends NMTOKEN #IMPLIED >
<!ELEMENT parse ( field+ ) > <!ELEMENT parse ( field* ) >
<!ATTLIST parse type NMTOKEN #REQUIRED > <!ATTLIST parse type NMTOKEN #REQUIRED >
<!ATTLIST parse extends NMTOKEN #IMPLIED > <!ATTLIST parse extends NMTOKEN #IMPLIED >
@@ -1,6 +1,4 @@
package j8583; package com.solab.iso8583;
import com.solab.iso8583.CustomField;
/** This is an example of a custom field codec, which converts between strings and instances of this same class. /** This is an example of a custom field codec, which converts between strings and instances of this same class.
* It's used to test the encoding and decoding of custom fields by the message factory. * It's used to test the encoding and decoding of custom fields by the message factory.
@@ -1,17 +1,14 @@
package j8583; package com.solab.iso8583;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import com.solab.iso8583.IsoType;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.MessageFactory;
import com.solab.iso8583.util.HexCodec; import com.solab.iso8583.util.HexCodec;
/** Test binary message encoding and binary fields. */ /** Test binary message encoding and binary fields. */
@@ -1,9 +1,5 @@
package j8583; package com.solab.iso8583;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.IsoType;
import com.solab.iso8583.IsoValue;
import com.solab.iso8583.MessageFactory;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@@ -1,9 +1,5 @@
package j8583; package com.solab.iso8583;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.IsoType;
import com.solab.iso8583.IsoValue;
import com.solab.iso8583.MessageFactory;
import com.solab.iso8583.parse.*; import com.solab.iso8583.parse.*;
import com.solab.iso8583.util.HexCodec; import com.solab.iso8583.util.HexCodec;
import org.junit.Assert; import org.junit.Assert;
@@ -1,4 +1,4 @@
package j8583; package com.solab.iso8583;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@@ -7,8 +7,6 @@ import java.util.TimeZone;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import com.solab.iso8583.IsoType;
/** Tests formatting of certain IsoTypes. /** Tests formatting of certain IsoTypes.
* *
* @author Enrique Zamudio * @author Enrique Zamudio
@@ -1,18 +1,15 @@
package j8583; package com.solab.iso8583;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.text.ParseException; import java.text.ParseException;
import java.util.Arrays;
import java.util.List;
import com.solab.iso8583.IsoValue;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.IsoType;
import com.solab.iso8583.MessageFactory;
/** These are very simple tests for creating and manipulating messages. /** These are very simple tests for creating and manipulating messages.
* *
* @author Enrique Zamudio * @author Enrique Zamudio
@@ -82,7 +79,7 @@ public class TestIsoMessage {
@Test @Test
public void testParsing() throws IOException, ParseException { public void testParsing() throws IOException, ParseException {
InputStream ins = getClass().getResourceAsStream("/parse1.txt"); InputStream ins = getClass().getResourceAsStream("/parse1.txt");
byte[] buf = new byte[400]; final byte[] buf = new byte[400];
int pos = 0; int pos = 0;
while (ins.available() > 0) { while (ins.available() > 0) {
buf[pos++] = (byte)ins.read(); buf[pos++] = (byte)ins.read();
@@ -96,6 +93,15 @@ public class TestIsoMessage {
byte[] b3 = new byte[b2.length]; byte[] b3 = new byte[b2.length];
System.arraycopy(buf, 0, b3, 0, b3.length); System.arraycopy(buf, 0, b3, 0, b3.length);
Assert.assertArrayEquals(b3, b2); Assert.assertArrayEquals(b3, b2);
//Test it contains the correct fields
final List<Integer> fields = Arrays.asList(3, 4, 7, 11, 12, 13, 15, 17, 32, 35, 37, 38, 39, 41, 43, 49, 60, 61, 100, 102, 126);
testFields(iso, fields);
//Again, but now with forced encoding
mf.setForceStringEncoding(true);
iso = mf.parseMessage(buf, mf.getIsoHeader(0x210).length());
Assert.assertEquals(0x210, iso.getType());
testFields(iso, fields);
} }
@Test @Test
@@ -129,4 +135,13 @@ public class TestIsoMessage {
throw new RuntimeException("Update failed!"); throw new RuntimeException("Update failed!");
} }
private void testFields(IsoMessage m, List<Integer> fields) {
for (int i = 2; i < 128; i++) {
if (fields.contains(i)) {
Assert.assertTrue(m.hasField(i));
} else {
Assert.assertFalse(m.hasField(i));
}
}
}
} }
@@ -1,7 +1,5 @@
package j8583; package com.solab.iso8583;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.MessageFactory;
import com.solab.iso8583.parse.ConfigParser; import com.solab.iso8583.parse.ConfigParser;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@@ -1,4 +1,4 @@
package j8583; package com.solab.iso8583;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
@@ -8,16 +8,12 @@ import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.TimeZone; import java.util.TimeZone;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.IsoValue;
import com.solab.iso8583.codecs.CompositeField; import com.solab.iso8583.codecs.CompositeField;
import com.solab.iso8583.parse.NumericParseInfo; import com.solab.iso8583.parse.NumericParseInfo;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.solab.iso8583.MessageFactory;
/** Test that parsing invalid messages is properly handled. /** Test that parsing invalid messages is properly handled.
* *
* @author Enrique Zamudio * @author Enrique Zamudio
@@ -1,13 +1,10 @@
package j8583; package com.solab.iso8583.parse;
import com.solab.iso8583.IsoType; import com.solab.iso8583.IsoType;
import com.solab.iso8583.MessageFactory; import com.solab.iso8583.MessageFactory;
import com.solab.iso8583.IsoMessage; import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.codecs.BigIntBcdCodec; import com.solab.iso8583.codecs.BigIntBcdCodec;
import com.solab.iso8583.codecs.LongBcdCodec; import com.solab.iso8583.codecs.LongBcdCodec;
import com.solab.iso8583.parse.FieldParseInfo;
import com.solab.iso8583.parse.LlbinParseInfo;
import com.solab.iso8583.parse.LllbinParseInfo;
import com.solab.iso8583.util.HexCodec; import com.solab.iso8583.util.HexCodec;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@@ -1,11 +1,8 @@
package j8583; package com.solab.iso8583.parse;
import com.solab.iso8583.IsoType; import com.solab.iso8583.IsoType;
import com.solab.iso8583.IsoValue; import com.solab.iso8583.IsoValue;
import com.solab.iso8583.codecs.CompositeField; import com.solab.iso8583.codecs.CompositeField;
import com.solab.iso8583.parse.AlphaParseInfo;
import com.solab.iso8583.parse.LlvarParseInfo;
import com.solab.iso8583.parse.NumericParseInfo;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@@ -1,4 +1,4 @@
package j8583; package com.solab.iso8583.parse;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -10,8 +10,6 @@ import org.junit.*;
import com.solab.iso8583.IsoType; import com.solab.iso8583.IsoType;
import com.solab.iso8583.IsoValue; import com.solab.iso8583.IsoValue;
import com.solab.iso8583.parse.Date10ParseInfo;
import com.solab.iso8583.parse.Date4ParseInfo;
/** Test that the dates are formatted and parsed correctly. /** Test that the dates are formatted and parsed correctly.
* *
@@ -0,0 +1,31 @@
package com.solab.iso8583.parse;
import com.solab.iso8583.IsoValue;
import org.junit.Assert;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
/**
* Test parsing of data with different encodings.
*
* @author Enrique Zamudio
* Date: 05/03/14 16:55
*/
public class TestEncoding {
@Test
public void windowsToUtf8() throws UnsupportedEncodingException, ParseException {
final String data = "05ácido";
final byte[] buf = data.getBytes("ISO-8859-1");
final LlvarParseInfo parser = new LlvarParseInfo();
parser.setCharacterEncoding("UTF-8");
IsoValue<?> field = parser.parse(1, buf, 0, null);
Assert.assertNotEquals(field.getValue(), data.substring(2));
parser.setCharacterEncoding("ISO-8859-1");
field = parser.parse(1, buf, 0, null);
Assert.assertEquals(data.substring(2), field.getValue());
}
}
@@ -1,6 +1,5 @@
package j8583; package com.solab.iso8583.util;
import com.solab.iso8583.util.Bcd;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@@ -1,11 +1,8 @@
package j8583; package com.solab.iso8583.util;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import com.solab.iso8583.util.HexCodec;
public class TestHexCodec { public class TestHexCodec {
public void encodeDecode(String hex) { public void encodeDecode(String hex) {