ruby-marc-spec 0.1.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.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build.yml +18 -0
  3. data/.gitignore +388 -0
  4. data/.gitmodules +3 -0
  5. data/.idea/codeStyles/codeStyleConfig.xml +5 -0
  6. data/.idea/go.imports.xml +6 -0
  7. data/.idea/inspectionProfiles/Project_Default.xml +23 -0
  8. data/.idea/marc_spec.iml +102 -0
  9. data/.idea/misc.xml +6 -0
  10. data/.idea/modules.xml +8 -0
  11. data/.idea/templateLanguages.xml +6 -0
  12. data/.idea/vcs.xml +7 -0
  13. data/.rubocop.yml +269 -0
  14. data/.ruby-version +1 -0
  15. data/.simplecov +8 -0
  16. data/CHANGES.md +3 -0
  17. data/Gemfile +6 -0
  18. data/LICENSE.md +21 -0
  19. data/README.md +172 -0
  20. data/Rakefile +20 -0
  21. data/lib/.rubocop.yml +5 -0
  22. data/lib/marc/spec/module_info.rb +14 -0
  23. data/lib/marc/spec/parsing/closed_int_range.rb +28 -0
  24. data/lib/marc/spec/parsing/closed_lc_alpha_range.rb +28 -0
  25. data/lib/marc/spec/parsing/parser.rb +213 -0
  26. data/lib/marc/spec/parsing.rb +1 -0
  27. data/lib/marc/spec/queries/al_num_range.rb +105 -0
  28. data/lib/marc/spec/queries/applicable.rb +18 -0
  29. data/lib/marc/spec/queries/character_spec.rb +81 -0
  30. data/lib/marc/spec/queries/comparison_string.rb +45 -0
  31. data/lib/marc/spec/queries/condition.rb +133 -0
  32. data/lib/marc/spec/queries/condition_context.rb +49 -0
  33. data/lib/marc/spec/queries/dsl.rb +80 -0
  34. data/lib/marc/spec/queries/indicator_value.rb +77 -0
  35. data/lib/marc/spec/queries/operator.rb +129 -0
  36. data/lib/marc/spec/queries/part.rb +63 -0
  37. data/lib/marc/spec/queries/position.rb +59 -0
  38. data/lib/marc/spec/queries/position_or_range.rb +27 -0
  39. data/lib/marc/spec/queries/query.rb +94 -0
  40. data/lib/marc/spec/queries/query_executor.rb +52 -0
  41. data/lib/marc/spec/queries/selector.rb +12 -0
  42. data/lib/marc/spec/queries/subfield.rb +88 -0
  43. data/lib/marc/spec/queries/subfield_value.rb +63 -0
  44. data/lib/marc/spec/queries/tag.rb +107 -0
  45. data/lib/marc/spec/queries/transform.rb +154 -0
  46. data/lib/marc/spec/queries.rb +1 -0
  47. data/lib/marc/spec.rb +32 -0
  48. data/rakelib/.rubocop.yml +19 -0
  49. data/rakelib/bundle.rake +8 -0
  50. data/rakelib/coverage.rake +11 -0
  51. data/rakelib/gem.rake +54 -0
  52. data/rakelib/parser_specs/formatter.rb +31 -0
  53. data/rakelib/parser_specs/parser_specs.rb.txt.erb +35 -0
  54. data/rakelib/parser_specs/rule.rb +95 -0
  55. data/rakelib/parser_specs/suite.rb +91 -0
  56. data/rakelib/parser_specs/test.rb +97 -0
  57. data/rakelib/parser_specs.rb +1 -0
  58. data/rakelib/rubocop.rake +18 -0
  59. data/rakelib/spec.rake +27 -0
  60. data/ruby-marc-spec.gemspec +42 -0
  61. data/spec/.rubocop.yml +46 -0
  62. data/spec/README.md +16 -0
  63. data/spec/data/b23161018-sru.xml +182 -0
  64. data/spec/data/sandburg.xml +82 -0
  65. data/spec/generated/char_indicator_spec.rb +174 -0
  66. data/spec/generated/char_spec.rb +113 -0
  67. data/spec/generated/comparison_string_spec.rb +74 -0
  68. data/spec/generated/field_tag_spec.rb +156 -0
  69. data/spec/generated/index_char_spec.rb +669 -0
  70. data/spec/generated/index_indicator_spec.rb +174 -0
  71. data/spec/generated/index_spec.rb +113 -0
  72. data/spec/generated/index_sub_spec_spec.rb +1087 -0
  73. data/spec/generated/indicators_spec.rb +75 -0
  74. data/spec/generated/position_or_range_spec.rb +110 -0
  75. data/spec/generated/sub_spec_spec.rb +208 -0
  76. data/spec/generated/sub_spec_sub_spec_spec.rb +1829 -0
  77. data/spec/generated/subfield_char_spec.rb +405 -0
  78. data/spec/generated/subfield_range_range_spec.rb +48 -0
  79. data/spec/generated/subfield_range_spec.rb +87 -0
  80. data/spec/generated/subfield_range_sub_spec_spec.rb +214 -0
  81. data/spec/generated/subfield_tag_range_spec.rb +477 -0
  82. data/spec/generated/subfield_tag_sub_spec_spec.rb +3216 -0
  83. data/spec/generated/subfield_tag_tag_spec.rb +5592 -0
  84. data/spec/marc/spec/parsing/closed_int_range_spec.rb +49 -0
  85. data/spec/marc/spec/parsing/closed_lc_alpha_range_spec.rb +49 -0
  86. data/spec/marc/spec/parsing/parser_spec.rb +545 -0
  87. data/spec/marc/spec/queries/al_num_range_spec.rb +114 -0
  88. data/spec/marc/spec/queries/character_spec_spec.rb +28 -0
  89. data/spec/marc/spec/queries/comparison_string_spec.rb +28 -0
  90. data/spec/marc/spec/queries/indicator_value_spec.rb +28 -0
  91. data/spec/marc/spec/queries/query_spec.rb +200 -0
  92. data/spec/marc/spec/queries/subfield_spec.rb +92 -0
  93. data/spec/marc/spec/queries/subfield_value_spec.rb +31 -0
  94. data/spec/marc/spec/queries/tag_spec.rb +144 -0
  95. data/spec/marc/spec/queries/transform_spec.rb +459 -0
  96. data/spec/marc_spec_spec.rb +247 -0
  97. data/spec/scratch_spec.rb +112 -0
  98. data/spec/spec_helper.rb +23 -0
  99. metadata +341 -0
