public void ShouldParseCreatedSegment() { //Arrange var segment = new Hl7Segment() + "EVN" + "A01" + "20110613083617"; //Assert Assert.Equal(EvnSegmentTrimmed, segment.ToString()); }
public void ShouldParseSegmentsOnlyWithName() { //Act var segment = Hl7Segment.Parse("PID"); //Assert Assert.Equal("PID", segment.Name); }
public void GettingNonExistingFieldShouldReturnFieldWithoutValue() { //Act var segment = Hl7Segment.Parse(EvnSegmentTrimmed); //Assert Assert.Equal("", segment[4].ToString()); }
public void ShouldLazyParseSegments() { //Act var segment = Hl7Segment.Parse(EvnSegment); //Assert Assert.False(segment.IsParsed); }
public void ShouldReturnProperFieldValueUsingArrayNotation() { //Act var segment = Hl7Segment.Parse(EvnSegment); //Assert Assert.Equal("A01", segment[1].ToString()); Assert.Equal("", segment[4].ToString()); }
public void SegmentOnlyWithNameShouldBeMarkedAsParsed() { //Act var segment = Hl7Segment.Parse("EVN"); var segment2 = Hl7Segment.Parse("EVN|"); //Assert Assert.True(segment.IsParsed); Assert.True(segment2.IsParsed); }
public void ShouldBeParsingMessageWithOtherSegmentSeparator() { //Act var encoding = new Hl7Encoding { FieldSeparator = '$' }; var segment = Hl7Segment.Parse(EvnSegmentDollarAsSeparatorTrimmed, encoding); //Assert Assert.Equal(EvnSegmentDollarAsSeparatorTrimmed, segment.ToString()); }
public void ShouldReturnEmptyFieldByDefault() { //Arrange var segmentString = "EVN|A01|20110613083617"; //Act var segment = Hl7Segment.Parse(segmentString); var field = segment[3].ToString(); //Assert Assert.Equal("", field); }
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()); }
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); }
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); }
public void SegmentNamesShouldBeThreeCharacterLong() { Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PI")); Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PI|D")); Assert.Throws <ArgumentException>(() => Hl7Segment.Parse("PIDD")); }
public void ParsingNullValueShouldThrowAnArgumentNullException() { Assert.Throws <ArgumentNullException>(() => Hl7Segment.Parse(null)); }
/// <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)); }