/** * Generate a complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. * * @param schema from which the {@link uk.co.real_logic.sbe.ir.Ir} should be generated. * @return complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. */ public Ir generate(final MessageSchema schema) { return generate(schema, null); }
private static void encodeSchema(final ByteBuffer byteBuffer) throws Exception { final Path path = Paths.get("example-schema.xml"); try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) { final MessageSchema schema = XmlSchemaParser.parse(in, ParserOptions.DEFAULT); final Ir ir = new IrGenerator().generate(schema); try (IrEncoder irEncoder = new IrEncoder(byteBuffer, ir)) { irEncoder.encode(); } } }
private static void encodeSchema(final ByteBuffer buffer) throws Exception { final Path path = Paths.get("src/test/resources/composite-elements-schema.xml"); try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) { final MessageSchema schema = XmlSchemaParser.parse(in, ParserOptions.DEFAULT); final Ir ir = new IrGenerator().generate(schema); try (IrEncoder irEncoder = new IrEncoder(buffer, ir)) { irEncoder.encode(); } } }
private static void encodeSchema(final ByteBuffer buffer) throws Exception { final Path path = Paths.get("src/test/resources/json-printer-test-schema.xml"); try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) { final MessageSchema schema = XmlSchemaParser.parse(in, ParserOptions.DEFAULT); final Ir ir = new IrGenerator().generate(schema); try (IrEncoder irEncoder = new IrEncoder(buffer, ir)) { irEncoder.encode(); } } }
@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 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 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(); }
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 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)); } }
@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 shouldEncodeThenDecodeIr() 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 IrDecoder decoder = new IrDecoder(buffer); decoder.decode(); }
@Test public void shouldDecodeCorrectHeader() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "code-generation-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 IrDecoder irDecoder = new IrDecoder(buffer); final Ir decodedIr = irDecoder.decode(); final List<Token> tokens = decodedIr.headerStructure().tokens(); assertThat(tokens.size(), is(ir.headerStructure().tokens().size())); for (int i = 0, size = tokens.size(); i < size; i++) { assertEqual(tokens.get(i), ir.headerStructure().tokens().get(i)); } }
@Test public void shouldDecodeCorrectFrame() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "code-generation-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 IrDecoder irDecoder = new IrDecoder(buffer); final Ir decodedIr = irDecoder.decode(); assertThat(decodedIr.id(), is(ir.id())); assertThat(decodedIr.version(), is(ir.version())); assertThat(decodedIr.semanticVersion(), is(ir.semanticVersion())); assertThat(decodedIr.packageName(), is(ir.packageName())); assertThat(decodedIr.namespaceName(), is(ir.namespaceName())); }
@Before public void setUp() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("code-generation-schema.xml"), options); final IrGenerator irg = new IrGenerator(); ir = irg.generate(schema); outputManager.clear(); outputManager.setPackageName(ir.applicableNamespace()); }
@Test public void shouldGenerateCorrectIrForCompositeRefs() throws Exception { final MessageSchema schema = parse(getLocalResource("issue496.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); assertNotNull(ir.getType("compositeOne")); assertNotNull(ir.getType("compositeTwo")); assertNotNull(ir.getType("compositeThree")); } }
@Test public void shouldGenerateAndEncodeIr() throws Exception { System.setProperty(SbeTool.KEYWORD_APPEND_TOKEN, "_"); final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("FixBinary.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024); final IrEncoder irEncoder = new IrEncoder(buffer, ir); irEncoder.encode(); buffer.flip(); final IrDecoder irDecoder = new IrDecoder(buffer); final Ir decodedIr = irDecoder.decode(); assertEquals(ir.id(), decodedIr.id()); assertEquals(ir.version(), decodedIr.version()); assertEquals(ir.byteOrder(), decodedIr.byteOrder()); assertEquals(ir.applicableNamespace(), decodedIr.applicableNamespace()); assertEquals(ir.packageName(), decodedIr.packageName()); assertEquals(ir.types().size(), decodedIr.types().size()); assertEquals(ir.messages().size(), decodedIr.messages().size()); } }
@Before public void setup() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("extension-schema.xml"), options); final IrGenerator irg = new IrGenerator(); ir = irg.generate(schema); outputManager.clear(); outputManager.setPackageName(ir.applicableNamespace()); generator().generate(); }
@Test(expected = IllegalArgumentException.class) public void shouldThrowWhenUsingATypeThatIsNotConstrainedToFitInAnIntAsTheGroupSize() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("issue567-invalid.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final StringWriterOutputManager outputManager = new StringWriterOutputManager(); outputManager.setPackageName(ir.applicableNamespace()); final CSharpGenerator generator = new CSharpGenerator(ir, outputManager); // Act + Assert (exception thrown) generator.generate(); }
@Test public void shouldGenerateWhenUsingATypeThatIsConstrainedToFitInAnIntAsTheGroupSize() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("issue567-valid.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final StringWriterOutputManager outputManager = new StringWriterOutputManager(); outputManager.setPackageName(ir.applicableNamespace()); final CSharpGenerator generator = new CSharpGenerator(ir, outputManager); // Act + Assert (no exception) generator.generate(); } }
@Test public void shouldGenerateValidJava() throws Exception { System.setProperty(SbeTool.KEYWORD_APPEND_TOKEN, "_"); final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("FixBinary.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final JavaGenerator generator = new JavaGenerator( ir, BUFFER_NAME, READ_ONLY_BUFFER_NAME, false, false, false, outputManager); outputManager.setPackageName(ir.applicableNamespace()); generator.generateMessageHeaderStub(); generator.generateTypeStubs(); generator.generate(); final Map<String, CharSequence> sources = outputManager.getSources(); final String className = "MDIncrementalRefreshTradeSummary42Decoder"; final String fqClassName = ir.applicableNamespace() + "." + className; final Class<?> aClass = CompilerUtil.compileInMemory(fqClassName, sources); assertNotNull(aClass); }