sportdb-models 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/HISTORY.md +21 -0
  4. data/Manifest.txt +142 -0
  5. data/README.md +28 -0
  6. data/Rakefile +59 -0
  7. data/config/fixtures/de.yml +46 -0
  8. data/config/fixtures/en.yml +54 -0
  9. data/config/fixtures/es.yml +48 -0
  10. data/config/fixtures/fr.yml +53 -0
  11. data/config/fixtures/it.yml +55 -0
  12. data/config/fixtures/pt.yml +46 -0
  13. data/config/fixtures/ro.yml +55 -0
  14. data/data/seasons.txt +74 -0
  15. data/data/setups/all.txt +5 -0
  16. data/lib/sportdb/calc.rb +279 -0
  17. data/lib/sportdb/deleter.rb +52 -0
  18. data/lib/sportdb/finders/date.rb +374 -0
  19. data/lib/sportdb/finders/goals.rb +260 -0
  20. data/lib/sportdb/finders/scores.rb +122 -0
  21. data/lib/sportdb/lang.rb +216 -0
  22. data/lib/sportdb/matcher.rb +31 -0
  23. data/lib/sportdb/models.rb +259 -0
  24. data/lib/sportdb/models/assoc.rb +106 -0
  25. data/lib/sportdb/models/assoc_assoc.rb +15 -0
  26. data/lib/sportdb/models/badge.rb +14 -0
  27. data/lib/sportdb/models/event.rb +65 -0
  28. data/lib/sportdb/models/event_ground.rb +15 -0
  29. data/lib/sportdb/models/event_team.rb +16 -0
  30. data/lib/sportdb/models/forward.rb +55 -0
  31. data/lib/sportdb/models/game.rb +244 -0
  32. data/lib/sportdb/models/goal.rb +15 -0
  33. data/lib/sportdb/models/ground.rb +100 -0
  34. data/lib/sportdb/models/group.rb +23 -0
  35. data/lib/sportdb/models/group_team.rb +14 -0
  36. data/lib/sportdb/models/league.rb +83 -0
  37. data/lib/sportdb/models/person.rb +21 -0
  38. data/lib/sportdb/models/roster.rb +18 -0
  39. data/lib/sportdb/models/round.rb +22 -0
  40. data/lib/sportdb/models/season.rb +14 -0
  41. data/lib/sportdb/models/stats/alltime_standing.rb +44 -0
  42. data/lib/sportdb/models/stats/alltime_standing_entry.rb +23 -0
  43. data/lib/sportdb/models/stats/event_standing.rb +55 -0
  44. data/lib/sportdb/models/stats/event_standing_entry.rb +21 -0
  45. data/lib/sportdb/models/stats/group_standing.rb +50 -0
  46. data/lib/sportdb/models/stats/group_standing_entry.rb +22 -0
  47. data/lib/sportdb/models/team.rb +119 -0
  48. data/lib/sportdb/models/team_comp.rb +64 -0
  49. data/lib/sportdb/models/utils.rb +78 -0
  50. data/lib/sportdb/models/world/city.rb +21 -0
  51. data/lib/sportdb/models/world/continent.rb +20 -0
  52. data/lib/sportdb/models/world/country.rb +19 -0
  53. data/lib/sportdb/models/world/region.rb +19 -0
  54. data/lib/sportdb/patterns.rb +38 -0
  55. data/lib/sportdb/reader.rb +130 -0
  56. data/lib/sportdb/reader_file.rb +123 -0
  57. data/lib/sportdb/reader_zip.rb +165 -0
  58. data/lib/sportdb/readers/assoc.rb +54 -0
  59. data/lib/sportdb/readers/event.rb +200 -0
  60. data/lib/sportdb/readers/game.rb +877 -0
  61. data/lib/sportdb/readers/ground.rb +53 -0
  62. data/lib/sportdb/readers/league.rb +54 -0
  63. data/lib/sportdb/readers/season.rb +83 -0
  64. data/lib/sportdb/readers/squad_club.rb +201 -0
  65. data/lib/sportdb/readers/squad_national_team.rb +173 -0
  66. data/lib/sportdb/readers/team.rb +53 -0
  67. data/lib/sportdb/schema.rb +373 -0
  68. data/lib/sportdb/standings.rb +178 -0
  69. data/lib/sportdb/stats.rb +27 -0
  70. data/lib/sportdb/utils.rb +89 -0
  71. data/lib/sportdb/utils_date.rb +26 -0
  72. data/lib/sportdb/utils_goals.rb +20 -0
  73. data/lib/sportdb/utils_group.rb +63 -0
  74. data/lib/sportdb/utils_map.rb +44 -0
  75. data/lib/sportdb/utils_round.rb +165 -0
  76. data/lib/sportdb/utils_scores.rb +17 -0
  77. data/lib/sportdb/utils_teams.rb +43 -0
  78. data/lib/sportdb/version.rb +23 -0
  79. data/test/data/at-austria/2013_14/bl.txt +227 -0
  80. data/test/data/at-austria/2013_14/bl.yml +30 -0
  81. data/test/data/at-austria/2013_14/bl_ii.txt +154 -0
  82. data/test/data/at-austria/2013_14/el.txt +4 -0
  83. data/test/data/at-austria/2013_14/el.yml +25 -0
  84. data/test/data/at-austria/2013_14/squads/austria.txt +40 -0
  85. data/test/data/at-austria/2013_14/squads/salzburg.txt +35 -0
  86. data/test/data/at-austria/leagues.txt +11 -0
  87. data/test/data/at-austria/teams.txt +75 -0
  88. data/test/data/at-austria/teams_2.txt +34 -0
  89. data/test/data/national-teams/assocs.txt +231 -0
  90. data/test/data/national-teams/europe/assocs.txt +13 -0
  91. data/test/data/national-teams/europe/teams.txt +13 -0
  92. data/test/data/national-teams/north-america/assocs.txt +10 -0
  93. data/test/data/national-teams/north-america/teams.txt +7 -0
  94. data/test/data/national-teams/teams.txt +19 -0
  95. data/test/data/players/europe/at-austria/players.txt +45 -0
  96. data/test/data/players/europe/de-deutschland/players.txt +41 -0
  97. data/test/data/players/south-america/br-brazil/players.txt +51 -0
  98. data/test/data/world-cup/1930/cup.txt +71 -0
  99. data/test/data/world-cup/1930/cup.yml +23 -0
  100. data/test/data/world-cup/1930/cup_goals.txt +47 -0
  101. data/test/data/world-cup/1930/cup_goals.yml +23 -0
  102. data/test/data/world-cup/1954/cup.txt +90 -0
  103. data/test/data/world-cup/1954/cup.yml +30 -0
  104. data/test/data/world-cup/1962/cup.txt +86 -0
  105. data/test/data/world-cup/1962/cup.yml +32 -0
  106. data/test/data/world-cup/1974/cup.yml +35 -0
  107. data/test/data/world-cup/1974/cup_finals.txt +14 -0
  108. data/test/data/world-cup/1974/cup_i.txt +55 -0
  109. data/test/data/world-cup/1974/cup_ii.txt +34 -0
  110. data/test/data/world-cup/2014/cup.txt +5 -0
  111. data/test/data/world-cup/2014/cup.yml +54 -0
  112. data/test/data/world-cup/2014/squads/br-brazil.txt +46 -0
  113. data/test/data/world-cup/2014/squads/de-deutschland.txt +8 -0
  114. data/test/data/world-cup/2014/squads/jp-japan.txt +30 -0
  115. data/test/data/world-cup/2014/squads/uy-uruguay.txt +32 -0
  116. data/test/data/world-cup/leagues.txt +5 -0
  117. data/test/data/world-cup/seasons_1930.txt +4 -0
  118. data/test/data/world-cup/seasons_1954.txt +4 -0
  119. data/test/data/world-cup/seasons_1962.txt +4 -0
  120. data/test/data/world-cup/seasons_1974.txt +5 -0
  121. data/test/data/world-cup/teams_1930.txt +26 -0
  122. data/test/data/world-cup/teams_1954.txt +30 -0
  123. data/test/data/world-cup/teams_1962.txt +29 -0
  124. data/test/data/world-cup/teams_1974.txt +29 -0
  125. data/test/helper.rb +120 -0
  126. data/test/test_assoc_reader.rb +201 -0
  127. data/test/test_changes.rb +74 -0
  128. data/test/test_cursor.rb +50 -0
  129. data/test/test_date.rb +100 -0
  130. data/test/test_goals.rb +109 -0
  131. data/test/test_lang.rb +130 -0
  132. data/test/test_load.rb +61 -0
  133. data/test/test_reader.rb +88 -0
  134. data/test/test_reader_from_string.rb +65 -0
  135. data/test/test_round_auto.rb +370 -0
  136. data/test/test_round_def.rb +109 -0
  137. data/test/test_round_header.rb +183 -0
  138. data/test/test_scores.rb +70 -0
  139. data/test/test_squad_club_reader.rb +76 -0
  140. data/test/test_squad_national_team_reader.rb +116 -0
  141. data/test/test_standings.rb +279 -0
  142. data/test/test_standings_ii.rb +46 -0
  143. data/test/test_utils.rb +124 -0
  144. data/test/test_winner.rb +95 -0
  145. metadata +378 -0
