Skip to content

Commit 39c7ba9

Browse files
committed
✅ Adds more parser tests
1 parent b0557a8 commit 39c7ba9

File tree

2 files changed

+153
-6
lines changed

2 files changed

+153
-6
lines changed

src/com/nervestaple/hl7_parser/parser.clj

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,24 @@
1818
(def ASCII_CR 13)
1919
(def ASCII_LF 10)
2020

21+
;; ASCII codes of characters used as default delimiters
22+
(def ASCII_PIPE 124)
23+
(def ASCII_CARAT 94)
24+
(def ASCII_AMPERSAND 38)
25+
(def ASCII_TILDE 126)
26+
(def ASCII_BACKSLASH 92)
27+
2128
;; HL7 Messaging v2.x segment delimiter
2229
(def SEGMENT-DELIMITER ASCII_CR)
2330

31+
;; Default set of message delimiters, these are the most common
32+
(def DEFAULT-DELIMITERS
33+
{:field ASCII_PIPE
34+
:component ASCII_CARAT
35+
:subcomponent ASCII_AMPERSAND
36+
:repeating ASCII_TILDE
37+
:escape ASCII_BACKSLASH})
38+
2439
;;
2540
;; Emit methods used to output messages
2641
;;
@@ -127,12 +142,17 @@
127142
[values]))
128143

129144
(defn create-empty-message
130-
"Returns a new, empty message map."
131-
[]
132-
{:delimiters nil :segments []})
145+
"Returns a new, empty message map. if no map of delimiters is provided then the
146+
default set will be used."
147+
([]
148+
(create-empty-message DEFAULT-DELIMITERS))
149+
([delimiters]
150+
{:delimiters delimiters :segments []}))
133151

134152
(defn create-message
135-
"Returns a new, empty message map."
153+
"Accepts a map of delimiters and segments. Returns a new parsed message using
154+
the provided delimiters (or the default set if none is provided) populated
155+
with the provided segments."
136156
[delimiters & segments]
137157
{:delimiters delimiters
138158
:segments (if (< 0 (count segments)) (vec segments) [])})
@@ -144,8 +164,10 @@
144164

145165
(defn create-field
146166
"Returns a new field map populated with the provided data."
147-
[data]
148-
{:content (convert-values data)})
167+
([]
168+
(create-field nil))
169+
([data]
170+
{:content (convert-values data)}))
149171

