I'm having issues when trying to use decimal cobol field definitions
and the results being mapped properly to floats/doubles. Issue 16
(
http://code.google.com/p/flapjack/issues/detail?id=16) seems to
address this and is marked as done. Any suggestions on what I'm doing
incorrectly?
I've put some sample code which shows this issue below.
public class Decimals {
public float price;
public double quantity;
public Double other;
}
public class FlapjackTests {
private static class DecimalsRecordLayout extends
AbstractCobolRecordLayout {
@Override
protected void defineFields() {
cobolField("Price", "9(3)v9(2)");
cobolField("Quantity", "999v99");
cobolField("Other", "9(3)v99");
}
}
private static class DecimalsRecordFactory implements
RecordFactory {
@Override
public Object build() {
return new Decimals();
}
}
@Test
public void shouldShowFlapjackWorks() throws IOException {
ObjectMapping decimalMapping = new ObjectMapping
(Decimals.class);
decimalMapping.add("Price", "price");
decimalMapping.add("Quantity", "quantity");
decimalMapping.add("Other", "other");
ObjectMappingStore objectMappingStore = new ObjectMappingStore
();
objectMappingStore.add(decimalMapping);
RecordParserImpl recordParser = new RecordParserImpl();
recordParser.setRecordLayoutResolver(new
SameRecordLayoutResolver(DecimalsRecordLayout.class));
recordParser.setRecordFactoryResolver(new
SameRecordFactoryResolver(DecimalsRecordFactory.class));
recordParser.setObjectMappingStore(objectMappingStore);
recordParser.setIgnoreUnmappedFields(true);
String records = "123451234512345";
LineRecordReader recordReader = new LineRecordReader(new
ByteArrayInputStream(records.getBytes()));
ParseResult result = recordParser.parse(recordReader);
List results = result.getRecords();
assertEquals(1, results.size());
Decimals dec = (Decimals) results.get(0);
System.out.println(dec.price);
System.out.println(dec.quantity);
System.out.println(dec.other);
assertEquals(123.45, dec.price);
assertEquals(123.45, dec.quantity);
assertEquals(123.45, dec.other);
}