private void generateId( final StringBuilder sb, final String typeName, final String propertyName, final Token token) { sb.append(String.format( "\nfunc (*%1$s) %2$sId() uint16 {\n" + "\treturn %3$s\n" + "}\n", typeName, propertyName, token.id())); }
private static void generateFieldIdMethod(final StringBuilder sb, final Token token, final String indent) { sb.append(String.format( "\n" + indent + " public static int %sId()\n" + indent + " {\n" + indent + " return %d;\n" + indent + " }\n", formatPropertyName(token.name()), token.id())); }
private static int captureMessage(final List<Token> tokens, final int index, final Ir ir) { final List<Token> messageTokens = new ArrayList<>(); int i = index; Token token = tokens.get(i); messageTokens.add(token); do { token = tokens.get(++i); messageTokens.add(token); } while (Signal.END_MESSAGE != token.signal()); ir.addMessage(tokens.get(i).id(), messageTokens); return i; }
indent + " }\n", propertyName, fieldToken.id()));
private void generateFieldIdMethod(final StringBuilder sb, final Token token, final String indent) { sb.append(String.format("\n" + indent + "public const int %sId = %d;\n", CSharpUtil.formatPropertyName(token.name()), token.id())); generateSinceActingDeprecated(sb, indent, CSharpUtil.formatPropertyName(token.name()), token); }
indent + " }\n", formatPropertyName(groupName), token.id()));
indent + "public const long %sId = %d;\n", toUpperFirstChar(groupName), token.id()));
@Test public void shouldGenerateCorrectIrForMultipleVarDataInRepeatingGroup() 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(2); /* 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(15); final Token varDataField2Token = tokens.get(21); /* 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))); }
@Test public void shouldGenerateCorrectIrForVarDataInNestedRepeatingGroup() 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(3); /* 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 nestedGroupToken = tokens.get(12); final Token varDataFieldNestedToken = tokens.get(20); final Token varDataFieldToken = tokens.get(27); assertThat(groupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(groupToken.name(), is("Entries")); assertThat(valueOf(groupToken.id()), is(valueOf(2))); assertThat(nestedGroupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(nestedGroupToken.name(), is("NestedEntries")); assertThat(valueOf(nestedGroupToken.id()), is(valueOf(4))); assertThat(varDataFieldNestedToken.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataFieldNestedToken.name(), is("varDataFieldNested")); assertThat(valueOf(varDataFieldNestedToken.id()), is(valueOf(6))); assertThat(varDataFieldToken.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataFieldToken.name(), is("varDataField")); assertThat(valueOf(varDataFieldToken.id()), is(valueOf(7))); }
@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))); } }
assertThat(valueOf(tokens.get(0).id()), is(valueOf(50001))); assertThat(valueOf(tokens.get(0).encodedLength()), is(valueOf(16))); assertThat(valueOf(tokens.get(0).offset()), is(valueOf(0))); assertThat(valueOf(tokens.get(1).id()), is(valueOf(40001))); assertThat(valueOf(tokens.get(1).encodedLength()), is(valueOf(4))); assertThat(valueOf(tokens.get(1).offset()), is(valueOf(0))); assertThat(tokens.get(2).name(), is("uint32")); assertThat(tokens.get(2).encoding().primitiveType(), is(PrimitiveType.UINT32)); assertThat(valueOf(tokens.get(2).id()), is(valueOf(Token.INVALID_ID))); assertThat(valueOf(tokens.get(2).encodedLength()), is(valueOf(4))); assertThat(valueOf(tokens.get(2).offset()), is(valueOf(0))); assertThat(valueOf(tokens.get(3).id()), is(valueOf(40001))); assertThat(valueOf(tokens.get(3).encodedLength()), is(valueOf(4))); assertThat(valueOf(tokens.get(3).offset()), is(valueOf(0))); assertThat(valueOf(tokens.get(4).id()), is(valueOf(50001))); assertThat(valueOf(tokens.get(4).encodedLength()), is(valueOf(16))); assertThat(valueOf(tokens.get(4).offset()), is(valueOf(0)));
@Test public void shouldGenerateCorrectIrForMessageWithRepeatingGroupWithEmbeddedDimensionsDefaultDimensionType() throws Exception { final MessageSchema schema = parse(getLocalResource( "embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, 9=field, ... */ final int groupIdx = 4; final int dimensionsCompIdx = 5; final int fieldInGroupIdx = 9; final List<Token> tokens = ir.getMessage(1); assertThat(tokens.get(groupIdx).signal(), is(Signal.BEGIN_GROUP)); assertThat(tokens.get(groupIdx).name(), is("ListOrdGrp")); assertThat(valueOf(tokens.get(groupIdx).id()), is(valueOf(73))); assertThat(tokens.get(dimensionsCompIdx).signal(), is(Signal.BEGIN_COMPOSITE)); assertThat(tokens.get(dimensionsCompIdx).name(), is("groupSizeEncoding")); assertThat(tokens.get(fieldInGroupIdx).signal(), is(Signal.BEGIN_FIELD)); assertThat(tokens.get(fieldInGroupIdx).name(), is("ClOrdID")); }
@Test public void shouldGenerateCorrectIrForMessageWithVariableLengthFieldWithEmbeddedLength() throws Exception { final MessageSchema schema = parse(getLocalResource( "embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=field, 5=comp, 6=enc, 7=enc, 8=compend, 9=fieldend */ final int lengthFieldIdx = 4; final int lengthEncIdx = 6; final int dataEncIdx = 7; final List<Token> tokens = ir.getMessage(2); /* assert the varDataEncoding field node is formed correctly */ assertThat(tokens.get(lengthFieldIdx).signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(tokens.get(lengthFieldIdx).name(), is("EncryptedPassword")); assertThat(valueOf(tokens.get(lengthFieldIdx).id()), is(valueOf(1402))); /* assert the length node has correct values */ assertThat(tokens.get(lengthEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(lengthEncIdx).encoding().primitiveType(), is(PrimitiveType.UINT8)); /* assert the group node has the right IrId and xRefIrId, etc. */ assertThat(tokens.get(dataEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dataEncIdx).encoding().primitiveType(), is(PrimitiveType.CHAR)); } }
generateRustLiteral(header.blockLengthType(), Integer.toString(messageToken.encodedLength()))); indent(writer, 4, "%s: %s,\n", formatMethodName("templateId"), generateRustLiteral(header.templateIdType(), Integer.toString(messageToken.id()))); indent(writer, 4, "%s: %s,\n", formatMethodName("schemaId"), generateRustLiteral(header.schemaIdType(), Integer.toString(ir.id())));
@Test public void shouldGenerateCorrectIrForMessageWithRepeatingGroupWithEmbeddedDimensions() throws Exception { final MessageSchema schema = parse(getLocalResource( "basic-group-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final int groupIdx = 4; final int dimensionsCompIdx = 5; final int dimensionsBlEncIdx = 6; final int dimensionsNigEncIdx = 7; final List<Token> tokens = ir.getMessage(1); /* assert on the group token */ assertThat(tokens.get(groupIdx).signal(), is(Signal.BEGIN_GROUP)); assertThat(tokens.get(groupIdx).name(), is("Entries")); assertThat(valueOf(tokens.get(groupIdx).id()), is(valueOf(2))); /* assert on the comp token for dimensions */ assertThat(tokens.get(dimensionsCompIdx).signal(), is(Signal.BEGIN_COMPOSITE)); assertThat(tokens.get(dimensionsCompIdx).name(), is("groupSizeEncoding")); /* assert on the enc token for dimensions blockLength */ assertThat(tokens.get(dimensionsBlEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dimensionsBlEncIdx).name(), is("blockLength")); /* assert on the enc token for dimensions numInGroup */ assertThat(tokens.get(dimensionsNigEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dimensionsNigEncIdx).name(), is("numInGroup")); }
for (final List<Token> decodedTokenList : decodedIr.messages()) final List<Token> tokens = ir.getMessage(decodedTokenList.get(0).id());
generateLiteral(ir.headerStructure().blockLengthType(), Integer.toString(token.encodedLength())), templateIdType, generateLiteral(ir.headerStructure().templateIdType(), Integer.toString(token.id())), schemaIdType, generateLiteral(ir.headerStructure().schemaIdType(), Integer.toString(ir.id())),
private void assertEqual(final Token lhs, final Token rhs) { assertThat(lhs.name(), is(rhs.name())); assertThat(lhs.version(), is(rhs.version())); assertThat(lhs.offset(), is(rhs.offset())); assertThat((long)lhs.id(), is((long)rhs.id())); assertThat(lhs.signal(), is(rhs.signal())); assertThat(lhs.encodedLength(), is(rhs.encodedLength())); assertThat(lhs.encoding().byteOrder(), is(rhs.encoding().byteOrder())); assertThat(lhs.encoding().primitiveType(), is(rhs.encoding().primitiveType())); assertThat(lhs.encoding().presence(), is(rhs.encoding().presence())); assertThat(lhs.encoding().constValue(), is(rhs.encoding().constValue())); assertThat(lhs.encoding().minValue(), is(rhs.encoding().minValue())); assertThat(lhs.encoding().maxValue(), is(rhs.encoding().maxValue())); assertThat(lhs.encoding().nullValue(), is(rhs.encoding().nullValue())); assertThat(lhs.encoding().characterEncoding(), is(rhs.encoding().characterEncoding())); assertThat(lhs.encoding().epoch(), is(rhs.encoding().epoch())); assertThat(lhs.encoding().timeUnit(), is(rhs.encoding().timeUnit())); assertThat(lhs.encoding().semanticType(), is(rhs.encoding().semanticType())); }
.tokenOffset(token.offset()) .tokenSize(token.encodedLength()) .fieldId(token.id()) .tokenVersion(token.version()) .componentTokenCount(token.componentTokenCount())