@@ -0,0 +1,279 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_standings.rb
6
+ # or better
7
+ # rake -I ./lib test
8
+
9
+
10
+ require 'helper'
11
+
12
+
13
+
14
+ class TestStandings < MiniTest::Test
15
+
16
+ def setup
17
+ WorldDb.delete!
18
+ SportDb.delete!
19
+ ## SportDb.read_builtin
20
+
21
+ add_countries
22
+ add_world_cup_1974
23
+ end
24
+
25
+ def add_countries
26
+ countries = [
27
+ ['cd', 'Congo DR', 'COD' ],
28
+ ['kr', 'South Korea', 'KOR' ],
29
+ ['au', 'Australia', 'AUS' ],
30
+
31
+ ['ar', 'Argentina', 'ARG' ],
32
+ ['br', 'Brazil', 'BRA' ],
33
+ ['bo', 'Bolivia', 'BOL' ],
34
+ ['cl', 'Chile', 'CHI' ],
35
+ ['co', 'Colombia', 'COL' ],
36
+ ['uy', 'Uruguay', 'URU' ],
37
+ ['pe', 'Peru', 'PER' ],
38
+ ['py', 'Paraguay', 'PAR' ],
39
+
40
+ ['mx', 'Mexico', 'MEX' ],
41
+ ['us', 'United States', 'USA' ],
42
+ ['ht', 'Haiti', 'HAI' ],
43
+
44
+ ['at', 'Austria', 'AUT' ],
45
+ ['be', 'Belgium', 'BEL' ],
46
+ ['fr', 'France', 'FRA' ],
47
+ ['rs', 'Serbia', 'SRB' ],
48
+ ['ro', 'Romania', 'ROU' ],
49
+ ['bg', 'Bulgaria', 'BUL' ],
50
+ ['cz', 'Czech Republic', 'CZE' ],
51
+ ['en', 'England', 'ENG' ],
52
+ ['de', 'Germany', 'GER' ],
53
+ ['hu', 'Hungary', 'HUN' ],
54
+ ['it', 'Italy', 'ITA' ],
55
+ ['ru', 'Russia', 'RUS' ],
56
+ ['es', 'Spain', 'ESP' ],
57
+ ['ch', 'Switzerland', 'SUI' ],
58
+ ['sc', 'Scotland', 'SCO' ],
59
+ ['tr', 'Turkey', 'TUR' ],
60
+ ['nl', 'Netherlands', 'NED' ],
61
+ ['pl', 'Poland', 'POL' ],
62
+ ['se', 'Sweden', 'SWE' ],
63
+ ]
64
+
65
+ countries.each do |country|
66
+ key = country[0]
67
+ name = country[1]
68
+ code = country[2]
69
+ Country.create!( key: key, name: name, code: code, pop: 1, area: 1 )
70
+ end
71
+ end
72
+
73
+
74
+ def add_world_cup_1974
75
+ teamreader = TestTeamReader.from_file( 'world-cup/teams_1974' )
76
+ teamreader.read()
77
+
78
+ seasonreader = TestSeasonReader.from_file( 'world-cup/seasons_1974' )
79
+ seasonreader.read()
80
+
81
+ leaguereader = TestLeagueReader.from_file( 'world-cup/leagues' )
82
+ leaguereader.read()
83
+
84
+ gamereader = TestGameReader.from_file( 'world-cup/1974/cup' )
85
+ gamereader.read()
86
+
87
+ ev = Event.find_by_key!( 'world.1974' )
88
+
89
+ assert_equal 16, ev.teams.count
90
+ assert_equal 38, ev.games.count
91
+ assert_equal 12, ev.rounds.count
92
+ end # method add_world_cup_1974
93
+
94
+
95
+ def test_alltime_standings
96
+ st = AlltimeStanding.create!( key: 'worldcup', title: 'All Time World Cup' )
97
+
98
+ assert_equal 1, AlltimeStanding.count
99
+ assert_equal 0, st.entries.count
100
+
101
+ ## add some team entries
102
+
103
+ arg = Team.find_by_key!( 'arg' )
104
+ bra = Team.find_by_key!( 'bra' )
105
+ ita = Team.find_by_key!( 'ita' )
106
+
107
+ AlltimeStandingEntry.create!( standing_id: st.id, team_id: arg.id )
108
+ AlltimeStandingEntry.create!( standing_id: st.id, team_id: bra.id )
109
+ AlltimeStandingEntry.create!( standing_id: st.id, team_id: ita.id )
110
+
111
+ assert_equal 3, st.entries.count
112
+ assert_equal 3, AlltimeStandingEntry.count
113
+
114
+ st2 = AlltimeStandingEntry.first.standing # check back/parent ref w/ standing belongs_to assoc
115
+ assert_equal 'worldcup', st2.key
116
+ assert_equal 'All Time World Cup', st2.title
117
+
118
+ end # test_alltime_standings
119
+
120
+
121
+ def test_alltime_standings_recalc
122
+ st = AlltimeStanding.create!( key: 'worldcup', title: 'All Time World Cup' )
123
+
124
+ assert_equal 1, AlltimeStanding.count
125
+ assert_equal 0, st.entries.count
126
+
127
+ league = League.find_by_key!( 'world' )
128
+
129
+ st.recalc_for_league!( league )
130
+ assert_equal 16, st.entries.count
131
+ assert_equal 16, AlltimeStandingEntry.count
132
+
133
+ st.recalc_for_league!( league )
134
+ assert_equal 16, st.entries.count
135
+ assert_equal 16, AlltimeStandingEntry.count
136
+
137
+
138
+ # test merge to new team (not included)
139
+ at = Country.find_by_key!( 'at' )
140
+ aut = Team.create!( key: 'aut', title: 'Austria', code: 'AUT', country_id: at.id )
141
+
142
+ #### try merge teams
143
+ # merge (incl.) uruguay into bra
144
+ #
145
+ st.recalc_for_league!( league, merge: { 'bra' => 'uru',
146
+ 'pol' => ['bul', 'yug'],
147
+ 'aut' => 'aus' } )
148
+
149
+ assert_equal 13, st.entries.count
150
+ assert_equal 13, AlltimeStandingEntry.count
151
+
152
+ bra = Team.find_by_key!( 'bra' )
153
+ bra_stats = st.entries.where( team_id: bra.id ).first
154
+ assert_equal 2, bra_stats.recs
155
+
156
+ pol = Team.find_by_key!( 'pol' )
157
+ pol_stats = st.entries.where( team_id: pol.id ).first
158
+ assert_equal 3, pol_stats.recs
159
+
160
+ # test merge to new team (not included)
161
+ aut = Team.find_by_key!( 'aut' )
162
+ aut_stats = st.entries.where( team_id: aut.id ).first
163
+ assert_equal 1, aut_stats.recs
164
+
165
+ end # test_alltime_standings_recalc
166
+
167
+
168
+ def test_event_standings_recalc
169
+ ev = Event.find_by_key!( 'world.1974' )
170
+
171
+ assert_equal 16, ev.teams.count
172
+
173
+ st = EventStanding.create!( event_id: ev.id )
174
+
175
+ assert_equal 1, EventStanding.count
176
+ assert_equal 0, st.entries.count
177
+
178
+ st.recalc!
179
+ assert_equal 16, st.entries.count
180
+
181
+ st.recalc! ## try again (check update)
182
+ assert_equal 16, st.entries.count
183
+
184
+ ## try global recalc
185
+ EventStandingEntry.delete_all
186
+ assert_equal 1, EventStanding.count
187
+ assert_equal 0, EventStandingEntry.count
188
+
189
+ EventStanding.recalc!
190
+ assert_equal 1, EventStanding.count
191
+ assert_equal 16, EventStandingEntry.count
192
+
193
+ end # test_event_standings_recalc
194
+
195
+
196
+ def test_group_standings_recalc
197
+ g2 = Group.find_by_pos!( 2 ) ## Group 2 | Yugoslavia Brazil Scotland Zaire
198
+
199
+ assert_equal 4, g2.teams.count
200
+
201
+ st2 = GroupStanding.create!( group_id: g2.id )
202
+
203
+ assert_equal 1, GroupStanding.count
204
+ assert_equal 0, st2.entries.count
205
+
206
+ st2.recalc!
207
+ assert_equal 4, st2.entries.count
208
+
209
+ st2.recalc! ## try again (check update)
210
+ assert_equal 4, st2.entries.count
211
+
212
+ ## try global recalc
213
+ GroupStandingEntry.delete_all
214
+ assert_equal 1, GroupStanding.count
215
+ assert_equal 0, GroupStandingEntry.count
216
+
217
+ GroupStanding.recalc!
218
+ assert_equal 1, GroupStanding.count
219
+ assert_equal 4, GroupStandingEntry.count
220
+
221
+ end # test_group_standings_recalc
222
+
223
+
224
+ def test_group_standings
225
+ ## Group 1 | East Germany West Germany Chile Australia
226
+ ## Group 2 | Yugoslavia Brazil Scotland Zaire
227
+ ## Group 3 | Netherlands Sweden Bulgaria Uruguay
228
+ ## Group 4 | Poland Argentina Italy Haiti
229
+
230
+ g2 = Group.find_by_pos!( 2 )
231
+ g4 = Group.find_by_pos!( 4 )
232
+
233
+ assert_equal 4, g2.teams.count
234
+ assert_equal 4, g4.teams.count
235
+
236
+ st2 = GroupStanding.create!( group_id: g2.id )
237
+ st4 = GroupStanding.create!( group_id: g4.id )
238
+
239
+ assert_equal 2, GroupStanding.count
240
+ assert_equal 0, st2.entries.count
241
+ assert_equal 0, st4.entries.count
242
+
243
+ ## add some team entries
244
+ bra = Team.find_by_key!( 'bra' )
245
+ arg = Team.find_by_key!( 'arg' )
246
+ ita = Team.find_by_key!( 'ita' )
247
+
248
+ GroupStandingEntry.create!( standing_id: st2.id, team_id: bra.id )
249
+ GroupStandingEntry.create!( standing_id: st4.id, team_id: arg.id )
250
+ GroupStandingEntry.create!( standing_id: st4.id, team_id: ita.id )
251
+
252
+ assert_equal 1, st2.entries.count
253
+ assert_equal 2, st4.entries.count
254
+ assert_equal 3, GroupStandingEntry.count
255
+
256
+ st2ii = st2.entries.first.standing # check back/parent ref w/ standing belongs_to assoc
257
+ assert_equal g2.title, st2ii.group.title
258
+
259
+
260
+ ## Group I | Netherlands Brazil East Germany Argentina
261
+ ## Group J | West Germany Poland Sweden Yugoslavia
262
+
263
+ gi = Group.find_by_pos!( 9 ) # note: I maps to 9
264
+ gj = Group.find_by_pos!( 10 ) # note: J maps to 10
265
+
266
+ assert_equal 4, gi.teams.count
267
+ assert_equal 4, gj.teams.count
268
+
269
+ sti = GroupStanding.create!( group_id: gi.id )
270
+ stj = GroupStanding.create!( group_id: gj.id )
271
+
272
+ assert_equal 4, GroupStanding.count
273
+ assert_equal 0, sti.entries.count
274
+ assert_equal 0, stj.entries.count
275
+
276
+ end # test_group_standings
277
+
278
+
279
+ end # class TestStandings
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_standings_ii.rb
6
+ # or better
7
+ # rake -I ./lib test
8
+
9
+
10
+ require 'helper'
11
+
12
+ class TestStandingsII < MiniTest::Test
13
+
14
+ def setup
15
+ WorldDb.delete!
16
+ SportDb.delete!
17
+ SportDb.read_builtin
18
+ end
19
+
20
+ def test_bl
21
+ at = Country.create!( key: 'at', name: 'Austria', code: 'AUT', pop: 1, area: 1)
22
+
23
+ teamreader = TestTeamReader.from_file( 'at-austria/teams', country_id: at.id )
24
+ teamreader.read()
25
+
26
+ leaguereader = TestLeagueReader.from_file( 'at-austria/leagues', country_id: at.id )
27
+ leaguereader.read()
28
+
29
+ ## check/fix: is country_id more_attribs needed? why? why not?
30
+ gamereader = TestGameReader.from_file( 'at-austria/2013_14/bl', country_id: at.id )
31
+ gamereader.read()
32
+
33
+ bl = Event.find_by_key!( 'at.2013/14' )
34
+
35
+ assert_equal 10, bl.teams.count
36
+ assert_equal 36, bl.rounds.count
37
+ assert_equal 180, bl.games.count # 36x5 = 180
38
+
39
+ standings = SportDb::Standings.new
40
+ standings.update( bl.games )
41
+
42
+ pp standings.to_a
43
+ end
44
+
45
+
46
+ end # class TestStandingsII
@@ -0,0 +1,124 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_lang.rb
6
+ # or better
7
+ # rake -I ./lib test
8
+
9
+ require 'helper'
10
+
11
+ class TestUtils < MiniTest::Test
12
+
13
+ def test_is_group_def
14
+ SportDb.lang.lang = 'en'
15
+
16
+ lines = [
17
+ 'Group A |',
18
+ 'Group B |'
19
+ ]
20
+
21
+ reader = Reader.new
22
+
23
+ lines.each do |line|
24
+ assert_equal true, reader.is_group_def?( line )
25
+ end
26
+ end
27
+
28
+ def test_is_group
29
+ SportDb.lang.lang = 'en'
30
+
31
+ lines = [
32
+ 'Group A',
33
+ 'Group A:',
34
+ '[Group A]'
35
+ ]
36
+
37
+ reader = Reader.new
38
+
39
+ lines.each do |line|
40
+ assert_equal true, reader.is_group?( line )
41
+ end
42
+ end
43
+
44
+
45
+ def test_is_round_def
46
+ SportDb.lang.lang = 'en'
47
+
48
+ lines = [
49
+ 'Matchday 1 |',
50
+ 'Round 1 |'
51
+ ]
52
+
53
+ reader = Reader.new
54
+
55
+ lines.each do |line|
56
+ assert_equal true, reader.is_round_def?( line )
57
+ end
58
+ end
59
+
60
+ def test_is_round
61
+ SportDb.lang.lang = 'en'
62
+
63
+ lines = [
64
+ 'Matchday 1',
65
+ '[Matchday 1]',
66
+ 'Matchday 1:',
67
+ 'Round 1'
68
+ ]
69
+
70
+ reader = Reader.new
71
+
72
+ lines.each do |line|
73
+ assert_equal true, reader.is_round?( line )
74
+ end
75
+ end
76
+
77
+
78
+ def test_is_knockout_round
79
+ SportDb.lang.lang = 'en'
80
+
81
+ lines = [
82
+ '(4) Quarter-finals',
83
+ '(5) Semi-finals',
84
+ '(6) Final'
85
+ ]
86
+
87
+ reader = Reader.new
88
+
89
+ lines.each do |line|
90
+ assert_equal true, reader.is_knockout_round?( line )
91
+ end
92
+ end
93
+
94
+
95
+ def test_is_knockout_round_de
96
+ SportDb.lang.lang = 'de'
97
+
98
+ lines = [
99
+ '(1) Achtelfinale // Di+Mi 14.+15. & 21.+22. Feb 2012',
100
+ '(2) Achtelfinale Rückspiele // Di+Mi 6.+7. & 13.+14. März 2012',
101
+ '(3) Viertelfinale // Di+Mi 27.+28. März 2012',
102
+ '(4) Viertelfinale Rückspiele // Di+Mi 3.+4. April 2012',
103
+ '(5) Halbfinale // Di+Mi 17.+18. April 2012',
104
+ '(6) Halbfinale Rückspiele // Di+Mi 24.+25. April 2012',
105
+ '(7) Finale // Sa 19. Mai 2012'
106
+ ]
107
+
108
+ reader = Reader.new
109
+
110
+ lines.each do |line|
111
+ assert_equal true, reader.is_knockout_round?( line )
112
+ end
113
+ end
114
+
115
+ private
116
+ #######################
117
+ # private helpers
118
+
119
+ class Reader
120
+ include LogUtils::Logging # add logger
121
+ include SportDb::FixtureHelpers
122
+ end
123
+
124
+ end # class TestUtils