150172
(defn add-segment
151173
"Adds the provided segment map to the provided message map and returns a new

test/com/nervestaple/hl7_parser/parser_test.clj

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,128 @@
116116
(deftest emit-message-test
117117
(testing "Emits the test message"
118118
(is (= (sample/message) (parser/str-message short-message-parsed)))))
119+
120+
(deftest empty-message-delimiters-test
121+
(testing "Empty messages contain default delimiters"
122+
(is (= (:delimiters short-message-parsed)
123+
(:delimiters (parser/create-empty-message))))))
124+
125+
(deftest pr-delimiters-test
126+
(testing "Returns a string with the provided delimiters"
127+
(is (= "^~\\&"
128+
(parser/pr-delimiters parser/DEFAULT-DELIMITERS)))))
129+
130+
(deftest create-empty-message
131+
(testing "Creates an empty message"
132+
(is (= {:delimiters
133+
{:field 124, :component 94, :subcomponent 38, :repeating 126, :escape 92},
134+
:segments []}
135+
(parser/create-empty-message)))))
136+
137+
(deftest create-empty-message-with-delimiters
138+
(testing "Creates an empty message"
139+
(is (= {:delimiters
140+
{:field 1 :component 2 :subcomponent 3 :repeating 4 :escape 5}
141+
:segments []}
142+
(parser/create-empty-message
143+
{:field 1 :component 2 :subcomponent 3 :repeating 4 :escape 5})))))
144+
145+
(deftest create-segment-test
146+
(testing "Creates an empty segment"
147+
(is (= {:id "PID" :fields []}
148+
(parser/create-segment "PID")))))
149+
150+
(deftest create-segment-with-fields
151+
(testing "Creates a segment with field data"
152+
(is (= {:id "PID",
153+
:fields
154+
[{:content []}
155+
{:content []}
156+
{:content ["20301"]}
157+
{:content []}
158+
{:content ["Durden" "Tyler" "" "" "Mr."]}
159+
{:content []}
160+
{:content ["19700312"]}
161+
{:content ["M"]}
162+
{:content []}
163+
{:content []}
164+
{:content ["88 Punchward Dr." "" "Los Angeles" "CA" "11221" "USA"]}]}
165+
(parser/create-segment "PID"
166+
(parser/create-field)
167+
(parser/create-field)
168+
(parser/create-field "20301")
169+
(parser/create-field)
170+
(parser/create-field ["Durden" "Tyler" nil nil "Mr."])
171+
(parser/create-field)
172+
(parser/create-field "19700312")
173+
(parser/create-field "M")
174+
(parser/create-field)
175+
(parser/create-field)
176+
(parser/create-field ["88 Punchward Dr." nil "Los Angeles" "CA" "11221" "USA"]))))))
177+
178+
(deftest add-segment-to-message
179+
(testing "Creates a message and adds as segment"
180+
(is (= {:delimiters
181+
{:field 124, :component 94, :subcomponent 38, :repeating 126, :escape 92},
182+
:segments
183+
[{:id "PID",
184+
:fields
185+
[{:content []}
186+
{:content []}
187+
{:content ["20301"]}
188+
{:content []}
189+
{:content ["Durden" "Tyler" "" "" "Mr."]}
190+
{:content []}
191+
{:content ["19700312"]}
192+
{:content ["M"]}
193+
{:content []}
194+
{:content []}
195+
{:content ["88 Punchward Dr." "" "Los Angeles" "CA" "11221" "USA"]}]}]}
196+
(parser/add-segment
197+
(parser/create-empty-message)
198+
(parser/create-segment "PID"
199+
(parser/create-field)
200+
(parser/create-field)
201+
(parser/create-field "20301")
202+
(parser/create-field)
203+
(parser/create-field ["Durden" "Tyler" nil nil "Mr."])
204+
(parser/create-field)
205+
(parser/create-field "19700312")
206+
(parser/create-field "M")
207+
(parser/create-field)
208+
(parser/create-field)
209+
(parser/create-field ["88 Punchward Dr." nil "Los Angeles" "CA" "11221" "USA"])))))))
210+
211+
(deftest add-field-to-segment
212+
(testing "Adds a field to a segment"
213+
(is (= {:id "PID",
214+
:fields
215+
[{:content []}
216+
{:content []}
217+
{:content ["20301"]}
218+
{:content []}
219+
{:content ["Durden" "Tyler" "" "" "Mr."]}]}
220+
(parser/add-field
221+
(parser/create-segment "PID"
222+
(parser/create-field)
223+
(parser/create-field)
224+
(parser/create-field "20301")
225+
(parser/create-field))
226+
(parser/create-field ["Durden" "Tyler" nil nil "Mr."]))))))
227+
228+
(deftest add-fields-to-segment
229+
(testing "Adds a field to a segment"
230+
(is (= {:id "PID",
231+
:fields
232+
[{:content []}
233+
{:content []}
234+
{:content ["20301"]}
235+
{:content []}
236+
{:content ["Durden" "Tyler" "" "" "Mr."]}]}
237+
(parser/add-fields
238+
(parser/create-segment "PID"
239+
(parser/create-field)
240+
(parser/create-field)
241+
(parser/create-field "20301"))
242+
[(parser/create-field)
243+
(parser/create-field ["Durden" "Tyler" nil nil "Mr."])])))))

0 commit comments

Comments
 (0)