@@ -40,8 +40,7 @@ public void TestOBR5RepeatingValuesMessage()
4040 public void TestSpecialCharacterEncoding ( )
4141 {
4242 var parser = new PipeParser ( ) ;
43- var oru = new ORU_R01 ( ) ;
44- oru = ( ORU_R01 ) parser . Parse ( GetMessage ( ) ) ;
43+ var oru = ( ORU_R01 ) parser . Parse ( GetMessage ( ) ) ;
4544
4645 var data = ( FT ) oru . GetPATIENT_RESULT ( 0 ) . GetORDER_OBSERVATION ( 0 ) . GetOBSERVATION ( 0 ) . OBX . GetObservationValue ( 0 ) . Data ;
4746 Assert . AreEqual ( @"This\.br\is\.br\A Test" , data . Value ) ;
@@ -311,7 +310,7 @@ public void MoreGreedyMode()
311310 }
312311
313312 /// <summary>
314- /// The folllwing 4 tests are ported from hapi
313+ /// The following 4 tests are ported from hapi
315314 /// https://github.com/hapifhir/hapi-hl7v2/blob/master/hapi-examples/src/main/java/ca/uhn/hl7v2/examples/ParseInvalidObx2Values.java.
316315 /// </summary>
317316 [ Test ]
@@ -330,7 +329,7 @@ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsEmpty_Hl7ExceptionIsThrown()
330329
331330 Assert . AreEqual (
332331 "OBX-5 is valued, but OBX-2 is not. A datatype for OBX-5 must be specified using OBX-2." ,
333- exception . Message ) ;
332+ exception ? . Message ) ;
334333 }
335334
336335 [ Test ]
@@ -375,7 +374,7 @@ public void Obx5DataTypeIsSetFromObx2_WhenObx2IsAnInvalidType_Hl7ExceptionIsThro
375374
376375 Assert . AreEqual (
377376 "'BAD' in record 1 is invalid for version 2.3: Segment: OBX Field #2" ,
378- exception . Message ) ;
377+ exception ? . Message ) ;
379378 }
380379
381380 [ Test ]
@@ -409,7 +408,7 @@ public void GetCriticalResponseDataFromValidMessage()
409408 {
410409 var parser = new PipeParser ( ) ;
411410
412- var parsed = parser . GetCriticalResponseData ( GetMessage ( ) ) as NHapi . Model . V231 . Segment . MSH ;
411+ var parsed = parser . GetCriticalResponseData ( GetMessage ( ) ) as Model . V231 . Segment . MSH ;
413412 Assert . NotNull ( parsed ) ;
414413 Assert . AreEqual ( "|" , parsed . FieldSeparator . Value ) ;
415414 Assert . AreEqual ( @"^~\&" , parsed . EncodingCharacters . Value ) ;
@@ -428,7 +427,118 @@ public void GetCriticalResponseData_FailToParseInvalidMessage()
428427 var parser = new PipeParser ( ) ;
429428
430429 var exception = Assert . Throws < HL7Exception > ( ( ) => parser . GetCriticalResponseData ( invalidMessage ) ) ;
431- Assert . True ( exception . Message . Contains ( "Can't parse critical fields from MSH segment" ) ) ;
430+ Assert . True ( exception ? . Message . Contains ( "Can't parse critical fields from MSH segment" ) ) ;
431+ }
432+
433+ [ Test ]
434+ public void TestUnexpectedSegmentHintsDefault ( )
435+ {
436+ var message =
437+ "MSH|^~\\ &|DATASERVICES|CORPORATE|||20120711120510.2-0500||ADT^A01^ADT_A01|9c906177-dfca-4bbe-9abd-d8eb43df93a0|D|2.6\r "
438+ + "EVN||20120701000000-0500\r "
439+ + "PID|1||397979797^^^SN^SN~4242^^^BKDMDM^PI~1000^^^YARDI^PI||Williams^Rory^H^^^^A||19641028000000-0600|M||||||||||31592^^^YARDI^AN\r "
440+ + "NK1|1|Pond^Amelia^Q^^^^A|SPO|1234 Main St^^Sussex^WI^53089|^PRS^CP^^^^^^^^^555-1212||N\r "
441+ + "NK1|2|Smith^John^^^^^A~^The Doctor^^^^^A|FND|1234 S Water St^^New London^WI^54961||^WPN^PH^^^^^^^^^555-9999|C\r "
442+ + "PV1|2|I||R\r "
443+ + "GT1|1||Doe^John^A^^^^A||5678 Maple Ave^^Sussex^WI^53089|^PRS^PH^^^^^^^^^555-9999|||||OTH\r "
444+ + "IN1|1|CAP1000|YYDN|ACME HealthCare||||GR0000001|||||||HMO|||||||||||||||||||||PCY-0000042\r "
445+ + "IN1|2||||||||||||||Medicare|||||||||||||||||||||123-45-6789-A\r "
446+ + "IN1|3||||||||||||||Medicaid|||||||||||||||||||||987654321L\r "
447+ + "ZFA|6|31592|12345|YARDI|20120201000000-0600" ;
448+
449+ var parser = new PipeParser ( ) ;
450+
451+ var msg = ( NHapi . Model . V26 . Message . ADT_A01 ) parser . Parse ( message ) ;
452+
453+ var zfas = msg . GetINSURANCE ( 2 ) . GetAll ( "ZFA" ) ;
454+
455+ Assert . AreEqual ( 1 , zfas . Length ) ;
456+ }
457+
458+ /// <summary>
459+ /// the following 3 tests were ported from
460+ /// <see href="https://github.com/hapifhir/hapi-hl7v2/blob/3333e3aeae60afb7493f6570456e6280c0e16c0b/hapi-test/src/test/java/ca/uhn/hl7v2/parser/NewPipeParserTest.java#L313">hapi</see>.
461+ /// <para>
462+ /// The original feature request for hapi is <seealso href="http://sourceforge.net/p/hl7api/feature-requests/64/">here</seealso>.
463+ /// </para>
464+ /// </summary>
465+ [ Test ]
466+ public void TestUnexpectedSegmentHintsInline ( )
467+ {
468+ var message =
469+ "MSH|^~\\ &|DATASERVICES|CORPORATE|||20120711120510.2-0500||ADT^A01^ADT_A01|9c906177-dfca-4bbe-9abd-d8eb43df93a0|D|2.6\r "
470+ + "EVN||20120701000000-0500\r "
471+ + "PID|1||397979797^^^SN^SN~4242^^^BKDMDM^PI~1000^^^YARDI^PI||Williams^Rory^H^^^^A||19641028000000-0600|M||||||||||31592^^^YARDI^AN\r "
472+ + "NK1|1|Pond^Amelia^Q^^^^A|SPO|1234 Main St^^Sussex^WI^53089|^PRS^CP^^^^^^^^^555-1212||N\r "
473+ + "NK1|2|Smith^John^^^^^A~^The Doctor^^^^^A|FND|1234 S Water St^^New London^WI^54961||^WPN^PH^^^^^^^^^555-9999|C\r "
474+ + "PV1|2|I||R\r "
475+ + "GT1|1||Doe^John^A^^^^A||5678 Maple Ave^^Sussex^WI^53089|^PRS^PH^^^^^^^^^555-9999|||||OTH\r "
476+ + "IN1|1|CAP1000|YYDN|ACME HealthCare||||GR0000001|||||||HMO|||||||||||||||||||||PCY-0000042\r "
477+ + "IN1|2||||||||||||||Medicare|||||||||||||||||||||123-45-6789-A\r "
478+ + "IN1|3||||||||||||||Medicaid|||||||||||||||||||||987654321L\r "
479+ + "ZFA|6|31592|12345|YARDI|20120201000000-0600" ;
480+
481+ var parser = new PipeParser ( ) ;
482+ var options = new ParserOptions { UnexpectedSegmentBehaviour = UnexpectedSegmentBehaviour . AddInline } ;
483+
484+ var msg = ( NHapi . Model . V26 . Message . ADT_A01 ) parser . Parse ( message , options ) ;
485+
486+ var zfas = msg . GetINSURANCE ( 2 ) . GetAll ( "ZFA" ) ;
487+
488+ Assert . AreEqual ( 1 , zfas . Length ) ;
489+ }
490+
491+ [ Test ]
492+ public void TestUnexpectedSegmentHintsDropToRoot ( )
493+ {
494+ var message =
495+ "MSH|^~\\ &|DATASERVICES|CORPORATE|||20120711120510.2-0500||ADT^A01^ADT_A01|9c906177-dfca-4bbe-9abd-d8eb43df93a0|D|2.6\r "
496+ + "ZZA|1\r "
497+ + "EVN||20120701000000-0500\r "
498+ + "PID|1||397979797^^^SN^SN~4242^^^BKDMDM^PI~1000^^^YARDI^PI||Williams^Rory^H^^^^A||19641028000000-0600|M||||||||||31592^^^YARDI^AN\r "
499+ + "NK1|1|Pond^Amelia^Q^^^^A|SPO|1234 Main St^^Sussex^WI^53089|^PRS^CP^^^^^^^^^555-1212||N\r "
500+ + "NK1|2|Smith^John^^^^^A~^The Doctor^^^^^A|FND|1234 S Water St^^New London^WI^54961||^WPN^PH^^^^^^^^^555-9999|C\r "
501+ + "PV1|2|I||R\r "
502+ + "GT1|1||Doe^John^A^^^^A||5678 Maple Ave^^Sussex^WI^53089|^PRS^PH^^^^^^^^^555-9999|||||OTH\r "
503+ + "IN1|1|CAP1000|YYDN|ACME HealthCare||||GR0000001|||||||HMO|||||||||||||||||||||PCY-0000042\r "
504+ + "IN1|2||||||||||||||Medicare|||||||||||||||||||||123-45-6789-A\r "
505+ + "IN1|3||||||||||||||Medicaid|||||||||||||||||||||987654321L\r "
506+ + "ZFA|6|31592|12345|YARDI|20120201000000-0600" ;
507+
508+ var parser = new PipeParser ( ) ;
509+ var options = new ParserOptions { UnexpectedSegmentBehaviour = UnexpectedSegmentBehaviour . DropToRoot } ;
510+
511+ var msg = ( NHapi . Model . V26 . Message . ADT_A01 ) parser . Parse ( message , options ) ;
512+
513+ var zzas = msg . GetAll ( "ZZA" ) ;
514+ var zfas = msg . GetAll ( "ZFA" ) ;
515+
516+ Assert . AreEqual ( 1 , zfas . Length ) ;
517+ Assert . AreEqual ( 1 , zzas . Length ) ;
518+ }
519+
520+ [ Test ]
521+ public void TestUnexpectedSegmentHintsThrowHl7Exception ( )
522+ {
523+ var message =
524+ "MSH|^~\\ &|DATASERVICES|CORPORATE|||20120711120510.2-0500||ADT^A01^ADT_A01|9c906177-dfca-4bbe-9abd-d8eb43df93a0|D|2.6\r "
525+ + "EVN||20120701000000-0500\r "
526+ + "PID|1||397979797^^^SN^SN~4242^^^BKDMDM^PI~1000^^^YARDI^PI||Williams^Rory^H^^^^A||19641028000000-0600|M||||||||||31592^^^YARDI^AN\r "
527+ + "NK1|1|Pond^Amelia^Q^^^^A|SPO|1234 Main St^^Sussex^WI^53089|^PRS^CP^^^^^^^^^555-1212||N\r "
528+ + "NK1|2|Smith^John^^^^^A~^The Doctor^^^^^A|FND|1234 S Water St^^New London^WI^54961||^WPN^PH^^^^^^^^^555-9999|C\r "
529+ + "PV1|2|I||R\r "
530+ + "GT1|1||Doe^John^A^^^^A||5678 Maple Ave^^Sussex^WI^53089|^PRS^PH^^^^^^^^^555-9999|||||OTH\r "
531+ + "IN1|1|CAP1000|YYDN|ACME HealthCare||||GR0000001|||||||HMO|||||||||||||||||||||PCY-0000042\r "
532+ + "IN1|2||||||||||||||Medicare|||||||||||||||||||||123-45-6789-A\r "
533+ + "IN1|3||||||||||||||Medicaid|||||||||||||||||||||987654321L\r "
534+ + "ZFA|6|31592|12345|YARDI|20120201000000-0600" ;
535+
536+ var parser = new PipeParser ( ) ;
537+ var options = new ParserOptions { UnexpectedSegmentBehaviour = UnexpectedSegmentBehaviour . ThrowHl7Exception } ;
538+
539+ var exception = Assert . Throws < HL7Exception > ( ( ) => parser . Parse ( message , options ) ) ;
540+
541+ Assert . AreEqual ( "Found unknown segment: ZFA" , exception ? . Message ) ;
432542 }
433543 }
434544}
0 commit comments