public void AttributesAndSubElements()
        {
            string xml = "<msg><name type=\"surname\"><value>Smith</value></name></msg>";

            var reader = new FudgeXmlStreamReader(context, xml);
            var msg = reader.ReadMsg();

            Assert.Equal(FudgeMsgFieldType.Instance, msg.GetByName("name").Type);
            var name = msg.GetMessage("name");
            Assert.Equal("surname", name.GetString("type"));
            Assert.Equal("Smith", name.GetString("value"));
        }
        public void AttributesAndText()
        {
            // Value should go into a field with empty name
            // REVIEW 2009-12-17 t0rx -- Is this a good thing to do, or should it go in a field called "value", or just be ignored?
            string xml = "<msg><name type=\"surname\">Smith</name></msg>";

            var reader = new FudgeXmlStreamReader(context, xml);
            var msg = reader.ReadMsg();

            Assert.Equal(FudgeMsgFieldType.Instance, msg.GetByName("name").Type);
            var name = msg.GetMessage("name");
            Assert.Equal("surname", name.GetString("type"));
            Assert.Equal("Smith", name.GetString(""));
        }
        public void MultipleMessages()
        {
            string inputXml = "<msg><name>Fred</name></msg><msg><name>Bob</name></msg>";
            var reader = new FudgeXmlStreamReader(context, inputXml);

            var sb = new StringBuilder();
            var xmlWriter = XmlWriter.Create(sb, new XmlWriterSettings {OmitXmlDeclaration = true, ConformanceLevel = ConformanceLevel.Fragment});
            var writer = new FudgeXmlStreamWriter(context, xmlWriter, "msg") { AutoFlushOnMessageEnd = true };
            var multiwriter = new FudgeStreamMultiwriter(new DebuggingWriter(), writer);
            new FudgeStreamPipe(reader, multiwriter).Process();
            string outputXml = sb.ToString();

            Assert.Equal(inputXml, outputXml);
        }
        public void NestedMessages()
        {
            string xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><msg><name>Fred</name><address><number>17</number><line1>Our House</line1><line2>In the middle of our street</line2><phone>1234</phone><local /></address></msg>";

            var reader = new FudgeXmlStreamReader(context, xml);
            var writer = new FudgeMsgStreamWriter();
            new FudgeStreamPipe(reader, writer).Process();

            var msg = writer.DequeueMessage();

            Assert.Equal("Our House", msg.GetMessage("address").GetString("line1"));

            // Convert back to XML and see if it matches
            var sb = new StringBuilder();
            var xmlWriter = XmlWriter.Create(sb);
            var reader2 = new FudgeMsgStreamReader(context, msg);
            var writer2 = new FudgeXmlStreamWriter(context, xmlWriter, "msg") { AutoFlushOnMessageEnd = true };
            new FudgeStreamPipe(reader2, writer2).Process();

            var xml2 = sb.ToString();
            Assert.Equal(xml, xml2);
        }
        public void LargeMsg()
        {
            var stringWriter = new StringWriter();
            var xmlWriter = new XmlTextWriter(stringWriter);
            var streamWriter = new FudgeXmlStreamWriter(context, xmlWriter, "msg");
            FudgeMsg inMsg = StandardFudgeMessages.CreateLargeMessage(context);
            streamWriter.WriteMsg(inMsg);

            string msgString = stringWriter.GetStringBuilder().ToString();
            var msg = new FudgeXmlStreamReader(context, msgString).ReadMsg();

            FudgeUtils.AssertAllFieldsMatch(inMsg, msg);
        }