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.
- checksums.yaml +7 -0
- data/.github/workflows/build.yml +18 -0
- data/.gitignore +388 -0
- data/.gitmodules +3 -0
- data/.idea/codeStyles/codeStyleConfig.xml +5 -0
- data/.idea/go.imports.xml +6 -0
- data/.idea/inspectionProfiles/Project_Default.xml +23 -0
- data/.idea/marc_spec.iml +102 -0
- data/.idea/misc.xml +6 -0
- data/.idea/modules.xml +8 -0
- data/.idea/templateLanguages.xml +6 -0
- data/.idea/vcs.xml +7 -0
- data/.rubocop.yml +269 -0
- data/.ruby-version +1 -0
- data/.simplecov +8 -0
- data/CHANGES.md +3 -0
- data/Gemfile +6 -0
- data/LICENSE.md +21 -0
- data/README.md +172 -0
- data/Rakefile +20 -0
- data/lib/.rubocop.yml +5 -0
- data/lib/marc/spec/module_info.rb +14 -0
- data/lib/marc/spec/parsing/closed_int_range.rb +28 -0
- data/lib/marc/spec/parsing/closed_lc_alpha_range.rb +28 -0
- data/lib/marc/spec/parsing/parser.rb +213 -0
- data/lib/marc/spec/parsing.rb +1 -0
- data/lib/marc/spec/queries/al_num_range.rb +105 -0
- data/lib/marc/spec/queries/applicable.rb +18 -0
- data/lib/marc/spec/queries/character_spec.rb +81 -0
- data/lib/marc/spec/queries/comparison_string.rb +45 -0
- data/lib/marc/spec/queries/condition.rb +133 -0
- data/lib/marc/spec/queries/condition_context.rb +49 -0
- data/lib/marc/spec/queries/dsl.rb +80 -0
- data/lib/marc/spec/queries/indicator_value.rb +77 -0
- data/lib/marc/spec/queries/operator.rb +129 -0
- data/lib/marc/spec/queries/part.rb +63 -0
- data/lib/marc/spec/queries/position.rb +59 -0
- data/lib/marc/spec/queries/position_or_range.rb +27 -0
- data/lib/marc/spec/queries/query.rb +94 -0
- data/lib/marc/spec/queries/query_executor.rb +52 -0
- data/lib/marc/spec/queries/selector.rb +12 -0
- data/lib/marc/spec/queries/subfield.rb +88 -0
- data/lib/marc/spec/queries/subfield_value.rb +63 -0
- data/lib/marc/spec/queries/tag.rb +107 -0
- data/lib/marc/spec/queries/transform.rb +154 -0
- data/lib/marc/spec/queries.rb +1 -0
- data/lib/marc/spec.rb +32 -0
- data/rakelib/.rubocop.yml +19 -0
- data/rakelib/bundle.rake +8 -0
- data/rakelib/coverage.rake +11 -0
- data/rakelib/gem.rake +54 -0
- data/rakelib/parser_specs/formatter.rb +31 -0
- data/rakelib/parser_specs/parser_specs.rb.txt.erb +35 -0
- data/rakelib/parser_specs/rule.rb +95 -0
- data/rakelib/parser_specs/suite.rb +91 -0
- data/rakelib/parser_specs/test.rb +97 -0
- data/rakelib/parser_specs.rb +1 -0
- data/rakelib/rubocop.rake +18 -0
- data/rakelib/spec.rake +27 -0
- data/ruby-marc-spec.gemspec +42 -0
- data/spec/.rubocop.yml +46 -0
- data/spec/README.md +16 -0
- data/spec/data/b23161018-sru.xml +182 -0
- data/spec/data/sandburg.xml +82 -0
- data/spec/generated/char_indicator_spec.rb +174 -0
- data/spec/generated/char_spec.rb +113 -0
- data/spec/generated/comparison_string_spec.rb +74 -0
- data/spec/generated/field_tag_spec.rb +156 -0
- data/spec/generated/index_char_spec.rb +669 -0
- data/spec/generated/index_indicator_spec.rb +174 -0
- data/spec/generated/index_spec.rb +113 -0
- data/spec/generated/index_sub_spec_spec.rb +1087 -0
- data/spec/generated/indicators_spec.rb +75 -0
- data/spec/generated/position_or_range_spec.rb +110 -0
- data/spec/generated/sub_spec_spec.rb +208 -0
- data/spec/generated/sub_spec_sub_spec_spec.rb +1829 -0
- data/spec/generated/subfield_char_spec.rb +405 -0
- data/spec/generated/subfield_range_range_spec.rb +48 -0
- data/spec/generated/subfield_range_spec.rb +87 -0
- data/spec/generated/subfield_range_sub_spec_spec.rb +214 -0
- data/spec/generated/subfield_tag_range_spec.rb +477 -0
- data/spec/generated/subfield_tag_sub_spec_spec.rb +3216 -0
- data/spec/generated/subfield_tag_tag_spec.rb +5592 -0
- data/spec/marc/spec/parsing/closed_int_range_spec.rb +49 -0
- data/spec/marc/spec/parsing/closed_lc_alpha_range_spec.rb +49 -0
- data/spec/marc/spec/parsing/parser_spec.rb +545 -0
- data/spec/marc/spec/queries/al_num_range_spec.rb +114 -0
- data/spec/marc/spec/queries/character_spec_spec.rb +28 -0
- data/spec/marc/spec/queries/comparison_string_spec.rb +28 -0
- data/spec/marc/spec/queries/indicator_value_spec.rb +28 -0
- data/spec/marc/spec/queries/query_spec.rb +200 -0
- data/spec/marc/spec/queries/subfield_spec.rb +92 -0
- data/spec/marc/spec/queries/subfield_value_spec.rb +31 -0
- data/spec/marc/spec/queries/tag_spec.rb +144 -0
- data/spec/marc/spec/queries/transform_spec.rb +459 -0
- data/spec/marc_spec_spec.rb +247 -0
- data/spec/scratch_spec.rb +112 -0
- data/spec/spec_helper.rb +23 -0
- metadata +341 -0
@@ -0,0 +1,174 @@
|
|
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 :char_indicator do
|
9
|
+
let(:parser) { Parser.new }
|
10
|
+
let(:reporter) { Parslet::ErrorReporter::Deepest.new }
|
11
|
+
|
12
|
+
describe 'marc_spec: valid field tag and charspec' do
|
13
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
14
|
+
|
15
|
+
describe 'last position' do
|
16
|
+
|
17
|
+
it '&& indicator 1 -> invalid' do
|
18
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
19
|
+
expect(parser.marc_spec).not_to parse('.../#^1', trace: true, reporter: reporter)
|
20
|
+
end
|
21
|
+
|
22
|
+
it '&& indicator 2 -> invalid' do
|
23
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
24
|
+
expect(parser.marc_spec).not_to parse('.../#^2', trace: true, reporter: reporter)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'first position' do
|
30
|
+
|
31
|
+
it '&& indicator 1 -> invalid' do
|
32
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
33
|
+
expect(parser.marc_spec).not_to parse('.../0^1', trace: true, reporter: reporter)
|
34
|
+
end
|
35
|
+
|
36
|
+
it '&& indicator 2 -> invalid' do
|
37
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
38
|
+
expect(parser.marc_spec).not_to parse('.../0^2', trace: true, reporter: reporter)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'position ten' do
|
44
|
+
|
45
|
+
it '&& indicator 1 -> invalid' do
|
46
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
47
|
+
expect(parser.marc_spec).not_to parse('.../9^1', trace: true, reporter: reporter)
|
48
|
+
end
|
49
|
+
|
50
|
+
it '&& indicator 2 -> invalid' do
|
51
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
52
|
+
expect(parser.marc_spec).not_to parse('.../9^2', trace: true, reporter: reporter)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'position eleven' do
|
58
|
+
|
59
|
+
it '&& indicator 1 -> invalid' do
|
60
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
61
|
+
expect(parser.marc_spec).not_to parse('.../10^1', trace: true, reporter: reporter)
|
62
|
+
end
|
63
|
+
|
64
|
+
it '&& indicator 2 -> invalid' do
|
65
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
66
|
+
expect(parser.marc_spec).not_to parse('.../10^2', trace: true, reporter: reporter)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'position 101' do
|
72
|
+
|
73
|
+
it '&& indicator 1 -> invalid' do
|
74
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
75
|
+
expect(parser.marc_spec).not_to parse('.../100^1', trace: true, reporter: reporter)
|
76
|
+
end
|
77
|
+
|
78
|
+
it '&& indicator 2 -> invalid' do
|
79
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
80
|
+
expect(parser.marc_spec).not_to parse('.../100^2', trace: true, reporter: reporter)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
describe 'range from first position to second' do
|
86
|
+
|
87
|
+
it '&& indicator 1 -> invalid' do
|
88
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
89
|
+
expect(parser.marc_spec).not_to parse('.../0-1^1', trace: true, reporter: reporter)
|
90
|
+
end
|
91
|
+
|
92
|
+
it '&& indicator 2 -> invalid' do
|
93
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
94
|
+
expect(parser.marc_spec).not_to parse('.../0-1^2', trace: true, reporter: reporter)
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'range from first position to last' do
|
100
|
+
|
101
|
+
it '&& indicator 1 -> invalid' do
|
102
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
103
|
+
expect(parser.marc_spec).not_to parse('.../0-#^1', trace: true, reporter: reporter)
|
104
|
+
end
|
105
|
+
|
106
|
+
it '&& indicator 2 -> invalid' do
|
107
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
108
|
+
expect(parser.marc_spec).not_to parse('.../0-#^2', trace: true, reporter: reporter)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
describe 'range from first position to first position, is like first position' do
|
114
|
+
|
115
|
+
it '&& indicator 1 -> invalid' do
|
116
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
117
|
+
expect(parser.marc_spec).not_to parse('.../0-0^1', trace: true, reporter: reporter)
|
118
|
+
end
|
119
|
+
|
120
|
+
it '&& indicator 2 -> invalid' do
|
121
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
122
|
+
expect(parser.marc_spec).not_to parse('.../0-0^2', trace: true, reporter: reporter)
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
describe 'range from last position to last position, is like last position' do
|
128
|
+
|
129
|
+
it '&& indicator 1 -> invalid' do
|
130
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
131
|
+
expect(parser.marc_spec).not_to parse('.../#-#^1', trace: true, reporter: reporter)
|
132
|
+
end
|
133
|
+
|
134
|
+
it '&& indicator 2 -> invalid' do
|
135
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
136
|
+
expect(parser.marc_spec).not_to parse('.../#-#^2', trace: true, reporter: reporter)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
describe 'range from last position to position one (index reverted), is like last position' do
|
142
|
+
|
143
|
+
it '&& indicator 1 -> invalid' do
|
144
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
145
|
+
expect(parser.marc_spec).not_to parse('.../#-0^1', trace: true, reporter: reporter)
|
146
|
+
end
|
147
|
+
|
148
|
+
it '&& indicator 2 -> invalid' do
|
149
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
150
|
+
expect(parser.marc_spec).not_to parse('.../#-0^2', trace: true, reporter: reporter)
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
describe 'range from last position to position two (index reverted)' do
|
156
|
+
|
157
|
+
it '&& indicator 1 -> invalid' do
|
158
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
159
|
+
expect(parser.marc_spec).not_to parse('.../#-1^1', trace: true, reporter: reporter)
|
160
|
+
end
|
161
|
+
|
162
|
+
it '&& indicator 2 -> invalid' do
|
163
|
+
# /invalid/wildCombination_invalidCharIndicator.json
|
164
|
+
expect(parser.marc_spec).not_to parse('.../#-1^2', trace: true, reporter: reporter)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,113 @@
|
|
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 :char do
|
9
|
+
let(:parser) { Parser.new }
|
10
|
+
let(:reporter) { Parslet::ErrorReporter::Deepest.new }
|
11
|
+
|
12
|
+
describe 'marc_spec: valid field tag and charspec' do
|
13
|
+
# /valid/wildCombination_validChar.json
|
14
|
+
it 'first position -> valid' do
|
15
|
+
# /valid/wildCombination_validChar.json
|
16
|
+
expect(parser.marc_spec).to parse('.../0', trace: true, reporter: reporter)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'last position -> valid' do
|
20
|
+
# /valid/wildCombination_validChar.json
|
21
|
+
expect(parser.marc_spec).to parse('.../#', trace: true, reporter: reporter)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'position 101 -> valid' do
|
25
|
+
# /valid/wildCombination_validChar.json
|
26
|
+
expect(parser.marc_spec).to parse('.../100', trace: true, reporter: reporter)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'position eleven -> valid' do
|
30
|
+
# /valid/wildCombination_validChar.json
|
31
|
+
expect(parser.marc_spec).to parse('.../10', trace: true, reporter: reporter)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'position ten -> valid' do
|
35
|
+
# /valid/wildCombination_validChar.json
|
36
|
+
expect(parser.marc_spec).to parse('.../9', trace: true, reporter: reporter)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'range from first position to first position, is like first position -> valid' do
|
40
|
+
# /valid/wildCombination_validChar.json
|
41
|
+
expect(parser.marc_spec).to parse('.../0-0', trace: true, reporter: reporter)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'range from first position to last -> valid' do
|
45
|
+
# /valid/wildCombination_validChar.json
|
46
|
+
expect(parser.marc_spec).to parse('.../0-#', trace: true, reporter: reporter)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'range from first position to second -> valid' do
|
50
|
+
# /valid/wildCombination_validChar.json
|
51
|
+
expect(parser.marc_spec).to parse('.../0-1', trace: true, reporter: reporter)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'range from last position to last position, is like last position -> valid' do
|
55
|
+
# /valid/wildCombination_validChar.json
|
56
|
+
expect(parser.marc_spec).to parse('.../#-#', trace: true, reporter: reporter)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'range from last position to position one (index reverted), is like last position -> valid' do
|
60
|
+
# /valid/wildCombination_validChar.json
|
61
|
+
expect(parser.marc_spec).to parse('.../#-0', trace: true, reporter: reporter)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'range from last position to position two (index reverted) -> valid' do
|
65
|
+
# /valid/wildCombination_validChar.json
|
66
|
+
expect(parser.marc_spec).to parse('.../#-1', trace: true, reporter: reporter)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
describe 'marc_spec: valid field tag and invalid charspec' do
|
71
|
+
# /invalid/wildCombination_invalidChar.json
|
72
|
+
it 'empty string -> invalid' do
|
73
|
+
# /invalid/wildCombination_invalidChar.json
|
74
|
+
expect(parser.marc_spec).not_to parse('.../', trace: true, reporter: reporter)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'missing ending position -> invalid' do
|
78
|
+
# /invalid/wildCombination_invalidChar.json
|
79
|
+
expect(parser.marc_spec).not_to parse('.../#-', trace: true, reporter: reporter)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'missing starting position -> invalid' do
|
83
|
+
# /invalid/wildCombination_invalidChar.json
|
84
|
+
expect(parser.marc_spec).not_to parse('.../-2', trace: true, reporter: reporter)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "only digits, one hyphen and the char '#' are allowed -> invalid" do
|
88
|
+
# /invalid/wildCombination_invalidChar.json
|
89
|
+
expect(parser.marc_spec).not_to parse('.../1-X', trace: true, reporter: reporter)
|
90
|
+
expect(parser.marc_spec).not_to parse('.../?', trace: true, reporter: reporter)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'only one hyphen allwed -> invalid' do
|
94
|
+
# /invalid/wildCombination_invalidChar.json
|
95
|
+
expect(parser.marc_spec).not_to parse('.../1-2-', trace: true, reporter: reporter)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'this matches pattern, but starting position number must not be higher than ending position number -> invalid' do
|
99
|
+
# /invalid/wildCombination_invalidChar.json
|
100
|
+
expect(parser.marc_spec).not_to parse('.../2-1', trace: true, reporter: reporter)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'whitespace is not allowed -> invalid' do
|
104
|
+
# /invalid/wildCombination_invalidChar.json
|
105
|
+
expect(parser.marc_spec).not_to parse('.../1- 2', trace: true, reporter: reporter)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,74 @@
|
|
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 :comparison_string do
|
9
|
+
let(:parser) { Parser.new }
|
10
|
+
let(:reporter) { Parslet::ErrorReporter::Deepest.new }
|
11
|
+
|
12
|
+
describe 'comparison strings are strings and match pattern' do
|
13
|
+
# /invalid/invalidComparisonString.json
|
14
|
+
it 'subfield with single digit subfieldtag -> valid' do
|
15
|
+
# /valid/validComparisonString.json
|
16
|
+
expect(parser.comparison_string).to parse('te\\}st', trace: true, reporter: reporter)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'subfield with single lowercase alpha subfieldtag -> valid' do
|
20
|
+
# /valid/validComparisonString.json
|
21
|
+
expect(parser.comparison_string).to parse('test\\$', trace: true, reporter: reporter)
|
22
|
+
expect(parser.comparison_string).to parse('test\\{', trace: true, reporter: reporter)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'subfieldrange with lowercase subfieldtags -> valid' do
|
26
|
+
# /valid/validComparisonString.json
|
27
|
+
expect(parser.comparison_string).to parse('test\\!', trace: true, reporter: reporter)
|
28
|
+
expect(parser.comparison_string).to parse('\\=test', trace: true, reporter: reporter)
|
29
|
+
expect(parser.comparison_string).to parse('test\\~', trace: true, reporter: reporter)
|
30
|
+
expect(parser.comparison_string).to parse('test\\?', trace: true, reporter: reporter)
|
31
|
+
expect(parser.comparison_string).to parse('tes\\st\\|', trace: true, reporter: reporter)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "unescaped character '$' -> invalid" do
|
35
|
+
# /invalid/invalidComparisonString.json
|
36
|
+
expect(parser.comparison_string).not_to parse('test$', trace: true, reporter: reporter)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "unescaped character '=' at beginning is valid -> valid" do
|
40
|
+
# /valid/validComparisonString.json
|
41
|
+
expect(parser.comparison_string).to parse('=test', trace: true, reporter: reporter)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "unescaped character '?' -> invalid" do
|
45
|
+
# /invalid/invalidComparisonString.json
|
46
|
+
expect(parser.comparison_string).not_to parse('test?', trace: true, reporter: reporter)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "unescaped character '{' -> invalid" do
|
50
|
+
# /invalid/invalidComparisonString.json
|
51
|
+
expect(parser.comparison_string).not_to parse('test{', trace: true, reporter: reporter)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "unescaped character '}' -> invalid" do
|
55
|
+
# /invalid/invalidComparisonString.json
|
56
|
+
expect(parser.comparison_string).not_to parse('te}st', trace: true, reporter: reporter)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "unescaped character '~' -> invalid" do
|
60
|
+
# /invalid/invalidComparisonString.json
|
61
|
+
expect(parser.comparison_string).not_to parse('test~', trace: true, reporter: reporter)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'whitespaces are not allowed -> invalid' do
|
65
|
+
# /invalid/invalidComparisonString.json
|
66
|
+
expect(parser.comparison_string).not_to parse('te st\\?', trace: true, reporter: reporter)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,156 @@
|
|
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 :field_tag do
|
9
|
+
let(:parser) { Parser.new }
|
10
|
+
let(:reporter) { Parslet::ErrorReporter::Deepest.new }
|
11
|
+
|
12
|
+
describe 'field tags are strings and match pattern' do
|
13
|
+
# /invalid/invalidFieldTag.json
|
14
|
+
it 'all digits -> valid' do
|
15
|
+
# /valid/validFieldTag.json
|
16
|
+
expect(parser.field_tag).to parse('300', trace: true, reporter: reporter)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'all lowercase chars -> valid' do
|
20
|
+
# /valid/validFieldTag.json
|
21
|
+
expect(parser.field_tag).to parse('abc', trace: true, reporter: reporter)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'all uppercase chars -> valid' do
|
25
|
+
# /valid/validFieldTag.json
|
26
|
+
expect(parser.field_tag).to parse('ABC', trace: true, reporter: reporter)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'all uppercase chars special leader -> valid' do
|
30
|
+
# /valid/validFieldTag.json
|
31
|
+
expect(parser.field_tag).to parse('LDR', trace: true, reporter: reporter)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'all wildcards -> valid' do
|
35
|
+
# /valid/validFieldTag.json
|
36
|
+
expect(parser.field_tag).to parse('...', trace: true, reporter: reporter)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'invalid char # -> invalid' do
|
40
|
+
# /invalid/invalidFieldTag.json
|
41
|
+
expect(parser.field_tag).not_to parse('24#', trace: true, reporter: reporter)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'invalid char ? -> invalid' do
|
45
|
+
# /invalid/invalidFieldTag.json
|
46
|
+
expect(parser.field_tag).not_to parse('?00', trace: true, reporter: reporter)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'invalid whitespace -> invalid' do
|
50
|
+
# /invalid/invalidFieldTag.json
|
51
|
+
expect(parser.field_tag).not_to parse('24 ', trace: true, reporter: reporter)
|
52
|
+
expect(parser.field_tag).not_to parse('2 5', trace: true, reporter: reporter)
|
53
|
+
expect(parser.field_tag).not_to parse(' 45', trace: true, reporter: reporter)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'mix of digit, lowercase and uppercase chars -> invalid' do
|
57
|
+
# /invalid/invalidFieldTag.json
|
58
|
+
expect(parser.field_tag).not_to parse('a0C', trace: true, reporter: reporter)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'mix of lowercase and uppercase chars -> invalid' do
|
62
|
+
# /invalid/invalidFieldTag.json
|
63
|
+
expect(parser.field_tag).not_to parse('abC', trace: true, reporter: reporter)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'mix of wildcard, lowercase and uppercase chars -> invalid' do
|
67
|
+
# /invalid/invalidFieldTag.json
|
68
|
+
expect(parser.field_tag).not_to parse('a.C', trace: true, reporter: reporter)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'mix one lowercase char and two digits -> valid' do
|
72
|
+
# /valid/validFieldTag.json
|
73
|
+
expect(parser.field_tag).to parse('a00', trace: true, reporter: reporter)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'mix two lowercase chars and one digit -> valid' do
|
77
|
+
# /valid/validFieldTag.json
|
78
|
+
expect(parser.field_tag).to parse('aa0', trace: true, reporter: reporter)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'one digit two wildcards right -> valid' do
|
82
|
+
# /valid/validFieldTag.json
|
83
|
+
expect(parser.field_tag).to parse('2..', trace: true, reporter: reporter)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'one lowercase and two wildcards right -> valid' do
|
87
|
+
# /valid/validFieldTag.json
|
88
|
+
expect(parser.field_tag).to parse('a..', trace: true, reporter: reporter)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'one uppercase char two wildcards right -> valid' do
|
92
|
+
# /valid/validFieldTag.json
|
93
|
+
expect(parser.field_tag).to parse('A..', trace: true, reporter: reporter)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'one wildcard between uppercase chars -> valid' do
|
97
|
+
# /valid/validFieldTag.json
|
98
|
+
expect(parser.field_tag).to parse('A.C', trace: true, reporter: reporter)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'one wildcard left and two lowercase chars -> valid' do
|
102
|
+
# /valid/validFieldTag.json
|
103
|
+
expect(parser.field_tag).to parse('.bc', trace: true, reporter: reporter)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'one wildcard left two uppercase chars -> valid' do
|
107
|
+
# /valid/validFieldTag.json
|
108
|
+
expect(parser.field_tag).to parse('.BC', trace: true, reporter: reporter)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'one wildcard left with two digits -> valid' do
|
112
|
+
# /valid/validFieldTag.json
|
113
|
+
expect(parser.field_tag).to parse('.00', trace: true, reporter: reporter)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'too many chars -> invalid' do
|
117
|
+
# /invalid/invalidFieldTag.json
|
118
|
+
expect(parser.field_tag).not_to parse('ABCD', trace: true, reporter: reporter)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'too many wildcards -> invalid' do
|
122
|
+
# /invalid/invalidFieldTag.json
|
123
|
+
expect(parser.field_tag).not_to parse('....', trace: true, reporter: reporter)
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'two digits wildcard right -> valid' do
|
127
|
+
# /valid/validFieldTag.json
|
128
|
+
expect(parser.field_tag).to parse('20.', trace: true, reporter: reporter)
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'two wildcards and one lowercase char right -> valid' do
|
132
|
+
# /valid/validFieldTag.json
|
133
|
+
expect(parser.field_tag).to parse('..c', trace: true, reporter: reporter)
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'two wildcards left one uppercase char -> valid' do
|
137
|
+
# /valid/validFieldTag.json
|
138
|
+
expect(parser.field_tag).to parse('..C', trace: true, reporter: reporter)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'two wildcards left with digit -> valid' do
|
142
|
+
# /valid/validFieldTag.json
|
143
|
+
expect(parser.field_tag).to parse('..0', trace: true, reporter: reporter)
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'wildcard between digits -> valid' do
|
147
|
+
# /valid/validFieldTag.json
|
148
|
+
expect(parser.field_tag).to parse('1.0', trace: true, reporter: reporter)
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|