public void Format()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            Message value = new Message();

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "HE");
            value.Fields.Add(2, "LLO");

            InnerMessageField field = new InnerMessageField(37, value);

            InnerMessageFieldFormatter formatter;
            string formattedData;

            // Test fixed length formatting.
            formatter = new InnerMessageFieldFormatter(37,
                                                       new FixedLengthManager(5), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));

            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("HELLO"));

            formatterContext.Clear();
            formatter = new InnerMessageFieldFormatter(37,
                                                       new FixedLengthManager(4), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));
            try {
                formatter.Format(field, ref formatterContext);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("dataLength"));
            }

            // Test variable length formatting.
            formatterContext.Clear();
            formatter = new InnerMessageFieldFormatter(48, new VariableLengthManager(0,
                                                                                     999, StringLengthEncoder.GetInstance(999)),
                                                       BinaryEncoder.GetInstance(), GetFormatter(_fixedMessageFormatter));
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("005HELLO"));
            formatterContext.Clear();
            formatter.Format(new InnerMessageField(35, null), ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000"));
        }
        public void NewComponent()
        {
            Message value = new Message();

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "12");
            value.Fields.Add(2, "345");
            InnerMessageField  field     = new InnerMessageField(18, value);
            MessagingComponent component = field.NewComponent();

            Assert.IsTrue(component is InnerMessageField);
            Assert.IsTrue(field.FieldNumber ==
                          (( InnerMessageField )component).FieldNumber);
            Assert.IsNull((( InnerMessageField )component).Value);
        }
        public void GetBytes()
        {
            Message value = new Message();

            InnerMessageField field = new InnerMessageField(19, value);

            Assert.IsNull(field.GetBytes());

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "HE");
            value.Fields.Add(2, "LLO");

            Assert.IsTrue(
                FrameworkEncoding.GetInstance().Encoding.GetString(field.GetBytes()) == "HELLO");
        }
        public void TestToString()
        {
            Message value = new Message();

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "98");
            value.Fields.Add(2, "345");

            InnerMessageField field = new InnerMessageField(12);

            Assert.IsTrue(string.Empty == field.ToString());
            field.Value = value;

            Assert.IsTrue(field.ToString() == "1:98,2:345");
        }
        public void Instantiation()
        {
            Message           value = new Message();
            InnerMessageField field = new InnerMessageField(30);

            Assert.IsTrue(field.FieldNumber == 30);
            Assert.IsNull(field.Value);

            field = new InnerMessageField(15, value);

            Assert.IsTrue(field.FieldNumber == 15);
            Assert.IsTrue(field.Value is Message);
            Message fieldValue = field.Value as Message;

            Assert.IsTrue(value == fieldValue);
        }
        public void Value()
        {
            Message           value = new Message();
            InnerMessageField field = new InnerMessageField(18);

            Assert.IsNull(field.Value);

            field.Value = value;
            Assert.IsTrue(field.Value is Message);
            Message fieldValue = field.Value as Message;

            Assert.IsTrue(value == fieldValue);

            try {
                field.Value = field.FieldNumber;
                Assert.Fail();
            }
            catch (ArgumentException e) {
                Assert.IsTrue(e.ParamName == "value");
            }
        }
        public void TestClone()
        {
            Message value = new Message();

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "12");
            value.Fields.Add(2, "345");

            InnerMessageField field = new InnerMessageField(14);

            InnerMessageField clonedField = ( InnerMessageField )(field.Clone());

            Assert.IsNull(clonedField.Value);
            Assert.IsTrue(field.FieldNumber == clonedField.FieldNumber);

            field.Value = value;
            clonedField = ( InnerMessageField )(field.Clone());

            Assert.IsTrue(field.ToString() == clonedField.ToString());
            Assert.IsTrue(field.Value != clonedField.Value);
        }
        /// <summary>
        /// It returns the inner message located in a field (pointed by
        /// _fieldNumber) of a given message.
        /// </summary>
        /// <param name="message">
        /// The given message.
        /// </param>
        /// <returns>
        /// The inner message located in a field (pointed by _fieldNumber)
        /// of a given message.
        /// </returns>
        private Message GetInnerMessage(Message message)
        {
            if (message == null)
            {
                throw new ExpressionEvaluationException(string.Format(
                                                            "Can't get inner message in field {0} because the message is null.",
                                                            _fieldNumber));
            }

            if (!message.Fields.Contains(_fieldNumber))
            {
                throw new ExpressionEvaluationException(string.Format(
                                                            "Can't get inner message in {0} because isn't present in the message.",
                                                            _fieldNumber));
            }

            InnerMessageField innerMessageField = message[_fieldNumber] as InnerMessageField;

            if (innerMessageField == null)
            {
                throw new ExpressionEvaluationException(string.Format(
                                                            "Can't get inner message in {0} because isn't an inner message.",
                                                            _fieldNumber));
            }

            Message innerMessage = innerMessageField.Value as Message;

            if (innerMessage == null)
            {
                throw new ExpressionEvaluationException(string.Format(
                                                            "Can't get inner message in {0} because it doesn't contain a message.",
                                                            _fieldNumber));
            }

            return(innerMessage);
        }