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 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 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);
        }
        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);
        }