Exemplo n.º 1
0
        public void ShouldParseCreatedSegment()
        {
            //Arrange
            var segment = new Hl7Segment() + "EVN" + "A01" + "20110613083617";

            //Assert
            Assert.Equal(EvnSegmentTrimmed, segment.ToString());
        }
Exemplo n.º 2
0
        public void ShouldParseSegmentsOnlyWithName()
        {
            //Act
            var segment = Hl7Segment.Parse("PID");

            //Assert
            Assert.Equal("PID", segment.Name);
        }
Exemplo n.º 3
0
        public void GettingNonExistingFieldShouldReturnFieldWithoutValue()
        {
            //Act
            var segment = Hl7Segment.Parse(EvnSegmentTrimmed);

            //Assert
            Assert.Equal("", segment[4].ToString());
        }
Exemplo n.º 4
0
        public void ShouldLazyParseSegments()
        {
            //Act
            var segment = Hl7Segment.Parse(EvnSegment);

            //Assert
            Assert.False(segment.IsParsed);
        }
Exemplo n.º 5
0
        public void ShouldReturnProperFieldValueUsingArrayNotation()
        {
            //Act
            var segment = Hl7Segment.Parse(EvnSegment);

            //Assert
            Assert.Equal("A01", segment[1].ToString());
            Assert.Equal("", segment[4].ToString());
        }
Exemplo n.º 6
0
        public void SegmentOnlyWithNameShouldBeMarkedAsParsed()
        {
            //Act
            var segment  = Hl7Segment.Parse("EVN");
            var segment2 = Hl7Segment.Parse("EVN|");

            //Assert
            Assert.True(segment.IsParsed);
            Assert.True(segment2.IsParsed);
        }
Exemplo n.º 7
0
        public void ShouldBeParsingMessageWithOtherSegmentSeparator()
        {
            //Act
            var encoding = new Hl7Encoding {
                FieldSeparator = '$'
            };
            var segment = Hl7Segment.Parse(EvnSegmentDollarAsSeparatorTrimmed, encoding);

            //Assert
            Assert.Equal(EvnSegmentDollarAsSeparatorTrimmed, segment.ToString());
        }
Exemplo n.º 8
0
        public void ShouldReturnEmptyFieldByDefault()
        {
            //Arrange
            var segmentString = "EVN|A01|20110613083617";

            //Act
            var segment = Hl7Segment.Parse(segmentString);
            var field   = segment[3].ToString();

            //Assert
            Assert.Equal("", field);
        }
Exemplo n.º 9
0
        public void ToStringReturnsOriginalStringWithoutTrailingPipes()
        {
            //Arrange
            var segment  = Hl7Segment.Parse(EvnSegment);
            var segment2 = Hl7Segment.Parse(EvnSegmentDollarAsSeparator, new Hl7Encoding {
                FieldSeparator = '$'
            });

            //Assert
            Assert.Equal(EvnSegmentTrimmed, segment.ToString());
            Assert.Equal(EvnSegmentDollarAsSeparatorTrimmed, segment2.ToString());
        }
Exemplo n.º 10
0
        public void ShouldReturnAddedField()
        {
            //Arrange
            var segmentString = "EVN";

            //Act
            var segment = Hl7Segment.Parse(segmentString);

            segment[1] = new Hl7Field("A01");
            segment[2] = new Hl7Field("20110613083617");
            var field1 = segment[1].ToString();
            var field2 = segment[2].ToString();

            //Assert
            Assert.Equal("A01", field1);
            Assert.Equal("20110613083617", field2);
        }
Exemplo n.º 11
0
        public void ShouldReturnAddedSegment()
        {
            //Arrange
            var messageString =
                "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|20110613083617||ADT^A01|934576120110613083617|P|2.3|||";

            //Act
            var message = Hl7Message.Parse(messageString);

            message[2] =
                new Hl7Segment(
                    "PID|1||135769||MOUSE^MICKEY||19281118|M|||123 Main St.^^Lake Buena Vista^FL^32830||(407)939-1289^^^[email protected]|||||1719|99999999");
            message[3] = new Hl7Segment("PV1|1|O");
            var segment2 = message[2].ToString();
            var segment3 = message[3].ToString();

            //Assert
            Assert.Equal(
                "PID|1||135769||MOUSE^MICKEY||19281118|M|||123 Main St.^^Lake Buena Vista^FL^32830||(407)939-1289^^^[email protected]|||||1719|99999999",
                segment2);
            Assert.Equal("PV1|1|O", segment3);
        }
