scripref 0.15.0 → 1.0.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 +4 -4
- data/.aspell.pws +3 -1
- data/Changelog +6 -0
- data/lib/scripref.rb +5 -2
- data/lib/scripref/basic_methods.rb +3 -1
- data/lib/scripref/bookname.rb +6 -4
- data/lib/scripref/bookorder.rb +20 -0
- data/lib/scripref/const_reader.rb +2 -1
- data/lib/scripref/english.rb +10 -6
- data/lib/scripref/formatter.rb +5 -4
- data/lib/scripref/german.rb +10 -6
- data/lib/scripref/include.rb +3 -1
- data/lib/scripref/parser.rb +17 -15
- data/lib/scripref/passage.rb +39 -45
- data/lib/scripref/pipelining.rb +2 -1
- data/lib/scripref/processor.rb +3 -2
- data/scripref.gemspec +3 -3
- data/test/test_bookname.rb +4 -2
- data/test/test_english.rb +16 -14
- data/test/test_formatter.rb +54 -52
- data/test/test_german.rb +12 -10
- data/test/test_helper.rb +3 -1
- data/test/test_integration.rb +3 -1
- data/test/test_parser.rb +66 -64
- data/test/test_passage.rb +7 -18
- data/test/test_pipelining.rb +3 -1
- data/test/test_processor.rb +20 -18
- metadata +2 -1
data/test/test_bookname.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class TestBookname < Test::Unit::TestCase
|
@@ -6,7 +8,7 @@ class TestBookname < Test::Unit::TestCase
|
|
6
8
|
include Scripref
|
7
9
|
|
8
10
|
def setup
|
9
|
-
@zef = Bookname.new(%w(Zefanja Zephanja), %w(Zef Zefan Zeph Zephan))
|
11
|
+
@zef = Bookname.new(osis_id: :Zeph, names: %w(Zefanja Zephanja), abbrevs: %w(Zef Zefan Zeph Zephan))
|
10
12
|
end
|
11
13
|
|
12
14
|
def test_name
|
data/test/test_english.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class TestEnglish < Test::Unit::TestCase
|
@@ -30,21 +32,21 @@ class TestEnglish < Test::Unit::TestCase
|
|
30
32
|
assert_match book_re, 'Rev'
|
31
33
|
end
|
32
34
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
def test_book2osis_id
|
36
|
+
assert_osis_book_id :Gen, 'Genesis'
|
37
|
+
assert_osis_book_id :Matt, 'Matthew'
|
38
|
+
assert_osis_book_id :Rev, 'Revelation'
|
39
|
+
assert_osis_book_id :Gen, 'Gen'
|
40
|
+
assert_osis_book_id :Gen, 'Ge'
|
41
|
+
assert_osis_book_id :'2Tim', '2 Tim'
|
42
|
+
assert_osis_book_id :'2Tim', '2Tim'
|
43
|
+
assert_osis_book_id :'2Tim', '2Tm'
|
44
|
+
assert_osis_book_id :Matt, 'Mat'
|
45
|
+
assert_osis_book_id :Rev, 'Rev'
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
47
|
-
assert_equal
|
48
|
+
def assert_osis_book_id id, str
|
49
|
+
assert_equal id, @parser.parse(str).first.b1
|
48
50
|
end
|
49
51
|
|
50
52
|
end
|
data/test/test_formatter.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class TestFormatter < Test::Unit::TestCase
|
@@ -13,105 +15,105 @@ class TestFormatter < Test::Unit::TestCase
|
|
13
15
|
|
14
16
|
def test_only_book
|
15
17
|
text = 'Ruth'
|
16
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
18
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, b2: :Ruth)]
|
17
19
|
end
|
18
20
|
|
19
21
|
def test_book_and_chapter
|
20
22
|
text = 'Ruth 2'
|
21
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
23
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2)]
|
22
24
|
end
|
23
25
|
|
24
26
|
def test_book_chapter_and_verse
|
25
27
|
text = 'Ruth 2,5'
|
26
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
28
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5)]
|
27
29
|
end
|
28
30
|
|
29
31
|
def test_verse_range
|
30
32
|
text = 'Ruth 2,5-11'
|
31
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
33
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 11)]
|
32
34
|
end
|
33
35
|
|
34
36
|
def test_chapter_verse_range
|
35
37
|
text = 'Ruth 2,5-3,7'
|
36
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
38
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 3, v2: 7)]
|
37
39
|
end
|
38
40
|
|
39
41
|
def test_chapter_range
|
40
42
|
text = 'Ruth 2-3'
|
41
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
43
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, b2: :Ruth, c2: 3)]
|
42
44
|
end
|
43
45
|
|
44
46
|
def test_book_range
|
45
47
|
text = '1. Mose-Offenbarung'
|
46
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
48
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Gen, b2: :Rev)]
|
47
49
|
end
|
48
50
|
|
49
51
|
def test_book_chapter_range
|
50
52
|
text = '1. Mose 1-Offenbarung 22'
|
51
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
53
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Gen, c1: 1, b2: :Rev, c2: 22)]
|
52
54
|
end
|
53
55
|
|
54
56
|
def test_book_chapter_verse_range
|
55
57
|
text = '1. Mose 1,1-Offenbarung 22,21'
|
56
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
58
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Gen, c1: 1, v1: 1, b2: :Rev, c2: 22, v2: 21)]
|
57
59
|
end
|
58
60
|
|
59
61
|
def test_one_following_verse
|
60
62
|
text = 'Ruth 2,5f'
|
61
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
63
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: :f)]
|
62
64
|
end
|
63
65
|
|
64
66
|
def test_more_following_verse
|
65
67
|
text = 'Ruth 2,5ff'
|
66
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
68
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: :ff)]
|
67
69
|
end
|
68
70
|
|
69
71
|
def test_first_addon
|
70
72
|
text = 'Ruth 2,5a'
|
71
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
73
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5, a1: :a)]
|
72
74
|
end
|
73
75
|
|
74
76
|
def test_second_addon
|
75
77
|
text = 'Ruth 2,5-7a'
|
76
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
78
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 7, a2: :a)]
|
77
79
|
end
|
78
80
|
|
79
81
|
def test_both_addons
|
80
82
|
text = 'Ruth 2,5b-7a'
|
81
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
83
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 7, a1: :b, a2: :a)]
|
82
84
|
end
|
83
85
|
|
84
86
|
def test_reset_addons
|
85
87
|
text = 'Ruth'
|
86
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
88
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Ruth, b2: :Ruth)]
|
87
89
|
end
|
88
90
|
|
89
91
|
def test_book_with_only_one_chapter
|
90
92
|
text = 'Obadja 3'
|
91
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
93
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 3)]
|
92
94
|
text = 'Obadja 1'
|
93
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
95
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 1)]
|
94
96
|
end
|
95
97
|
|
96
98
|
def test_book_with_only_one_chapter_range
|
97
99
|
text = 'Obadja 3-5'
|
98
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
100
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 5)]
|
99
101
|
text = 'Obadja 1-4'
|
100
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
102
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 4)]
|
101
103
|
end
|
102
104
|
|
103
105
|
def test_book_with_only_one_chapter_at_begin_of_range
|
104
106
|
text = 'Obadja-Jona'
|
105
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
107
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, b2: :Jonah)]
|
106
108
|
text = 'Obadja 3-Jona 2,4'
|
107
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
109
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Jonah, c2: 2, v2: 4)]
|
108
110
|
end
|
109
111
|
|
110
112
|
def test_book_with_only_one_chapter_at_end_of_range
|
111
113
|
text = 'Amos 2,4-Obadja 3'
|
112
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
114
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 3)]
|
113
115
|
text = 'Amos 2,4-Obadja 1'
|
114
|
-
assert_formated_text_for_ast text, [pass(text: text, b1:
|
116
|
+
assert_formated_text_for_ast text, [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 1)]
|
115
117
|
end
|
116
118
|
|
117
119
|
######################################################################
|
@@ -121,49 +123,49 @@ class TestFormatter < Test::Unit::TestCase
|
|
121
123
|
def test_two_books
|
122
124
|
text = 'Ruth; Markus'
|
123
125
|
t1, t2 = text.split(semi)
|
124
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
126
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, b2: :Ruth), semi, pass(text: t2, b1: :Mark, b2: :Mark)]
|
125
127
|
end
|
126
128
|
|
127
129
|
def test_two_complete_refs
|
128
130
|
text = 'Ruth 2,1; Markus 4,8'
|
129
131
|
t1, t2 = text.split(semi)
|
130
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
132
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), semi, pass(text: t2, b1: :Mark, c1: 4, v1: 8, b2: :Mark, c2: 4, v2: 8)]
|
131
133
|
end
|
132
134
|
|
133
135
|
def test_two_refs_same_book
|
134
136
|
text = 'Ruth 2,1; 5,4'
|
135
137
|
t1, t2 = text.split(semi)
|
136
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
138
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), semi, pass(text: t2, b1: :Ruth, c1: 5, v1: 4, b2: :Ruth, c2: 5, v2: 4)]
|
137
139
|
end
|
138
140
|
|
139
141
|
def test_two_chapters_same_book
|
140
142
|
text = 'Ruth 2; 5'
|
141
143
|
t1, t2 = text.split(semi)
|
142
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
144
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Ruth, c1: 5, b2: :Ruth, c2: 5)]
|
143
145
|
end
|
144
146
|
|
145
147
|
def test_two_chapters_different_book
|
146
148
|
text = 'Ruth 2; Markus 4'
|
147
149
|
t1, t2 = text.split(semi)
|
148
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
150
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Mark, c1: 4, b2: :Mark, c2: 4)]
|
149
151
|
end
|
150
152
|
|
151
153
|
def test_two_verses
|
152
154
|
text = 'Ruth 2,5.11'
|
153
155
|
t1, t2 = text.split(dot)
|
154
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
156
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 11, b2: :Ruth, c2: 2, v2: 11)]
|
155
157
|
end
|
156
158
|
|
157
159
|
def test_partial_passage_after_full_passage
|
158
160
|
text = 'Ruth 2,5; 4'
|
159
161
|
t1, t2 = text.split(semi)
|
160
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
162
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Ruth, c1: 4, b2: :Ruth, c2: 4)]
|
161
163
|
text = 'Ruth 2,5; Markus'
|
162
164
|
t1, t2 = text.split(semi)
|
163
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
165
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Mark, b2: :Mark)]
|
164
166
|
text = 'Ruth 2,5; Markus 4'
|
165
167
|
t1, t2 = text.split(semi)
|
166
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
168
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Mark, c1: 4, b2: :Mark, c2: 4)]
|
167
169
|
end
|
168
170
|
|
169
171
|
######################################################################
|
@@ -173,61 +175,61 @@ class TestFormatter < Test::Unit::TestCase
|
|
173
175
|
def test_verse_range_and_separated_verse
|
174
176
|
text = 'Ruth 2,1-3.11'
|
175
177
|
t1, t2 = text.split(dot)
|
176
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
178
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 3), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 11, b2: :Ruth, c2: 2, v2: 11)]
|
177
179
|
end
|
178
180
|
|
179
181
|
def test_separate_verse_and_verse_range
|
180
182
|
text = 'Ruth 2,1.3-11'
|
181
183
|
t1, t2 = text.split(dot)
|
182
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
184
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 3, b2: :Ruth, c2: 2, v2: 11)]
|
183
185
|
end
|
184
186
|
|
185
187
|
def test_two_verse_ranges
|
186
188
|
text = 'Ruth 2,1-3.7-11'
|
187
189
|
t1, t2 = text.split(dot)
|
188
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
190
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 3), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 7, b2: :Ruth, c2: 2, v2: 11)]
|
189
191
|
end
|
190
192
|
|
191
193
|
def test_two_verse_range_different_books
|
192
194
|
text = 'Ruth 2,1-11; Markus 4,3-7'
|
193
195
|
t1, t2 = text.split(semi)
|
194
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
196
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), semi, pass(text: t2, b1: :Mark, c1: 4, v1: 3, b2: :Mark, c2: 4, v2: 7)]
|
195
197
|
end
|
196
198
|
|
197
199
|
def test_two_verse_range_different_chapters
|
198
200
|
text = 'Ruth 2,1-11; 3,10-19'
|
199
201
|
t1, t2 = text.split(semi)
|
200
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
202
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), semi, pass(text: t2, b1: :Ruth, c1: 3, v1: 10, b2: :Ruth, c2: 3, v2: 19)]
|
201
203
|
end
|
202
204
|
|
203
205
|
def test_book_range_and_following_book
|
204
206
|
text = 'Ruth-Markus; Johannes'
|
205
207
|
t1, t2 = text.split(semi)
|
206
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
208
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, b2: :Mark), semi, pass(text: t2, b1: :John, b2: :John)]
|
207
209
|
end
|
208
210
|
|
209
211
|
def test_chapter_range_and_following_book
|
210
212
|
text = 'Ruth 1-2; Johannes 4'
|
211
213
|
t1, t2 = text.split(semi)
|
212
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
214
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 1, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :John, c1: 4, b2: :John, c2: 4)]
|
213
215
|
end
|
214
216
|
|
215
217
|
def test_chapter_range_and_following_chapter
|
216
218
|
text = 'Ruth 1-2; 4'
|
217
219
|
t1, t2 = text.split(semi)
|
218
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
220
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Ruth, c1: 1, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Ruth, c1: 4, b2: :Ruth, c2: 4)]
|
219
221
|
end
|
220
222
|
|
221
223
|
def test_book_only_after_full_passage
|
222
224
|
text = 'Matthäus 3,4; Markus; Johannes 3,16'
|
223
225
|
t1, t2, t3 = text.split(semi)
|
224
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
226
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Matt, c1: 3, v1: 4, b2: :Matt, c2: 3, v2: 4), semi, pass(text: t2, b1: :Mark, b2: :Mark), semi, pass(text: t3, b1: :John, c1: 3, v1: 16, b2: :John, c2: 3, v2: 16)]
|
225
227
|
end
|
226
228
|
|
227
229
|
def test_chapter_only_after_full_passage
|
228
230
|
text = 'Matthäus 3,4; 8; Johannes 3,16'
|
229
231
|
t1, t2, t3 = text.split(semi)
|
230
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
232
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Matt, c1: 3, v1: 4, b2: :Matt, c2: 3, v2: 4), semi, pass(text: t2, b1: :Matt, c1: 8, b2: :Matt, c2: 8), semi, pass(text: t3, b1: :John, c1: 3, v1: 16, b2: :John, c2: 3, v2: 16)]
|
231
233
|
end
|
232
234
|
|
233
235
|
######################################################################
|
@@ -238,13 +240,13 @@ class TestFormatter < Test::Unit::TestCase
|
|
238
240
|
text = 'Ruth 2,1-11.15; 3,7.9-12; Markus 4; 5,3.18-21'
|
239
241
|
t1, t2, t3, t4, t5, t6, t7 = text.split(/; |\./)
|
240
242
|
ast = [
|
241
|
-
pass(text: t1, b1:
|
242
|
-
pass(text: t2, b1:
|
243
|
-
pass(text: t3, b1:
|
244
|
-
pass(text: t4, b1:
|
245
|
-
pass(text: t5, b1:
|
246
|
-
pass(text: t6, b1:
|
247
|
-
pass(text: t7, b1:
|
243
|
+
pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), dot,
|
244
|
+
pass(text: t2, b1: :Ruth, c1: 2, v1: 15, b2: :Ruth, c2: 2, v2: 15), semi,
|
245
|
+
pass(text: t3, b1: :Ruth, c1: 3, v1: 7, b2: :Ruth, c2: 3, v2: 7), dot,
|
246
|
+
pass(text: t4, b1: :Ruth, c1: 3, v1: 9, b2: :Ruth, c2: 3, v2: 12), semi,
|
247
|
+
pass(text: t5, b1: :Mark, c1: 4, b2: :Mark, c2: 4), semi,
|
248
|
+
pass(text: t6, b1: :Mark, c1: 5, v1: 3, b2: :Mark, c2: 5, v2: 3), dot,
|
249
|
+
pass(text: t7, b1: :Mark, c1: 5, v1: 18, b2: :Mark, c2: 5, v2: 21)
|
248
250
|
]
|
249
251
|
assert_formated_text_for_ast text, ast
|
250
252
|
end
|
@@ -257,13 +259,13 @@ class TestFormatter < Test::Unit::TestCase
|
|
257
259
|
@german_formatter.bookformat = :abbrev
|
258
260
|
text = 'Mat 3,4; Mar; Joh 3,16'
|
259
261
|
t1, t2, t3 = text.split(semi)
|
260
|
-
assert_formated_text_for_ast text, [pass(text: t1, b1:
|
262
|
+
assert_formated_text_for_ast text, [pass(text: t1, b1: :Matt, c1: 3, v1: 4, b2: :Matt, c2: 3, v2: 4), semi, pass(text: t2, b1: :Mark, b2: :Mark), semi, pass(text: t3, b1: :John, c1: 3, v1: 16, b2: :John, c2: 3, v2: 16)]
|
261
263
|
end
|
262
264
|
|
263
265
|
def test_exception_for_unhandled_bookformat
|
264
266
|
assert_raise NoMethodError do
|
265
267
|
@german_formatter.bookformat = :unknown
|
266
|
-
@german_formatter.format [pass(text: 1, b1:
|
268
|
+
@german_formatter.format [pass(text: 1, b1: :Exod, c1: 3, v1: 4, b2: :Deut, c2: 6, v2: 7)]
|
267
269
|
end
|
268
270
|
end
|
269
271
|
private
|
data/test/test_german.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class TestGerman < Test::Unit::TestCase
|
@@ -31,15 +33,15 @@ class TestGerman < Test::Unit::TestCase
|
|
31
33
|
end
|
32
34
|
|
33
35
|
def test_book2num
|
34
|
-
assert_book_num
|
35
|
-
assert_book_num
|
36
|
-
assert_book_num
|
37
|
-
assert_book_num
|
38
|
-
assert_book_num
|
39
|
-
assert_book_num
|
40
|
-
assert_book_num
|
41
|
-
assert_book_num
|
42
|
-
assert_book_num
|
36
|
+
assert_book_num :Gen, '1. Mose'
|
37
|
+
assert_book_num :Matt, 'Matthäus'
|
38
|
+
assert_book_num :Rev, 'Offenbarung'
|
39
|
+
assert_book_num :Gen, '1. Mo'
|
40
|
+
assert_book_num :Gen, '1.Mo'
|
41
|
+
assert_book_num :Gen, '1M'
|
42
|
+
assert_book_num :Matt, 'Mat'
|
43
|
+
assert_book_num :Phil, 'Phil'
|
44
|
+
assert_book_num :Rev, 'Off'
|
43
45
|
end
|
44
46
|
|
45
47
|
def assert_book_num num, str
|
data/test/test_helper.rb
CHANGED
data/test/test_integration.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class TestParser < Test::Unit::TestCase
|
@@ -12,21 +14,21 @@ class TestParser < Test::Unit::TestCase
|
|
12
14
|
|
13
15
|
def test_only_book
|
14
16
|
text = 'Ruth'
|
15
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
17
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, b2: :Ruth)], text
|
16
18
|
end
|
17
19
|
|
18
20
|
def test_book_abbrev
|
19
21
|
text = 'Ru'
|
20
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
22
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, b2: :Ruth)], text
|
21
23
|
text = 'Offb'
|
22
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
24
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Rev, b2: :Rev)], text
|
23
25
|
end
|
24
26
|
|
25
27
|
def test_book_abbrev_with_period
|
26
28
|
text = 'Ru.'
|
27
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
29
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, b2: :Ruth)], text
|
28
30
|
text = 'Offb.'
|
29
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
31
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Rev, b2: :Rev)], text
|
30
32
|
end
|
31
33
|
|
32
34
|
def test_ambiguous_book
|
@@ -38,115 +40,115 @@ class TestParser < Test::Unit::TestCase
|
|
38
40
|
|
39
41
|
def test_book_and_chapter
|
40
42
|
text = 'Ruth 2'
|
41
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
43
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2)], text
|
42
44
|
end
|
43
45
|
|
44
46
|
def test_book_chapter_and_verse
|
45
47
|
text = 'Ruth 2,5'
|
46
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
48
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5)], text
|
47
49
|
end
|
48
50
|
|
49
51
|
def test_verse_range
|
50
52
|
text = 'Ruth 2,5-11'
|
51
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
53
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 11)], text
|
52
54
|
end
|
53
55
|
|
54
56
|
def test_chapter_verse_range
|
55
57
|
text = 'Ruth 2,5-3,7'
|
56
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
58
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 3, v2: 7)], text
|
57
59
|
end
|
58
60
|
|
59
61
|
def test_chapter_range
|
60
62
|
text = 'Ruth 2-3'
|
61
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
63
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, b2: :Ruth, c2: 3)], text
|
62
64
|
end
|
63
65
|
|
64
66
|
def test_book_range
|
65
67
|
text = '1. Mose - Offenbarung'
|
66
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
68
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Gen, b2: :Rev)], text
|
67
69
|
end
|
68
70
|
|
69
71
|
def test_book_chapter_range
|
70
72
|
text = '1. Mose 1 - Offenbarung 22'
|
71
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
73
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Gen, c1: 1, b2: :Rev, c2: 22)], text
|
72
74
|
end
|
73
75
|
|
74
76
|
def test_book_chapter_verse_range
|
75
77
|
text = '1. Mose 1,1-Offenbarung 22,21'
|
76
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
78
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Gen, c1: 1, v1: 1, b2: :Rev, c2: 22, v2: 21)], text
|
77
79
|
end
|
78
80
|
|
79
81
|
def test_one_following_verse
|
80
82
|
text = 'Ruth 2,5f'
|
81
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
83
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: :f)], text
|
82
84
|
end
|
83
85
|
|
84
86
|
def test_more_following_verse
|
85
87
|
text = 'Ruth 2,5ff'
|
86
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
88
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: :ff)], text
|
87
89
|
end
|
88
90
|
|
89
91
|
def test_first_addon
|
90
92
|
text = 'Ruth 2,5a'
|
91
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
93
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5, a1: :a)], text
|
92
94
|
end
|
93
95
|
|
94
96
|
def test_second_addon
|
95
97
|
text = 'Ruth 2,5-7a'
|
96
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
98
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 7, a2: :a)], text
|
97
99
|
end
|
98
100
|
|
99
101
|
def test_both_addons
|
100
102
|
text = 'Ruth 2,5b-7a'
|
101
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
103
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 7, a1: :b, a2: :a)], text
|
102
104
|
end
|
103
105
|
|
104
106
|
def test_reset_addons
|
105
107
|
@parser.parse 'Ruth 2,5b-7a'
|
106
108
|
text = 'Ruth'
|
107
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
109
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ruth, b2: :Ruth)], text
|
108
110
|
end
|
109
111
|
|
110
112
|
def test_book_with_only_one_chapter
|
111
113
|
text = 'Obad 3'
|
112
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
114
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 3)], text
|
113
115
|
text = 'Obad 1,3'
|
114
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
116
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 3)], text
|
115
117
|
text = 'Obad 1'
|
116
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
118
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 1)], text
|
117
119
|
text = 'Obad 1,1'
|
118
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
120
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 1)], text
|
119
121
|
end
|
120
122
|
|
121
123
|
def test_book_with_only_one_chapter_range
|
122
124
|
text = 'Obad 3-5'
|
123
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
125
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 5)], text
|
124
126
|
text = 'Obad 1,3-5'
|
125
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
127
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Obad, c2: 1, v2: 5)], text
|
126
128
|
text = 'Obad 1-4'
|
127
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
129
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 4)], text
|
128
130
|
text = 'Obad 1,1-4'
|
129
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
131
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 1, b2: :Obad, c2: 1, v2: 4)], text
|
130
132
|
end
|
131
133
|
|
132
134
|
def test_book_with_only_one_chapter_at_begin_of_range
|
133
135
|
text = 'Obad - Jona'
|
134
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
136
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, b2: :Jonah)], text
|
135
137
|
text = 'Obad 3 - Jona 2,4'
|
136
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
138
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Jonah, c2: 2, v2: 4)], text
|
137
139
|
text = 'Obad 1,3 - Jona 2,4'
|
138
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
140
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Obad, c1: 1, v1: 3, b2: :Jonah, c2: 2, v2: 4)], text
|
139
141
|
end
|
140
142
|
|
141
143
|
def test_book_with_only_one_chapter_at_end_of_range
|
142
144
|
text = 'Amos 2,4 - Obad 3'
|
143
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
145
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 3)], text
|
144
146
|
text = 'Amos 2,4 - Obad 1,3'
|
145
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
147
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 3)], text
|
146
148
|
text = 'Amos 2,4 - Obad 1'
|
147
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
149
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 1)], text
|
148
150
|
text = 'Amos 2,4 - Obad 1,1'
|
149
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
151
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Amos, c1: 2, v1: 4, b2: :Obad, c2: 1, v2: 1)], text
|
150
152
|
end
|
151
153
|
|
152
154
|
######################################################################
|
@@ -156,49 +158,49 @@ class TestParser < Test::Unit::TestCase
|
|
156
158
|
def test_two_books
|
157
159
|
text = 'Ruth; Markus'
|
158
160
|
t1, t2 = text.split(semi)
|
159
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
161
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, b2: :Ruth), semi, pass(text: t2, b1: :Mark, b2: :Mark)], text
|
160
162
|
end
|
161
163
|
|
162
164
|
def test_two_complete_refs
|
163
165
|
text = 'Ruth 2,1; Markus 4,8'
|
164
166
|
t1, t2 = text.split(semi)
|
165
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
167
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), semi, pass(text: t2, b1: :Mark, c1: 4, v1: 8, b2: :Mark, c2: 4, v2: 8)], text
|
166
168
|
end
|
167
169
|
|
168
170
|
def test_two_refs_same_book
|
169
171
|
text = 'Ruth 2,1; 5,4'
|
170
172
|
t1, t2 = text.split(semi)
|
171
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
173
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), semi, pass(text: t2, b1: :Ruth, c1: 5, v1: 4, b2: :Ruth, c2: 5, v2: 4)], text
|
172
174
|
end
|
173
175
|
|
174
176
|
def test_two_chapters_same_book
|
175
177
|
text = 'Ruth 2; 5'
|
176
178
|
t1, t2 = text.split(semi)
|
177
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
179
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Ruth, c1: 5, b2: :Ruth, c2: 5)], text
|
178
180
|
end
|
179
181
|
|
180
182
|
def test_two_chapters_different_book
|
181
183
|
text = 'Ruth 2; Markus 4'
|
182
184
|
t1, t2 = text.split(semi)
|
183
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
185
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Mark, c1: 4, b2: :Mark, c2: 4)], text
|
184
186
|
end
|
185
187
|
|
186
188
|
def test_two_verses
|
187
189
|
text = 'Ruth 2,5.11'
|
188
190
|
t1, t2 = text.split(dot)
|
189
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
191
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 11, b2: :Ruth, c2: 2, v2: 11)], text
|
190
192
|
end
|
191
193
|
|
192
194
|
def test_partial_passage_after_full_passage
|
193
195
|
text = 'Ruth 2,5; 4'
|
194
196
|
t1, t2 = text.split(semi)
|
195
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
197
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Ruth, c1: 4, b2: :Ruth, c2: 4)], text
|
196
198
|
text = 'Ruth 2,5; Markus'
|
197
199
|
t1, t2 = text.split(semi)
|
198
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
200
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Mark, b2: :Mark)], text
|
199
201
|
text = 'Ruth 2,5; Markus 4'
|
200
202
|
t1, t2 = text.split(semi)
|
201
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
203
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 5, b2: :Ruth, c2: 2, v2: 5), semi, pass(text: t2, b1: :Mark, c1: 4, b2: :Mark, c2: 4)], text
|
202
204
|
end
|
203
205
|
|
204
206
|
######################################################################
|
@@ -208,61 +210,61 @@ class TestParser < Test::Unit::TestCase
|
|
208
210
|
def test_verse_range_and_separated_verse
|
209
211
|
text = 'Ruth 2,1-3.11'
|
210
212
|
t1, t2 = text.split(dot)
|
211
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
213
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 3), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 11, b2: :Ruth, c2: 2, v2: 11)], text
|
212
214
|
end
|
213
215
|
|
214
216
|
def test_separate_verse_and_verse_range
|
215
217
|
text = 'Ruth 2,1.3-11'
|
216
218
|
t1, t2 = text.split(dot)
|
217
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
219
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 1), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 3, b2: :Ruth, c2: 2, v2: 11)], text
|
218
220
|
end
|
219
221
|
|
220
222
|
def test_two_verse_ranges
|
221
223
|
text = 'Ruth 2,1-3.7-11'
|
222
224
|
t1, t2 = text.split(dot)
|
223
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
225
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 3), dot, pass(text: t2, b1: :Ruth, c1: 2, v1: 7, b2: :Ruth, c2: 2, v2: 11)], text
|
224
226
|
end
|
225
227
|
|
226
228
|
def test_two_verse_range_different_books
|
227
229
|
text = 'Ruth 2,1-11; Markus 4,3-7'
|
228
230
|
t1, t2 = text.split(semi)
|
229
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
231
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), semi, pass(text: t2, b1: :Mark, c1: 4, v1: 3, b2: :Mark, c2: 4, v2: 7)], text
|
230
232
|
end
|
231
233
|
|
232
234
|
def test_two_verse_range_different_chapters
|
233
235
|
text = 'Ruth 2,1-11; 3,10-19'
|
234
236
|
t1, t2 = text.split(semi)
|
235
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
237
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), semi, pass(text: t2, b1: :Ruth, c1: 3, v1: 10, b2: :Ruth, c2: 3, v2: 19)], text
|
236
238
|
end
|
237
239
|
|
238
240
|
def test_book_range_and_following_book
|
239
241
|
text = 'Ruth-Markus; Johannes'
|
240
242
|
t1, t2 = text.split(semi)
|
241
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
243
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, b2: :Mark), semi, pass(text: t2, b1: :John, b2: :John)], text
|
242
244
|
end
|
243
245
|
|
244
246
|
def test_chapter_range_and_following_book
|
245
247
|
text = 'Ruth 1-2; Joh 4'
|
246
248
|
t1, t2 = text.split(semi)
|
247
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
249
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 1, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :John, c1: 4, b2: :John, c2: 4)], text
|
248
250
|
end
|
249
251
|
|
250
252
|
def test_chapter_range_and_following_chapter
|
251
253
|
text = 'Ruth 1-2; 4'
|
252
254
|
t1, t2 = text.split(semi)
|
253
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
255
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Ruth, c1: 1, b2: :Ruth, c2: 2), semi, pass(text: t2, b1: :Ruth, c1: 4, b2: :Ruth, c2: 4)], text
|
254
256
|
end
|
255
257
|
|
256
258
|
def test_book_only_after_full_passage
|
257
259
|
text = 'Matt 3,4; Mar; Joh 3,16'
|
258
260
|
t1, t2, t3 = text.split(semi)
|
259
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
261
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Matt, c1: 3, v1: 4, b2: :Matt, c2: 3, v2: 4), semi, pass(text: t2, b1: :Mark, b2: :Mark), semi, pass(text: t3, b1: :John, c1: 3, v1: 16, b2: :John, c2: 3, v2: 16)], text
|
260
262
|
end
|
261
263
|
|
262
264
|
def test_chapter_only_after_full_passage
|
263
265
|
text = 'Matt 3,4; 8; Joh 3,16'
|
264
266
|
t1, t2, t3 = text.split(semi)
|
265
|
-
assert_parsed_ast_for_text [pass(text: t1, b1:
|
267
|
+
assert_parsed_ast_for_text [pass(text: t1, b1: :Matt, c1: 3, v1: 4, b2: :Matt, c2: 3, v2: 4), semi, pass(text: t2, b1: :Matt, c1: 8, b2: :Matt, c2: 8), semi, pass(text: t3, b1: :John, c1: 3, v1: 16, b2: :John, c2: 3, v2: 16)], text
|
266
268
|
end
|
267
269
|
|
268
270
|
######################################################################
|
@@ -273,13 +275,13 @@ class TestParser < Test::Unit::TestCase
|
|
273
275
|
text = 'Ruth 2,1-11.15; 3,7.9-12; Markus 4; 5,3.18-21'
|
274
276
|
t1, t2, t3, t4, t5, t6, t7 = text.split(/; |\./)
|
275
277
|
ast = [
|
276
|
-
pass(text: t1, b1:
|
277
|
-
pass(text: t2, b1:
|
278
|
-
pass(text: t3, b1:
|
279
|
-
pass(text: t4, b1:
|
280
|
-
pass(text: t5, b1:
|
281
|
-
pass(text: t6, b1:
|
282
|
-
pass(text: t7, b1:
|
278
|
+
pass(text: t1, b1: :Ruth, c1: 2, v1: 1, b2: :Ruth, c2: 2, v2: 11), dot,
|
279
|
+
pass(text: t2, b1: :Ruth, c1: 2, v1: 15, b2: :Ruth, c2: 2, v2: 15), semi,
|
280
|
+
pass(text: t3, b1: :Ruth, c1: 3, v1: 7, b2: :Ruth, c2: 3, v2: 7), dot,
|
281
|
+
pass(text: t4, b1: :Ruth, c1: 3, v1: 9, b2: :Ruth, c2: 3, v2: 12), semi,
|
282
|
+
pass(text: t5, b1: :Mark, c1: 4, b2: :Mark, c2: 4), semi,
|
283
|
+
pass(text: t6, b1: :Mark, c1: 5, v1: 3, b2: :Mark, c2: 5, v2: 3), dot,
|
284
|
+
pass(text: t7, b1: :Mark, c1: 5, v1: 18, b2: :Mark, c2: 5, v2: 21)
|
283
285
|
]
|
284
286
|
assert_parsed_ast_for_text ast, text
|
285
287
|
end
|
@@ -318,17 +320,17 @@ class TestParser < Test::Unit::TestCase
|
|
318
320
|
# but in German the abbrev "Phil" is generally used for "Philipper",
|
319
321
|
# so the parser should be able to support such behaviour.
|
320
322
|
text = 'Phil 4,4'
|
321
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
323
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Phil, c1: 4, v1: 4, b2: :Phil, c2: 4, v2: 4)], text
|
322
324
|
# It must also work with a dot
|
323
325
|
text = 'Phil. 4,4'
|
324
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
326
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Phil, c1: 4, v1: 4, b2: :Phil, c2: 4, v2: 4)], text
|
325
327
|
end
|
326
328
|
|
327
329
|
def test_book_abbrev_which_seems_to_be_ambiguous
|
328
330
|
# Abbreviation 'Psm' matches 'Psalm' and 'Psalmen' which is the same
|
329
331
|
# book so it is not an ambiguous error.
|
330
332
|
text = 'Psm 23,6'
|
331
|
-
assert_parsed_ast_for_text [pass(text: text, b1:
|
333
|
+
assert_parsed_ast_for_text [pass(text: text, b1: :Ps, c1: 23, v1: 6, b2: :Ps, c2: 23, v2: 6)], text
|
332
334
|
end
|
333
335
|
|
334
336
|
private
|