@@ -0,0 +1,405 @@
1
+ require 'spec_helper'
2
+ require 'parslet/rig/rspec'
3
+
4
+ module MARC
5
+ module Spec
6
+ module Parsing
7
+ context 'suite' do
8
+ describe :subfield_char do
9
+ let(:parser) { Parser.new }
10
+ let(:reporter) { Parslet::ErrorReporter::Deepest.new }
11
+
12
+ describe 'marc_spec: valid field tag and invalid subfield tag' do
13
+ # /invalid/wildCombination_invalidSubfieldTag.json
14
+ it "char '|' is not allowed -> invalid" do
15
+ # /invalid/wildCombination_invalidSubfieldTag.json
16
+ expect(parser.marc_spec).not_to parse('...$|', trace: true, reporter: reporter)
17
+ end
18
+
19
+ it "char 'ß' is not allowed -> invalid" do
20
+ # /invalid/wildCombination_invalidSubfieldTag.json
21
+ expect(parser.marc_spec).not_to parse('...$ß', trace: true, reporter: reporter)
22
+ end
23
+
24
+ it 'only one digit allowed -> invalid' do
25
+ # /invalid/wildCombination_invalidSubfieldTag.json
26
+ expect(parser.marc_spec).not_to parse('...$10', trace: true, reporter: reporter)
27
+ end
28
+
29
+ it 'uppercase chars are not allowed -> invalid' do
30
+ # /invalid/wildCombination_invalidSubfieldTag.json
31
+ expect(parser.marc_spec).not_to parse('...$A', trace: true, reporter: reporter)
32
+ end
33
+
34
+ it 'whitespace is not allowed -> invalid' do
35
+ # /invalid/wildCombination_invalidSubfieldTag.json
36
+ expect(parser.marc_spec).not_to parse('...$ a', trace: true, reporter: reporter)
37
+ end
38
+
39
+ end
40
+ describe 'marc_spec: valid field tag and subfield tag' do
41
+ # /valid/wildCombination_validSubfieldTag.json
42
+ it 'digit subfieldtag 0 -> valid' do
43
+ # /valid/wildCombination_validSubfieldTag.json
44
+ expect(parser.marc_spec).to parse('...$0', trace: true, reporter: reporter)
45
+ end
46
+
47
+ it 'digit subfieldtag 9 -> valid' do
48
+ # /valid/wildCombination_validSubfieldTag.json
49
+ expect(parser.marc_spec).to parse('...$9', trace: true, reporter: reporter)
50
+ end
51
+
52
+ it 'lowercase alpha subfieldtag a -> valid' do
53
+ # /valid/wildCombination_validSubfieldTag.json
54
+ expect(parser.marc_spec).to parse('...$a', trace: true, reporter: reporter)
55
+ end
56
+
57
+ it 'lowercase alpha subfieldtag z -> valid' do
58
+ # /valid/wildCombination_validSubfieldTag.json
59
+ expect(parser.marc_spec).to parse('...$z', trace: true, reporter: reporter)
60
+ end
61
+
62
+ it 'subfieldtag ! -> valid' do
63
+ # /valid/wildCombination_validSubfieldTag.json
64
+ expect(parser.marc_spec).to parse('...$!', trace: true, reporter: reporter)
65
+ end
66
+
67
+ it 'subfieldtag # -> valid' do
68
+ # /valid/wildCombination_validSubfieldTag.json
69
+ expect(parser.marc_spec).to parse('...$#', trace: true, reporter: reporter)
70
+ end
71
+
72
+ it 'subfieldtag $ -> valid' do
73
+ # /valid/wildCombination_validSubfieldTag.json
74
+ expect(parser.marc_spec).to parse('...$$', trace: true, reporter: reporter)
75
+ end
76
+
77
+ it 'subfieldtag % -> valid' do
78
+ # /valid/wildCombination_validSubfieldTag.json
79
+ expect(parser.marc_spec).to parse('...$%', trace: true, reporter: reporter)
80
+ end
81
+
82
+ it 'subfieldtag & -> valid' do
83
+ # /valid/wildCombination_validSubfieldTag.json
84
+ expect(parser.marc_spec).to parse('...$&', trace: true, reporter: reporter)
85
+ end
86
+
87
+ it "subfieldtag ' -> valid" do
88
+ # /valid/wildCombination_validSubfieldTag.json
89
+ expect(parser.marc_spec).to parse("...$'", trace: true, reporter: reporter)
90
+ end
91
+
92
+ it 'subfieldtag ( -> valid' do
93
+ # /valid/wildCombination_validSubfieldTag.json
94
+ expect(parser.marc_spec).to parse('...$(', trace: true, reporter: reporter)
95
+ end
96
+
97
+ it 'subfieldtag ) -> valid' do
98
+ # /valid/wildCombination_validSubfieldTag.json
99
+ expect(parser.marc_spec).to parse('...$)', trace: true, reporter: reporter)
100
+ end
101
+
102
+ it 'subfieldtag * -> valid' do
103
+ # /valid/wildCombination_validSubfieldTag.json
104
+ expect(parser.marc_spec).to parse('...$*', trace: true, reporter: reporter)
105
+ end
106
+
107
+ it 'subfieldtag + -> valid' do
108
+ # /valid/wildCombination_validSubfieldTag.json
109
+ expect(parser.marc_spec).to parse('...$+', trace: true, reporter: reporter)
110
+ end
111
+
112
+ it 'subfieldtag , -> valid' do
113
+ # /valid/wildCombination_validSubfieldTag.json
114
+ expect(parser.marc_spec).to parse('...$,', trace: true, reporter: reporter)
115
+ end
116
+
117
+ it 'subfieldtag - -> valid' do
118
+ # /valid/wildCombination_validSubfieldTag.json
119
+ expect(parser.marc_spec).to parse('...$-', trace: true, reporter: reporter)
120
+ end
121
+
122
+ it 'subfieldtag . -> valid' do
123
+ # /valid/wildCombination_validSubfieldTag.json
124
+ expect(parser.marc_spec).to parse('...$.', trace: true, reporter: reporter)
125
+ end
126
+
127
+ it 'subfieldtag / -> valid' do
128
+ # /valid/wildCombination_validSubfieldTag.json
129
+ expect(parser.marc_spec).to parse('...$/', trace: true, reporter: reporter)
130
+ end
131
+
132
+ it 'subfieldtag : -> valid' do
133
+ # /valid/wildCombination_validSubfieldTag.json
134
+ expect(parser.marc_spec).to parse('...$:', trace: true, reporter: reporter)
135
+ end
136
+
137
+ it 'subfieldtag ; -> valid' do
138
+ # /valid/wildCombination_validSubfieldTag.json
139
+ expect(parser.marc_spec).to parse('...$;', trace: true, reporter: reporter)
140
+ end
141
+
142
+ it 'subfieldtag < -> valid' do
143
+ # /valid/wildCombination_validSubfieldTag.json
144
+ expect(parser.marc_spec).to parse('...$<', trace: true, reporter: reporter)
145
+ end
146
+
147
+ it 'subfieldtag = -> valid' do
148
+ # /valid/wildCombination_validSubfieldTag.json
149
+ expect(parser.marc_spec).to parse('...$=', trace: true, reporter: reporter)
150
+ end
151
+
152
+ it 'subfieldtag > -> valid' do
153
+ # /valid/wildCombination_validSubfieldTag.json
154
+ expect(parser.marc_spec).to parse('...$>', trace: true, reporter: reporter)
155
+ end
156
+
157
+ it 'subfieldtag ? -> valid' do
158
+ # /valid/wildCombination_validSubfieldTag.json
159
+ expect(parser.marc_spec).to parse('...$?', trace: true, reporter: reporter)
160
+ end
161
+
162
+ it 'subfieldtag [ -> valid' do
163
+ # /valid/wildCombination_validSubfieldTag.json
164
+ expect(parser.marc_spec).to parse('...$[', trace: true, reporter: reporter)
165
+ end
166
+
167
+ it 'subfieldtag \\ -> valid' do
168
+ # /valid/wildCombination_validSubfieldTag.json
169
+ expect(parser.marc_spec).to parse('...$\\', trace: true, reporter: reporter)
170
+ end
171
+
172
+ it 'subfieldtag ] -> valid' do
173
+ # /valid/wildCombination_validSubfieldTag.json
174
+ expect(parser.marc_spec).to parse('...$]', trace: true, reporter: reporter)
175
+ end
176
+
177
+ it 'subfieldtag ^ -> valid' do
178
+ # /valid/wildCombination_validSubfieldTag.json
179
+ expect(parser.marc_spec).to parse('...$^', trace: true, reporter: reporter)
180
+ end
181
+
182
+ it 'subfieldtag _ -> valid' do
183
+ # /valid/wildCombination_validSubfieldTag.json
184
+ expect(parser.marc_spec).to parse('...$_', trace: true, reporter: reporter)
185
+ end
186
+
187
+ it 'subfieldtag ` -> valid' do
188
+ # /valid/wildCombination_validSubfieldTag.json
189
+ expect(parser.marc_spec).to parse('...$`', trace: true, reporter: reporter)
190
+ end
191
+
192
+ it 'subfieldtag { -> valid' do
193
+ # /valid/wildCombination_validSubfieldTag.json
194
+ expect(parser.marc_spec).to parse('...${', trace: true, reporter: reporter)
195
+ end
196
+
197
+ it 'subfieldtag } -> valid' do
198
+ # /valid/wildCombination_validSubfieldTag.json
199
+ expect(parser.marc_spec).to parse('...$}', trace: true, reporter: reporter)
200
+ end
201
+
202
+ it 'subfieldtag ~ -> valid' do
203
+ # /valid/wildCombination_validSubfieldTag.json
204
+ expect(parser.marc_spec).to parse('...$~', trace: true, reporter: reporter)
205
+ end
206
+
207
+ end
208
+ describe 'subfield tags are strings and match pattern' do
209
+ # /invalid/invalidSubfieldTag.json
210
+ it "char '|' is not allowed -> invalid" do
211
+ # /invalid/invalidSubfieldTag.json
212
+ expect(parser.subfield_char).not_to parse('|', trace: true, reporter: reporter)
213
+ end
214
+
215
+ it "char 'ß' is not allowed -> invalid" do
216
+ # /invalid/invalidSubfieldTag.json
217
+ expect(parser.subfield_char).not_to parse('ß', trace: true, reporter: reporter)
218
+ end
219
+
220
+ it 'digit subfieldtag 0 -> valid' do
221
+ # /valid/validSubfieldTag.json
222
+ expect(parser.subfield_char).to parse('0', trace: true, reporter: reporter)
223
+ end
224
+
225
+ it 'digit subfieldtag 9 -> valid' do
226
+ # /valid/validSubfieldTag.json
227
+ expect(parser.subfield_char).to parse('9', trace: true, reporter: reporter)
228
+ end
229
+
230
+ it 'lowercase alpha subfieldtag a -> valid' do
231
+ # /valid/validSubfieldTag.json
232
+ expect(parser.subfield_char).to parse('a', trace: true, reporter: reporter)
233
+ end
234
+
235
+ it 'lowercase alpha subfieldtag z -> valid' do
236
+ # /valid/validSubfieldTag.json
237
+ expect(parser.subfield_char).to parse('z', trace: true, reporter: reporter)
238
+ end
239
+
240
+ it 'only one digit allowed -> invalid' do
241
+ # /invalid/invalidSubfieldTag.json
242
+ expect(parser.subfield_char).not_to parse('10', trace: true, reporter: reporter)
243
+ end
244
+
245
+ it 'subfieldtag ! -> valid' do
246
+ # /valid/validSubfieldTag.json
247
+ expect(parser.subfield_char).to parse('!', trace: true, reporter: reporter)
248
+ end
249
+
250
+ it 'subfieldtag # -> valid' do
251
+ # /valid/validSubfieldTag.json
252
+ expect(parser.subfield_char).to parse('#', trace: true, reporter: reporter)
253
+ end
254
+
255
+ it 'subfieldtag $ -> valid' do
256
+ # /valid/validSubfieldTag.json
257
+ expect(parser.subfield_char).to parse('$', trace: true, reporter: reporter)
258
+ end
259
+
260
+ it 'subfieldtag % -> valid' do
261
+ # /valid/validSubfieldTag.json
262
+ expect(parser.subfield_char).to parse('%', trace: true, reporter: reporter)
263
+ end
264
+
265
+ it 'subfieldtag & -> valid' do
266
+ # /valid/validSubfieldTag.json
267
+ expect(parser.subfield_char).to parse('&', trace: true, reporter: reporter)
268
+ end
269
+
270
+ it "subfieldtag ' -> valid" do
271
+ # /valid/validSubfieldTag.json
272
+ expect(parser.subfield_char).to parse("'", trace: true, reporter: reporter)
273
+ end
274
+
275
+ it 'subfieldtag ( -> valid' do
276
+ # /valid/validSubfieldTag.json
277
+ expect(parser.subfield_char).to parse('(', trace: true, reporter: reporter)
278
+ end
279
+
280
+ it 'subfieldtag ) -> valid' do
281
+ # /valid/validSubfieldTag.json
282
+ expect(parser.subfield_char).to parse(')', trace: true, reporter: reporter)
283
+ end
284
+
285
+ it 'subfieldtag * -> valid' do
286
+ # /valid/validSubfieldTag.json
287
+ expect(parser.subfield_char).to parse('*', trace: true, reporter: reporter)
288
+ end
289
+
290
+ it 'subfieldtag + -> valid' do
291
+ # /valid/validSubfieldTag.json
292
+ expect(parser.subfield_char).to parse('+', trace: true, reporter: reporter)
293
+ end
294
+
295
+ it 'subfieldtag , -> valid' do
296
+ # /valid/validSubfieldTag.json
297
+ expect(parser.subfield_char).to parse(',', trace: true, reporter: reporter)
298
+ end
299
+
300
+ it 'subfieldtag - -> valid' do
301
+ # /valid/validSubfieldTag.json
302
+ expect(parser.subfield_char).to parse('-', trace: true, reporter: reporter)
303
+ end
304
+
305
+ it 'subfieldtag . -> valid' do
306
+ # /valid/validSubfieldTag.json
307
+ expect(parser.subfield_char).to parse('.', trace: true, reporter: reporter)
308
+ end
309
+
310
+ it 'subfieldtag / -> valid' do
311
+ # /valid/validSubfieldTag.json
312
+ expect(parser.subfield_char).to parse('/', trace: true, reporter: reporter)
313
+ end
314
+
315
+ it 'subfieldtag : -> valid' do
316
+ # /valid/validSubfieldTag.json
317
+ expect(parser.subfield_char).to parse(':', trace: true, reporter: reporter)
318
+ end
319
+
320
+ it 'subfieldtag ; -> valid' do
321
+ # /valid/validSubfieldTag.json
322
+ expect(parser.subfield_char).to parse(';', trace: true, reporter: reporter)
323
+ end
324
+
325
+ it 'subfieldtag < -> valid' do
326
+ # /valid/validSubfieldTag.json
327
+ expect(parser.subfield_char).to parse('<', trace: true, reporter: reporter)
328
+ end
329
+
330
+ it 'subfieldtag = -> valid' do
331
+ # /valid/validSubfieldTag.json
332
+ expect(parser.subfield_char).to parse('=', trace: true, reporter: reporter)
333
+ end
334
+
335
+ it 'subfieldtag > -> valid' do
336
+ # /valid/validSubfieldTag.json
337
+ expect(parser.subfield_char).to parse('>', trace: true, reporter: reporter)
338
+ end
339
+
340
+ it 'subfieldtag ? -> valid' do
341
+ # /valid/validSubfieldTag.json
342
+ expect(parser.subfield_char).to parse('?', trace: true, reporter: reporter)
343
+ end
344
+
345
+ it 'subfieldtag [ -> valid' do
346
+ # /valid/validSubfieldTag.json
347
+ expect(parser.subfield_char).to parse('[', trace: true, reporter: reporter)
348
+ end
349
+
350
+ it 'subfieldtag \\ -> valid' do
351
+ # /valid/validSubfieldTag.json
352
+ expect(parser.subfield_char).to parse('\\', trace: true, reporter: reporter)
353
+ end
354
+
355
+ it 'subfieldtag ] -> valid' do
356
+ # /valid/validSubfieldTag.json
357
+ expect(parser.subfield_char).to parse(']', trace: true, reporter: reporter)
358
+ end
359
+
360
+ it 'subfieldtag ^ -> valid' do
361
+ # /valid/validSubfieldTag.json
362
+ expect(parser.subfield_char).to parse('^', trace: true, reporter: reporter)
363
+ end
364
+
365
+ it 'subfieldtag _ -> valid' do
366
+ # /valid/validSubfieldTag.json
367
+ expect(parser.subfield_char).to parse('_', trace: true, reporter: reporter)
368
+ end
369
+
370
+ it 'subfieldtag ` -> valid' do
371
+ # /valid/validSubfieldTag.json
372
+ expect(parser.subfield_char).to parse('`', trace: true, reporter: reporter)
373
+ end
374
+
375
+ it 'subfieldtag { -> valid' do
376
+ # /valid/validSubfieldTag.json
377
+ expect(parser.subfield_char).to parse('{', trace: true, reporter: reporter)
378
+ end
379
+
380
+ it 'subfieldtag } -> valid' do
381
+ # /valid/validSubfieldTag.json
382
+ expect(parser.subfield_char).to parse('}', trace: true, reporter: reporter)
383
+ end
384
+
385
+ it 'subfieldtag ~ -> valid' do
386
+ # /valid/validSubfieldTag.json
387
+ expect(parser.subfield_char).to parse('~', trace: true, reporter: reporter)
388
+ end
389
+
390
+ it 'uppercase chars are not allowed -> invalid' do
391
+ # /invalid/invalidSubfieldTag.json
392
+ expect(parser.subfield_char).not_to parse('A', trace: true, reporter: reporter)
393
+ end
394
+
395
+ it 'whitespace is not allowed -> invalid' do
396
+ # /invalid/invalidSubfieldTag.json
397
+ expect(parser.subfield_char).not_to parse(' a', trace: true, reporter: reporter)
398
+ end
399
+
400
+ end
401
+ end
402
+ end
403
+ end
404
+ end
405
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'parslet/rig/rspec'
3
+
4
+ module MARC
5
+ module Spec
6
+ module Parsing
7
+ context 'suite' do
8
+ describe :subfield_range_range do
9
+ let(:parser) { Parser.new }
10
+ let(:reporter) { Parslet::ErrorReporter::Deepest.new }
11
+
12
+ describe 'marc_spec: valid field tag and subfield ranges' do
13
+ # /valid/wildCombination_validSubfieldRangeRange.json
14
+
15
+ describe 'subfield range with lowercase subfieldtags' do
16
+
17
+ it '&& subfield range with digits -> valid' do
18
+ # /valid/wildCombination_validSubfieldRangeRange.json
19
+ expect(parser.marc_spec).to parse('...$a-z$0-9', trace: true, reporter: reporter)
20
+ end
21
+
22
+ it '&& subfield range with lowercase subfieldtags -> valid' do
23
+ # /valid/wildCombination_validSubfieldRangeRange.json
24
+ expect(parser.marc_spec).to parse('...$a-z$a-z', trace: true, reporter: reporter)
25
+ end
26
+
27
+ end
28
+
29
+ describe 'subfield range with digits' do
30
+
31
+ it '&& subfield range with digits -> valid' do
32
+ # /valid/wildCombination_validSubfieldRangeRange.json
33
+ expect(parser.marc_spec).to parse('...$0-9$0-9', trace: true, reporter: reporter)
34
+ end
35
+
36
+ it '&& subfield range with lowercase subfieldtags -> valid' do
37
+ # /valid/wildCombination_validSubfieldRangeRange.json
38
+ expect(parser.marc_spec).to parse('...$0-9$a-z', trace: true, reporter: reporter)
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+ require 'parslet/rig/rspec'
3
+
4
+ module MARC
5
+ module Spec
6
+ module Parsing
7
+ context 'suite' do
8
+ describe :subfield_range do
9
+ let(:parser) { Parser.new }
10
+ let(:reporter) { Parslet::ErrorReporter::Deepest.new }
11
+
12
+ describe 'marc_spec: valid field tag and invalid subfield range' do
13
+ # /invalid/wildCombination_invalidSubfieldRange.json
14
+ it 'matches the pattern but not a valid subfield tag range -> invalid' do
15
+ # /invalid/wildCombination_invalidSubfieldRange.json
16
+ expect(parser.marc_spec).not_to parse('...$1-0', trace: true, reporter: reporter)
17
+ expect(parser.marc_spec).not_to parse('...$z-a', trace: true, reporter: reporter)
18
+ end
19
+
20
+ it 'mix of alpha and digit -> invalid' do
21
+ # /invalid/wildCombination_invalidSubfieldRange.json
22
+ expect(parser.marc_spec).not_to parse('...$a-9', trace: true, reporter: reporter)
23
+ end
24
+
25
+ it 'mix of digit and alpha -> invalid' do
26
+ # /invalid/wildCombination_invalidSubfieldRange.json
27
+ expect(parser.marc_spec).not_to parse('...$0-a', trace: true, reporter: reporter)
28
+ end
29
+
30
+ it 'uppercase chars are not allowed -> invalid' do
31
+ # /invalid/wildCombination_invalidSubfieldRange.json
32
+ expect(parser.marc_spec).not_to parse('...$A-Z', trace: true, reporter: reporter)
33
+ end
34
+
35
+ end
36
+ describe 'marc_spec: valid field tag and subfield range' do
37
+ # /valid/wildCombination_validSubfieldRange.json
38
+ it 'subfield range with digits -> valid' do
39
+ # /valid/wildCombination_validSubfieldRange.json
40
+ expect(parser.marc_spec).to parse('...$0-9', trace: true, reporter: reporter)
41
+ end
42
+
43
+ it 'subfield range with lowercase subfieldtags -> valid' do
44
+ # /valid/wildCombination_validSubfieldRange.json
45
+ expect(parser.marc_spec).to parse('...$a-z', trace: true, reporter: reporter)
46
+ end
47
+
48
+ end
49
+ describe 'subfield ranges are strings and match pattern' do
50
+ # /invalid/invalidSubfieldRange.json
51
+ it 'matches the pattern but not a valid subfield tag range -> invalid' do
52
+ # /invalid/invalidSubfieldRange.json
53
+ expect(parser.subfield_range).not_to parse('1-0', trace: true, reporter: reporter)
54
+ expect(parser.subfield_range).not_to parse('z-a', trace: true, reporter: reporter)
55
+ end
56
+
57
+ it 'mix of alpha and digit -> invalid' do
58
+ # /invalid/invalidSubfieldRange.json
59
+ expect(parser.subfield_range).not_to parse('a-9', trace: true, reporter: reporter)
60
+ end
61
+
62
+ it 'mix of digit and alpha -> invalid' do
63
+ # /invalid/invalidSubfieldRange.json
64
+ expect(parser.subfield_range).not_to parse('0-a', trace: true, reporter: reporter)
65
+ end
66
+
67
+ it 'subfield range with digits -> valid' do
68
+ # /valid/validSubfieldRange.json
69
+ expect(parser.subfield_range).to parse('0-9', trace: true, reporter: reporter)
70
+ end
71
+
72
+ it 'subfield range with lowercase subfieldtags -> valid' do
73
+ # /valid/validSubfieldRange.json
74
+ expect(parser.subfield_range).to parse('a-z', trace: true, reporter: reporter)
75
+ end
76
+
77
+ it 'uppercase chars are not allowed -> invalid' do
78
+ # /invalid/invalidSubfieldRange.json
79
+ expect(parser.subfield_range).not_to parse('A-Z', trace: true, reporter: reporter)
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end