@Test public void shouldHandleBasicFileWithGroup() throws Exception { parse(TestUtil.getLocalResource("basic-group-schema.xml"), ParserOptions.DEFAULT); }
@Test public void shouldHandleBasicFileWithVariableLengthData() throws Exception { parse(TestUtil.getLocalResource("basic-variable-length-schema.xml"), ParserOptions.DEFAULT); }
@Test public void shouldHandleEmbeddedLengthForData() throws Exception { parse(TestUtil.getLocalResource("embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); /* should parse correctly */ } }
@Test public void shouldHandleBasicFile() throws Exception { parse(TestUtil.getLocalResource("basic-schema.xml"), ParserOptions.DEFAULT); }
@Test public void shouldHandleConstantHeaderField() throws Exception { parse(TestUtil.getLocalResource("basic-schema-constant-header-field.xml"), ParserOptions.DEFAULT); }
@Test public void shouldCalculateDataOffsetWithPaddingFromBlockLength() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "block-length-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(4).fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(64))); assertThat(valueOf(fields.get(1).type().encodedLength()), is(valueOf(-1))); }
@Test public void shouldCalculateCompositeSizeWithOffsetsSpecified() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "composite-offsets-schema.xml"), ParserOptions.DEFAULT); final CompositeType header = schema.messageHeader(); assertThat(valueOf(header.encodedLength()), is(valueOf(12))); }
@Test public void shouldCalculateDimensionSizeWithOffsetsSpecified() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "composite-offsets-schema.xml"), ParserOptions.DEFAULT); final CompositeType dimensions = schema.getMessage(1).fields().get(0).dimensionType(); assertThat(valueOf(dimensions.encodedLength()), is(valueOf(8))); } }
@Test public void shouldHandleAllTypeOffsets() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "basic-types-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(8))); assertThat(valueOf(fields.get(1).type().encodedLength()), is(valueOf(20))); assertThat(valueOf(fields.get(2).computedOffset()), is(valueOf(28))); assertThat(valueOf(fields.get(2).type().encodedLength()), is(valueOf(1))); assertThat(valueOf(fields.get(3).computedOffset()), is(valueOf(29))); assertThat(valueOf(fields.get(3).type().encodedLength()), is(valueOf(4))); assertThat(valueOf(fields.get(4).computedOffset()), is(valueOf(33))); assertThat(valueOf(fields.get(4).type().encodedLength()), is(valueOf(8))); }
@Test public void shouldHandleAllTypeOffsetsSetByXML() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "basic-types-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(2).fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(8))); assertThat(valueOf(fields.get(1).type().encodedLength()), is(valueOf(20))); assertThat(valueOf(fields.get(2).computedOffset()), is(valueOf(32))); assertThat(valueOf(fields.get(2).type().encodedLength()), is(valueOf(1))); assertThat(valueOf(fields.get(3).computedOffset()), is(valueOf(128))); assertThat(valueOf(fields.get(3).type().encodedLength()), is(valueOf(4))); assertThat(valueOf(fields.get(4).computedOffset()), is(valueOf(136))); assertThat(valueOf(fields.get(4).type().encodedLength()), is(valueOf(8))); }
@Test public void shouldCalculateGroupOffsetWithPaddingFromBlockLength() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "block-length-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(2).fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(64))); Assert.assertNull(fields.get(1).type()); assertThat(valueOf(fields.get(1).computedBlockLength()), is(valueOf(12))); final List<Field> groupFields = fields.get(1).groupFields(); assertThat(valueOf(groupFields.size()), is(valueOf(2))); assertThat(valueOf(groupFields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(groupFields.get(0).type().encodedLength()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).computedOffset()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).type().encodedLength()), is(valueOf(8))); }
@Test public void shouldCalculateGroupOffsetWithPaddingFromBlockLengthAndGroupBlockLength() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "block-length-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(3).fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(64))); Assert.assertNull(fields.get(1).type()); assertThat(valueOf(fields.get(1).computedBlockLength()), is(valueOf(16))); final List<Field> groupFields = fields.get(1).groupFields(); assertThat(valueOf(groupFields.size()), is(valueOf(2))); assertThat(valueOf(groupFields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(groupFields.get(0).type().encodedLength()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).computedOffset()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).type().encodedLength()), is(valueOf(8))); }
@Test public void shouldCalculateGroupOffsetWithNoPaddingFromBlockLength() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "block-length-schema.xml"), ParserOptions.DEFAULT); final Message msg = schema.getMessage(1); assertThat(valueOf(msg.blockLength()), is(valueOf(8))); final List<Field> fields = msg.fields(); assertThat(valueOf(fields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(fields.get(0).type().encodedLength()), is(valueOf(8))); assertThat(valueOf(fields.get(1).computedOffset()), is(valueOf(8))); Assert.assertNull(fields.get(1).type()); final List<Field> groupFields = fields.get(1).groupFields(); assertThat(valueOf(groupFields.size()), is(valueOf(2))); assertThat(valueOf(groupFields.get(0).computedOffset()), is(valueOf(0))); assertThat(valueOf(groupFields.get(0).type().encodedLength()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).computedOffset()), is(valueOf(4))); assertThat(valueOf(groupFields.get(1).type().encodedLength()), is(valueOf(8))); }
@Test public void shouldHandleRightSizedBuffer() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource("basic-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final ByteBuffer buffer = ByteBuffer.allocateDirect(CAPACITY); final IrEncoder irEncoder = new IrEncoder(buffer, ir); irEncoder.encode(); buffer.flip(); final ByteBuffer readBuffer = ByteBuffer.allocateDirect(buffer.remaining()); readBuffer.put(buffer); readBuffer.flip(); final IrDecoder irDecoder = new IrDecoder(readBuffer); irDecoder.decode(); }
@Test public void shouldHandleBasicAllTypes() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource("basic-types-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); assertThat(fields.get(0).name(), is("header")); assertThat(fields.get(1).name(), is("EDTField")); assertThat(fields.get(2).name(), is("ENUMField")); assertThat(fields.get(3).name(), is("SETField")); assertThat(fields.get(4).name(), is("int64Field")); } }
@Test public void shouldHandleEmbeddedCountForGroup() throws Exception { final MessageSchema schema = parse( TestUtil.getLocalResource("embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); assertThat(fields.get(1).name(), is("ListOrdGrp")); assertThat(valueOf(fields.get(1).id()), is(valueOf(73))); Assert.assertNotNull(fields.get(1).dimensionType()); final List<Field> groupFields = fields.get(1).groupFields(); Assert.assertNotNull(groupFields); }
@Test public void shouldEncodeIr() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource("basic-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final ByteBuffer buffer = ByteBuffer.allocateDirect(CAPACITY); final IrEncoder irEncoder = new IrEncoder(buffer, ir); irEncoder.encode(); }
@Test public void shouldGenerateValueRefToEnum() throws Exception { final MessageSchema schema = parse(getLocalResource("value-ref-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); assertThat(ir.getMessage(1).get(1).encodedLength(), is(8)); assertThat(ir.getMessage(2).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(3).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(4).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(5).get(1).encodedLength(), is(0)); } }
private static Ir generateIrForResource(final String localResourceName) { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final String xmlLocalResourceName = localResourceName.endsWith(".xml") ? localResourceName : localResourceName + ".xml"; final MessageSchema schema; try { schema = parse(TestUtil.getLocalResource(xmlLocalResourceName), options); } catch (final Exception e) { throw new IllegalStateException(e); } final IrGenerator irg = new IrGenerator(); return irg.generate(schema); }
@Test public void shouldGenerateCorrectIrForOnlyMultipleVarDataInRepeatingGroup() throws Exception { final MessageSchema schema = parse(getLocalResource("group-with-data-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(4); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final Token groupToken = tokens.get(4); final Token varDataField1Token = tokens.get(9); final Token varDataField2Token = tokens.get(15); /* assert on the group token */ assertThat(groupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(groupToken.name(), is("Entries")); assertThat(valueOf(groupToken.id()), is(valueOf(2))); assertThat(varDataField1Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField1Token.name(), is("varDataField1")); assertThat(valueOf(varDataField1Token.id()), is(valueOf(5))); assertThat(varDataField2Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField2Token.name(), is("varDataField2")); assertThat(valueOf(varDataField2Token.id()), is(valueOf(6))); } }