@@ -146,3 +146,85 @@ export const match = (
146146 } )
147147 return sortMatches ( matches , patterns , uninterpretedCharacters )
148148}
149+
150+ if ( import . meta. vitest ) {
151+ const { expect, test } = import . meta. vitest
152+
153+ // mock result from pattern.matchAll(/{{(.*?)}}/g) for test comparison
154+ const mockRegExpMatchArray = ( find , inner , index , input , groups ?) => {
155+ const regExpMatchArray : RegExpMatchArray = [ find , inner ]
156+ regExpMatchArray . index = index
157+ regExpMatchArray . input = input
158+ regExpMatchArray . groups = groups
159+ return regExpMatchArray
160+ }
161+ const patterns = [
162+ '{{gemarkung}} {{flur}} {{flstnrzae}}/{{flstnrnen}}, {{flstkennz}}' ,
163+ '{{gemarkung}} {{flur}} {{flstnrzae}}, {{flstkennz}}' ,
164+ '{{gemarkung}} {{flstnrzae}}/{{flstnrnen}}, {{flstkennz}}' ,
165+ '{{gemarkung}} {{flstnrzae}}, {{flstkennz}}' ,
166+ '{{flstkennz}}' ,
167+ ]
168+ const patternKeys = {
169+ gemarkung : '([^0-9]+)' ,
170+ flur : '([0-9]+)' ,
171+ flstnrzae : '([0-9]+)' ,
172+ flstnrnen : '([0-9]+)' ,
173+ flstkennz : '([0-9_]+)' ,
174+ }
175+
176+ test ( 'getBlocks parts pattern strings to Block[][]' , ( ) => {
177+ expect ( getBlocks ( patterns [ 0 ] as string ) ) . toEqual ( [
178+ mockRegExpMatchArray ( '{{gemarkung}}' , 'gemarkung' , 0 , patterns [ 0 ] ) ,
179+ ' ' ,
180+ mockRegExpMatchArray ( '{{flur}}' , 'flur' , 14 , patterns [ 0 ] ) ,
181+ ' ' ,
182+ mockRegExpMatchArray ( '{{flstnrzae}}' , 'flstnrzae' , 23 , patterns [ 0 ] ) ,
183+ '/' ,
184+ mockRegExpMatchArray ( '{{flstnrnen}}' , 'flstnrnen' , 37 , patterns [ 0 ] ) ,
185+ ', ' ,
186+ mockRegExpMatchArray ( '{{flstkennz}}' , 'flstkennz' , 52 , patterns [ 0 ] ) ,
187+ ] )
188+ } )
189+ test ( 'match builds full match groups' , ( ) => {
190+ expect (
191+ match ( patterns , patternKeys , 'Musterhausen 12 3/4, 1234___' )
192+ ) . toEqual ( [
193+ [
194+ [ 'gemarkung' , 'Musterhausen' ] ,
195+ [ 'flur' , '12' ] ,
196+ [ 'flstnrzae' , '3' ] ,
197+ [ 'flstnrnen' , '4' ] ,
198+ [ 'flstkennz' , '1234___' ] ,
199+ ] ,
200+ [
201+ [ 'gemarkung' , 'Musterhausen' ] ,
202+ [ 'flur' , '12' ] ,
203+ [ 'flstnrzae' , '3' ] ,
204+ ] ,
205+ [
206+ [ 'gemarkung' , 'Musterhausen' ] ,
207+ [ 'flstnrzae' , '12' ] ,
208+ [ 'flstnrnen' , '3' ] ,
209+ ] ,
210+ [
211+ [ 'gemarkung' , 'Musterhausen' ] ,
212+ [ 'flstnrzae' , '12' ] ,
213+ [ 'flstkennz' , '3' ] ,
214+ ] ,
215+ ] )
216+ } )
217+ test ( 'match manages to decide the best fit' , ( ) => {
218+ expect ( match ( patterns , patternKeys , '1234___' ) ) . toEqual ( [
219+ [
220+ [ 'flur' , '1234' ] ,
221+ [ 'flstkennz' , '___' ] ,
222+ ] ,
223+ [
224+ [ 'flstnrzae' , '1234' ] ,
225+ [ 'flstkennz' , '___' ] ,
226+ ] ,
227+ [ [ 'flstkennz' , '1234___' ] ] ,
228+ ] )
229+ } )
230+ }
0 commit comments