segfault-ruby-hl7 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::EVN < HL7::Message::Segment
4
+ weight 0 # should occur after the MSH segment
5
+ add_field :type_code, :idx=>1
6
+ add_field :recorded_date, :idx=>2
7
+ add_field :planned_date, :idx=>3
8
+ add_field :reason_code, :idx=>4
9
+ add_field :operator_id, :idx=>5
10
+ add_field :event_occurred, :idx=>6
11
+ add_field :event_facility, :idx=>6
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::MSA < HL7::Message::Segment
4
+ weight 0 # should occur after the msh segment
5
+ add_field :ack_code
6
+ add_field :control_id
7
+ add_field :text
8
+ add_field :expected_seq
9
+ add_field :delayed_ack_type
10
+ add_field :error_cond
11
+ end
12
+
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::MSH < HL7::Message::Segment
4
+ weight( -1 ) # the msh should always start a message
5
+ add_field :enc_chars, :idx=>1
6
+ add_field :sending_app, :idx=>2
7
+ add_field :sending_facility, :idx=>3
8
+ add_field :recv_app, :idx=>4
9
+ add_field :recv_facility, :idx=>5
10
+ add_field :time, :idx=>6
11
+ add_field :security, :idx=>7
12
+ add_field :message_type, :idx=>8
13
+ add_field :message_control_id, :idx=>9
14
+ add_field :processing_id, :idx=>10
15
+ add_field :version_id, :idx=>11
16
+ add_field :seq, :idx=>12
17
+ add_field :continue_ptr, :idx=>13
18
+ add_field :accept_ack_type, :idx=>14
19
+ add_field :app_ack_type, :idx=>15
20
+ add_field :country_code, :idx=>16
21
+ add_field :charset, :idx=>17
22
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::NTE < HL7::Message::Segment
4
+ weight 4
5
+ add_field :set_id, :idx=>1
6
+ add_field :source, :idx=>2
7
+ add_field :comment, :idx=>3
8
+ add_field :comment_type, :idx=>4
9
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::OBR < HL7::Message::Segment
4
+ weight 89 # obr.weight-1
5
+ has_children [:OBX]
6
+ add_field :set_id
7
+ add_field :placer_order_number
8
+ add_field :filler_order_number
9
+ add_field :universal_service_id
10
+ add_field :priority
11
+ add_field :requested_date
12
+ add_field :observation_date
13
+ add_field :observation_end_date
14
+ add_field :collection_volume
15
+ add_field :collector_identifier
16
+ add_field :specimen_action_code
17
+ add_field :danger_code
18
+ add_field :relevant_clinical_info
19
+ add_field :specimen_received_date
20
+ add_field :specimen_source
21
+ add_field :ordering_provider
22
+ add_field :order_callback_phone_number
23
+ add_field :placer_field_1
24
+ add_field :placer_field_2
25
+ add_field :filer_field_1
26
+ add_field :filer_field_2
27
+ add_field :results_status_change_date
28
+ add_field :charge_to_practice
29
+ add_field :parent_result
30
+ add_field :quantity_timing
31
+ add_field :result_copies_to
32
+ add_field :parent
33
+ add_field :transport_mode
34
+ add_field :reason_for_study
35
+ add_field :principal_result_interpreter
36
+ add_field :assistant_result_interpreter
37
+ add_field :technician
38
+ add_field :transcriptionist
39
+ add_field :scheduled_date
40
+ add_field :number_of_sample_containers
41
+ add_field :transport_logistics_of_sample
42
+ add_field :collectors_comment
43
+ add_field :transport_arrangement_responsibility
44
+ add_field :transport_arranged
45
+ add_field :escort_required
46
+ add_field :planned_patient_transport_comment
47
+ add_field :procedure_code
48
+ add_field :procedure_code_modifier
49
+ add_field :placer_supplemental_service_info
50
+ add_field :filler_supplemental_service_info
51
+ add_field :medically_necessary_dup_procedure_reason #longest method name ever. sry.
52
+ add_field :result_handling
53
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::OBX < HL7::Message::Segment
4
+ weight 90
5
+ has_children [:NTE]
6
+ add_field :set_id
7
+ add_field :value_type
8
+ add_field :observation_id
9
+ add_field :observation_sub_id
10
+ add_field :observation_value
11
+ add_field :units
12
+ add_field :references_range
13
+ add_field :abnormal_flags
14
+ add_field :probability
15
+ add_field :nature_of_abnormal_test
16
+ add_field :observation_result_status
17
+ add_field :effective_date_of_reference_range
18
+ add_field :user_defined_access_checks
19
+ add_field :observation_date
20
+ add_field :producer_id
21
+ add_field :responsible_observer
22
+ add_field :observation_method
23
+ add_field :equipment_instance_id
24
+ add_field :analysis_date
25
+ end
26
+
@@ -0,0 +1,4 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::ORU < HL7::Message::Segment
4
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::PID < HL7::Message::Segment
4
+ weight 1
5
+ add_field :set_id
6
+ add_field :patient_id
7
+ add_field :patient_id_list
8
+ add_field :alt_patient_id
9
+ add_field :patient_name
10
+ add_field :mother_maiden_name
11
+ add_field :patient_dob
12
+ add_field :admin_sex do |sex|
13
+ unless /^[FMOUAN]$/.match(sex) || sex == nil || sex == ""
14
+ raise HL7::InvalidDataError.new( "bad administrative sex value (not F|M|O|U|A|N)" )
15
+ end
16
+ sex = "" unless sex
17
+ sex
18
+ end
19
+ add_field :patient_alias
20
+ add_field :race
21
+ add_field :address
22
+ add_field :country_code
23
+ add_field :phone_home
24
+ add_field :phone_business
25
+ add_field :primary_language
26
+ add_field :marital_status
27
+ add_field :religion
28
+ add_field :account_number
29
+ add_field :social_security_num
30
+ add_field :mothers_id
31
+ add_field :ethnic_group
32
+ add_field :birthplace
33
+ add_field :multi_birth
34
+ add_field :birth_order
35
+ add_field :citizenship
36
+ add_field :vet_status
37
+ add_field :nationality
38
+ add_field :death_date
39
+ add_field :death_indicator
40
+ add_field :id_unknown_indicator
41
+ add_field :id_readability_code
42
+ add_field :last_update_date
43
+ add_field :last_update_facility
44
+ add_field :species_code
45
+ add_field :breed_code
46
+ add_field :strain
47
+ add_field :production_class_code
48
+ add_field :tribal_citizenship
49
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::PV1 < HL7::Message::Segment
4
+ weight 2
5
+ add_field :set_id
6
+ add_field :patient_class
7
+ add_field :assigned_location
8
+ add_field :admission_type
9
+ add_field :preadmit_number
10
+ add_field :prior_location
11
+ add_field :attending_doctor
12
+ add_field :referring_doctor
13
+ add_field :consulting_doctor
14
+ add_field :hospital_service
15
+ add_field :temporary_location
16
+ add_field :preadmit_indicator
17
+ add_field :readmit_indicator
18
+ add_field :admit_source
19
+ add_field :ambulatory_status
20
+ add_field :vip_indicator
21
+ add_field :admitting_doctor
22
+ add_field :patient_type
23
+ add_field :visit_number
24
+ add_field :financial_class
25
+ add_field :charge_price_indicator
26
+ add_field :courtesy_code
27
+ add_field :credit_rating
28
+ add_field :contract_code
29
+ add_field :contract_effective_date
30
+ add_field :contract_amount
31
+ add_field :contract_period
32
+ add_field :interest_code
33
+ add_field :transfer_bad_debt_code
34
+ add_field :transfer_bad_debt_date
35
+ add_field :bad_debt_agency_code
36
+ add_field :bad_debt_transfer_amount
37
+ add_field :bad_debt_recovery_amount
38
+ add_field :delete_account_indicator
39
+ add_field :delete_account_date
40
+ add_field :discharge_disposition
41
+ add_field :discharge_to_location
42
+ add_field :diet_type
43
+ add_field :servicing_facility
44
+ add_field :bed_status
45
+ add_field :account_status
46
+ add_field :pending_location
47
+ add_field :prior_temporary_location
48
+ add_field :admit_date
49
+ add_field :discharge_date
50
+ add_field :current_patient_balance
51
+ add_field :total_charges
52
+ add_field :total_adjustments
53
+ add_field :total_payments
54
+ add_field :alternate_visit_id
55
+ add_field :visit_indicator
56
+ add_field :other_healthcare_provider
57
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::PV2 < HL7::Message::Segment
4
+ weight 3
5
+ add_field :prior_pending_location
6
+ add_field :accommodation_code
7
+ add_field :admit_reason
8
+ add_field :transfer_reason
9
+ add_field :patient_valuables
10
+ add_field :patient_valuables_location
11
+ add_field :visit_user_code
12
+ add_field :expected_admit_date
13
+ add_field :expected_discharge_date
14
+ add_field :estimated_inpatient_stay_length
15
+ add_field :actual_inpatient_stay_length
16
+ add_field :visit_description
17
+ add_field :referral_source_code
18
+ add_field :previous_service_date
19
+ add_field :employment_illness_related_indicator
20
+ add_field :purge_status_code
21
+ add_field :purge_status_date
22
+ add_field :special_program_code
23
+ add_field :retention_indicator
24
+ add_field :expected_number_of_insurance_plans
25
+ add_field :visit_publicity_code
26
+ add_field :visit_protection_indicator
27
+ add_field :clinic_organization_name
28
+ add_field :patient_status_code
29
+ add_field :visit_priority_code
30
+ add_field :previous_treatment_date
31
+ add_field :expected_discharge_disposition
32
+ add_field :signature_on_file
33
+ add_field :first_similar_illness_date
34
+ add_field :patient_charge_adjustment_code
35
+ add_field :recurring_service_code
36
+ add_field :billing_media_code
37
+ add_field :expected_surgery_date
38
+ add_field :military_partnership_code
39
+ add_field :military_non_availibility_code
40
+ add_field :newborn_baby_indicator
41
+ add_field :baby_detained_indicator
42
+ add_field :mode_of_arrival_code
43
+ add_field :recreational_drug_use_code
44
+ add_field :precaution_code
45
+ add_field :patient_condition_code
46
+ add_field :living_will_code
47
+ add_field :organ_donor_code
48
+ add_field :advance_directive_code
49
+ add_field :patient_status_effective_date
50
+ add_field :expected_loa_return_date
51
+ add_field :expected_preadmission_testing_date
52
+ add_field :notify_clergy_code
53
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::QRD < HL7::Message::Segment
4
+ weight 84
5
+ add_field :query_date
6
+ add_field :query_format_code
7
+ add_field :query_priority
8
+ add_field :query_id
9
+ add_field :deferred_response_type
10
+ add_field :deferred_response_date
11
+ add_field :quantity_limited_request
12
+ add_field :who_subject_filter
13
+ add_field :what_subject_filter
14
+ add_field :what_department_code
15
+ add_field :what_data_code
16
+ add_field :query_results_level
17
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: UTF-8
2
+ require 'ruby-hl7'
3
+ class HL7::Message::Segment::QRF < HL7::Message::Segment
4
+ weight 85
5
+ add_field :where_subject_filter
6
+ add_field :when_start_date
7
+ add_field :when_end_date
8
+ add_field :what_user_qualifier
9
+ add_field :other_qry_subject_filter
10
+ add_field :which_date_qualifier
11
+ add_field :which_date_status_qualifier
12
+ add_field :date_selection_qualifier
13
+ add_field :when_timing_qualifier
14
+ add_field :search_confidence_threshold
15
+ end
@@ -0,0 +1,337 @@
1
+ # encoding: UTF-8
2
+ $: << '../lib'
3
+ require 'test/unit'
4
+ require 'ruby-hl7'
5
+
6
+ class BasicParsing < Test::Unit::TestCase
7
+ def setup
8
+ @simple_msh_txt = open( './test_data/test.hl7' ).readlines.first
9
+ @empty_txt = open( './test_data/empty.hl7' ).readlines.first
10
+ @empty_segments_txt = open( './test_data/empty_segments.hl7' ).readlines.first
11
+ @base_msh = "MSH|^~\\&|LAB1||DESTINATION||19910127105114||ORU^R03|LAB1003929"
12
+ @base_msh_alt_delims = "MSH$@~\\&|LAB1||DESTINATION||19910127105114||ORU^R03|LAB1003929"
13
+ end
14
+
15
+ def test_simple_msh
16
+ msg = HL7::Message.new
17
+ msg.parse @simple_msh_txt
18
+ assert_equal( @simple_msh_txt, msg.to_hl7 )
19
+ end
20
+
21
+ def test_parse_delims
22
+ msg = HL7::Message.new( @base_msh )
23
+ assert_equal( "|", msg.element_delim )
24
+ assert_equal( "^", msg.item_delim )
25
+
26
+ msg = HL7::Message.new( @base_msh_alt_delims )
27
+ assert_equal( "$", msg.element_delim )
28
+ assert_equal( "@", msg.item_delim )
29
+ end
30
+
31
+ def test_constructor_parse
32
+ msg = HL7::Message.new( @simple_msh_txt )
33
+ assert_equal( @simple_msh_txt, msg.to_hl7 )
34
+ end
35
+
36
+ def test_class_parse
37
+ msg = HL7::Message.parse( @simple_msh_txt )
38
+ assert_equal( @simple_msh_txt, msg.to_hl7 )
39
+ end
40
+
41
+ def test_not_string_or_enumerable
42
+ assert_raise( HL7::ParseError ) do
43
+ msg = HL7::Message.parse( :MSHthis_shouldnt_parse_at_all )
44
+ end
45
+ end
46
+
47
+ def test_parse_empty
48
+ msg = HL7::Message.new @empty_txt
49
+ end
50
+
51
+ def test_message_to_string
52
+ msg = HL7::Message.new
53
+ msg.parse @simple_msh_txt
54
+ orig = @simple_msh_txt.gsub( /\r/, "\n" )
55
+ assert_equal( orig, msg.to_s )
56
+ end
57
+
58
+ def test_to_s_vs_to_hl7
59
+ msg = HL7::Message.new( @simple_msh_txt )
60
+ assert_not_equal( msg.to_s, msg.to_hl7 )
61
+ end
62
+
63
+ def test_segment_numeric_accessor
64
+ msg = HL7::Message.new
65
+ msg.parse @simple_msh_txt
66
+ assert_equal( @base_msh, msg[0].to_s )
67
+ end
68
+
69
+ def test_segment_string_accessor
70
+ msg = HL7::Message.new
71
+ msg.parse @simple_msh_txt
72
+ assert_equal( @base_msh, msg["MSH"].to_s )
73
+ end
74
+
75
+ def test_segment_symbol_accessor
76
+ msg = HL7::Message.new
77
+ msg.parse @simple_msh_txt
78
+ assert_equal( @base_msh, msg[:MSH].to_s )
79
+ end
80
+
81
+ def test_segment_numeric_mutator
82
+ msg = HL7::Message.new
83
+ msg.parse @simple_msh_txt
84
+ inp = HL7::Message::Segment::Default.new
85
+ msg[1] = inp
86
+ assert_equal( inp, msg[1] )
87
+
88
+ assert_raise( HL7::Exception ) do
89
+ msg[2] = Class.new
90
+ end
91
+ end
92
+
93
+ def test_segment_missing_accessor
94
+ msg = HL7::Message.new
95
+ msg.parse @simple_msh_txt
96
+ assert_nothing_raised do
97
+ assert_equal( nil, msg[:does_not_exist] )
98
+ end
99
+ end
100
+
101
+ def test_segment_string_mutator
102
+ msg = HL7::Message.new
103
+ msg.parse @simple_msh_txt
104
+ inp = HL7::Message::Segment::NTE.new
105
+ msg["NTE"] = inp
106
+ assert_equal( inp, msg["NTE"] )
107
+
108
+ assert_raise( HL7::Exception ) do
109
+ msg["NTE"] = Class.new
110
+ end
111
+ end
112
+
113
+ def test_segment_symbol_accessor
114
+ msg = HL7::Message.new
115
+ msg.parse @simple_msh_txt
116
+ inp = HL7::Message::Segment::NTE.new
117
+ msg[:NTE] = inp
118
+ assert_equal( inp, msg[:NTE] )
119
+
120
+ assert_raise( HL7::Exception ) do
121
+ msg[:NTE] = Class.new
122
+ end
123
+ end
124
+
125
+ def test_element_accessor
126
+ msg = HL7::Message.new
127
+ msg.parse @simple_msh_txt
128
+ assert_equal( "LAB1", msg[:MSH].sending_app )
129
+ end
130
+
131
+ def test_element_mutator
132
+ msg = HL7::Message.new
133
+ msg.parse @simple_msh_txt
134
+ msg[:MSH].sending_app = "TEST"
135
+ assert_equal( "TEST", msg[:MSH].sending_app )
136
+ end
137
+
138
+ def test_element_missing_accessor
139
+ msg = HL7::Message.new
140
+ msg.parse @simple_msh_txt
141
+ assert_raise( HL7::Exception, NoMethodError ) do
142
+ msg[:MSH].does_not_really_exist_here
143
+ end
144
+ end
145
+
146
+ def test_element_missing_mutator
147
+ msg = HL7::Message.new
148
+ msg.parse @simple_msh_txt
149
+ assert_raise( HL7::Exception, NoMethodError ) do
150
+ msg[:MSH].does_not_really_exist_here = "TEST"
151
+ end
152
+ end
153
+
154
+ def test_element_numeric_accessor
155
+ msg = HL7::Message.new( @simple_msh_txt )
156
+
157
+ assert_equal( "LAB1", msg[:MSH].e2 )
158
+ assert_equal( "", msg[:MSH].e3 )
159
+ end
160
+
161
+ def test_element_numeric_mutator
162
+ msg = HL7::Message.parse( @simple_msh_txt )
163
+ msg[:MSH].e2 = "TESTING1234"
164
+ assert_equal( "TESTING1234", msg[:MSH].e2 )
165
+ end
166
+
167
+ def test_segment_append
168
+ msg = HL7::Message.new
169
+ assert_nothing_raised do
170
+ msg << HL7::Message::Segment::MSH.new
171
+ msg << HL7::Message::Segment::NTE.new
172
+ end
173
+
174
+ assert_raises( HL7::Exception ) do
175
+ msg << Class.new
176
+ end
177
+ end
178
+
179
+
180
+ def test_segment_sort
181
+ msg = HL7::Message.new
182
+ pv1 = HL7::Message::Segment::PV1.new
183
+ msg << pv1
184
+ msh = HL7::Message::Segment::MSH.new
185
+ msg << msh
186
+ nte = HL7::Message::Segment::NTE.new
187
+ msg << nte
188
+ nte2 = HL7::Message::Segment::NTE.new
189
+ msg << nte
190
+ msh.sending_app = "TEST"
191
+
192
+
193
+ initial = msg.to_s
194
+ sorted = msg.sort
195
+ final = sorted.to_s
196
+ assert_not_equal( initial, final )
197
+ end
198
+
199
+ def test_segment_auto_set_id
200
+ msg = HL7::Message.new
201
+ msh = HL7::Message::Segment::MSH.new
202
+ msg << msh
203
+ ntea = HL7::Message::Segment::NTE.new
204
+ ntea.comment = "first"
205
+ msg << ntea
206
+ nteb = HL7::Message::Segment::NTE.new
207
+ nteb.comment = "second"
208
+ msg << nteb
209
+ ntec = HL7::Message::Segment::NTE.new
210
+ ntec.comment = "third"
211
+ msg << ntec
212
+ assert_equal( "1", ntea.set_id )
213
+ assert_equal( "2", nteb.set_id )
214
+ assert_equal( "3", ntec.set_id )
215
+ end
216
+
217
+ def test_enumerable_parsing
218
+ test_file = open( './test_data/test.hl7' )
219
+ assert_not_nil( test_file )
220
+
221
+ msg = HL7::Message.new( test_file )
222
+ assert_equal( @simple_msh_txt, msg.to_hl7 )
223
+ end
224
+
225
+ def test_segment_to_info
226
+ msg = HL7::Message.new( @simple_msh_txt )
227
+ assert_not_nil( msg[1].to_info )
228
+ end
229
+
230
+ def test_segment_use_raw_array
231
+ inp = "NTE|1|ME TOO"
232
+ nte = HL7::Message::Segment::NTE.new( inp.split( '|' ) )
233
+ assert_equal( inp, nte.to_s )
234
+ end
235
+
236
+ def test_mllp_output
237
+ msg = HL7::Message.new( @simple_msh_txt )
238
+ expect = "\x0b%s\x1c\r" % msg.to_hl7
239
+ assert_equal( expect, msg.to_mllp )
240
+ end
241
+
242
+ def test_parse_mllp
243
+ raw = "\x0b%s\x1c\r" % @simple_msh_txt
244
+ msg = HL7::Message.parse( raw )
245
+ assert_not_nil( msg )
246
+ assert_equal( @simple_msh_txt, msg.to_hl7 )
247
+ assert_equal( raw, msg.to_mllp )
248
+ end
249
+
250
+ def test_mllp_output_parse
251
+ msg = HL7::Message.parse( @simple_msh_txt )
252
+ assert_not_nil( msg )
253
+ assert_nothing_raised do
254
+ post_mllp = HL7::Message.parse( msg.to_mllp )
255
+ assert_not_nil( post_mllp )
256
+ assert_equal( msg.to_hl7, post_mllp.to_hl7 )
257
+ end
258
+ end
259
+
260
+ def test_child_segment_accessor
261
+ obr = HL7::Message::Segment::OBR.new
262
+ assert_nothing_raised do
263
+ assert_not_nil( obr.children )
264
+ assert_equal( 0, obr.children.length )
265
+ end
266
+ end
267
+
268
+ def test_child_segment_addition
269
+ obr = HL7::Message::Segment::OBR.new
270
+ assert_nothing_raised do
271
+ assert_equal( 0, obr.children.length )
272
+ (1..5).each do |x|
273
+ obr.children << HL7::Message::Segment::OBX.new
274
+ assert_equal( x, obr.children.length )
275
+ end
276
+ end
277
+ end
278
+
279
+ def test_child_segment_invalid_addition
280
+ obr = HL7::Message::Segment::OBR.new
281
+ assert_raises(HL7::Exception) do
282
+ obr.children << Class.new
283
+ end
284
+ end
285
+
286
+ def test_grouped_sequenced_segments
287
+ #multible obr's with multiple obx's
288
+ msg = HL7::Message.parse( @simple_msh_txt )
289
+ orig_output = msg.to_hl7
290
+ orig_obx_cnt = msg[:OBX].length
291
+ (1..10).each do |obr_id|
292
+ obr = HL7::Message::Segment::OBR.new
293
+ msg << obr
294
+ (1..10).each do |obx_id|
295
+ obx = HL7::Message::Segment::OBX.new
296
+ obr.children << obx
297
+ end
298
+ end
299
+
300
+ assert_not_nil( msg[:OBR] )
301
+ assert_equal( 11, msg[:OBR].length )
302
+ assert_not_nil( msg[:OBX] )
303
+ assert_equal( 102, msg[:OBX].length )
304
+ assert_equal( "2", msg[:OBR][4].children[1].set_id ) # confirm the id's
305
+ assert_equal( "2", msg[:OBR][5].children[1].set_id ) # confirm the id's
306
+
307
+ final_output = msg.to_hl7
308
+ assert_not_equal( orig_output, final_output )
309
+ end
310
+
311
+ def test_index_accessor
312
+ msg = HL7::Message.parse( @simple_msh_txt )
313
+ assert_equal( 1, msg.index( "PID" ) )
314
+ assert_equal( 1, msg.index( :PID ) )
315
+ assert_equal( 2, msg.index( "PV1" ) )
316
+ assert_equal( 2, msg.index( :PV1 ) )
317
+ assert_equal( nil, msg.index( "TACOBELL" ) )
318
+ assert_equal( nil, msg.index( nil ) )
319
+ assert_equal( nil, msg.index( 1 ) )
320
+ end
321
+
322
+ def test_segment_field_block
323
+ pid = HL7::Message::Segment::PID.new
324
+ assert_raises( HL7::InvalidDataError ) do
325
+ pid.admin_sex = "TEST"
326
+ end
327
+ assert_nothing_raised do
328
+ pid.admin_sex = "F"
329
+ end
330
+ end
331
+
332
+ def test_empty_segment
333
+ msg = HL7::Message.new @empty_segments_txt
334
+
335
+ end
336
+
337
+ end