Exemplo n.º 12
0
 public void SegmentNamesShouldBeThreeCharacterLong()
 {
     Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PI"));
     Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PI|D"));
     Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PIDD"));
 }
Exemplo n.º 13
0
 public void ParsingNullValueShouldThrowAnArgumentNullException()
 {
     Assert.Throws <ArgumentNullException>(() => Hl7Segment.Parse(null));
 }
Exemplo n.º 14
0
        /// <summary>
        /// Receive an HL7 message over the connected network stream.
        /// </summary>
        /// <param name="messageDelimiters">Initial HL7 message delimiters - updated to actual delimters during method.</param>
        /// <returns>Correctly instantiated HL7 message.</returns>
        public Hl7Message ReceiveMessage(out Hl7MessageDelimiters messageDelimiters)
        {
            // initialize the message delimiters to the default values
            messageDelimiters = new Hl7MessageDelimiters();

            Hl7Message hl7Message = new Hl7Message();

            if (_networkStream == null)
            {
                return(null);
            }

            // set the read / write timeouts for this stream - zero means no timeout.
            if (_readTimeout != 0)
            {
                _networkStream.ReadTimeout = _readTimeout;
            }
            if (_writeTimeout != 0)
            {
                _networkStream.WriteTimeout = _writeTimeout;
            }

            // initialise the segment content
            System.String rxSegment = System.String.Empty;

            // initialise the MLLP state
            MllpStateEnum mllpState = MllpStateEnum.WaitingForStartOfMessageChar;

            // loop waiting for the end of message character
            while (mllpState != MllpStateEnum.DoneWaiting)
            {
                // check if data is available on network
                try
                {
                    // get the next character from the stream
                    int rxCode = _networkStream.ReadByte();
                    if (rxCode < 0)
                    {
                        return(null);
                    }

                    char rxChar = (char)rxCode;

                    // switch on MLLP state
                    switch (mllpState)
                    {
                    case MllpStateEnum.WaitingForStartOfMessageChar:
                        // check if we have got the SOM
                        if (rxChar == _StartOfMessageChar)
                        {
                            // reset the segment
                            rxSegment = System.String.Empty;

                            // change state to waiting for end of segment
                            mllpState = MllpStateEnum.WaitingForEndOfSegmentChar;
                        }
                        else
                        {
                            Console.WriteLine("HL7 - MLLP: Waiting for SOM - got {0}...", rxChar);
                        }
                        break;

                    case MllpStateEnum.WaitingForEndOfSegmentChar:
                        // check if we have got the end of segment
                        if (rxChar == _EndOfSegmentChar)
                        {
                            // check if we have the MSH segment
                            // - we need to get the message delimiters
                            if (rxSegment.StartsWith("MSH") == true)
                            {
                                // set the message delimiters to the values received
                                // - we assume that the MSH segment is formatted properly at least in the first few bytes
                                messageDelimiters = new Hl7MessageDelimiters(rxSegment.Substring(3, 5));
                            }

                            // segment is complete
                            Hl7Segment segment = new Hl7Segment();
                            segment.Decode(rxSegment, messageDelimiters);

                            // add the segment to the HL7 message
                            hl7Message.AddSegment(segment);

                            // reset the segment
                            rxSegment = System.String.Empty;
                        }
                        else if (rxChar == _EndOfMessageChar1)
                        {
                            // we have the first end of message - that's OK
                            // check if any characters have been received since the last end of segment
                            if (rxSegment == System.String.Empty)
                            {
                                // change state to waiting for second end of message
                                mllpState = MllpStateEnum.WaitingForEndOfMessageChar;
                            }
                            else
                            {
                                Console.WriteLine("HL7 - MLLP: First EOM does not immediately follow an EOS");
                                return(null);
                            }
                        }
                        else
                        {
                            // save the received character in the current segment
                            rxSegment += rxChar;
                        }
                        break;

                    case MllpStateEnum.WaitingForEndOfMessageChar:
                        // check if we have got the second end of message
                        if (rxChar == _EndOfMessageChar2)
                        {
                            // message is complete
                            mllpState = MllpStateEnum.DoneWaiting;
                        }
                        else
                        {
                            Console.WriteLine("HL7 - MLLP: Second EOM does not immediately follow first EOM");
                            return(null);
                        }
                        break;

                    default:
                        break;
                    }
                }
                catch (System.Exception e)
                {
                    Console.WriteLine("HL7 - MLLP: ReceiveMessage() Exception: {0}", e.Message);
                    return(null);
                }
            }

            // return the correct instantiation of the received HL7 message
            return(Hl7MessageFactory.CreateHl7Message(hl7Message, messageDelimiters));
        }