2 Copyright (C) 2014-2015 Carl Hetherington <cth@carlh.net>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include "dcp_reader.h"
22 #include <boost/test/unit_test.hpp>
23 #include <boost/optional/optional_io.hpp>
25 using std::shared_ptr;
28 /* Test reading of a DCP XML file */
29 BOOST_AUTO_TEST_CASE (dcp_reader_test1)
31 sub::DCPReader reader ("test/data/test1.xml");
32 auto subs = sub::collect<vector<sub::Subtitle>> (reader.subtitles());
34 auto i = subs.begin();
35 BOOST_REQUIRE (i != subs.end());
36 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 5, 198 * 4));
37 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 7, 115 * 4));
38 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
39 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
42 auto j = i->lines.begin();
43 BOOST_REQUIRE (j != i->lines.end ());
44 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
45 sub::Block b = j->blocks.front ();
46 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
47 BOOST_CHECK_EQUAL (b.italic, false);
48 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
49 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
50 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
51 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
52 BOOST_CHECK_EQUAL (b.text, "My jacket was Idi Amin's");
53 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
54 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
57 BOOST_REQUIRE (j == i->lines.end ());
61 BOOST_REQUIRE (i != subs.end ());
62 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 7, 177 * 4));
63 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 11, 31 * 4));
64 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
65 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
68 auto j = i->lines.begin();
69 BOOST_REQUIRE (j != i->lines.end ());
70 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
71 auto b = j->blocks.front ();
72 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
73 BOOST_CHECK_EQUAL (b.italic, true);
74 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
75 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
76 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.21, 1);
77 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
78 BOOST_CHECK_EQUAL (b.text, "My corset was H.M. The Queen's");
79 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
80 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
83 BOOST_REQUIRE (j != i->lines.end ());
84 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
85 b = j->blocks.front ();
86 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
87 BOOST_CHECK_EQUAL (b.italic, false);
88 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
89 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
90 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
91 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
92 BOOST_CHECK_EQUAL (b.text, "My large wonderbra");
93 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
94 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
97 BOOST_REQUIRE (j == i->lines.end ());
101 BOOST_REQUIRE (i != subs.end ());
102 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 11, 94 * 4));
103 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 13, 63 * 4));
104 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
105 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
108 auto j = i->lines.begin();
109 BOOST_REQUIRE (j != i->lines.end ());
110 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
111 auto b = j->blocks.front();
112 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
113 BOOST_CHECK_EQUAL (b.italic, false);
114 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
115 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
116 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
117 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
118 BOOST_CHECK_EQUAL (b.text, "Once belonged to the Shah");
119 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
120 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
123 BOOST_REQUIRE (j == i->lines.end ());
127 BOOST_REQUIRE (i != subs.end ());
128 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 13, 104 * 4));
129 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 15, 177 * 4));
130 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
131 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
134 auto j = i->lines.begin();
135 BOOST_REQUIRE (j != i->lines.end ());
136 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
137 auto b = j->blocks.front();
138 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
139 BOOST_CHECK_EQUAL (b.italic, false);
140 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
141 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
142 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
143 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
144 BOOST_CHECK_EQUAL (b.text, "And these are Roy Hattersley's jeans");
145 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
146 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
149 BOOST_REQUIRE (j == i->lines.end ());
153 /* And another one */
154 BOOST_AUTO_TEST_CASE (dcp_reader_test2)
156 sub::DCPReader reader ("test/data/test2.xml");
157 auto subs = sub::collect<vector<sub::Subtitle>> (reader.subtitles ());
159 auto i = subs.begin ();
160 BOOST_REQUIRE (i != subs.end ());
161 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 41, 62 * 4));
162 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 43, 52 * 4));
163 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
164 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
167 auto j = i->lines.begin ();
168 BOOST_REQUIRE (j != i->lines.end ());
169 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
170 auto b = j->blocks.front ();
171 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
172 BOOST_CHECK_EQUAL (b.italic, true);
173 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
174 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
175 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
176 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
177 BOOST_CHECK_EQUAL (b.text, "At afternoon tea with John Peel");
178 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
179 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
182 BOOST_REQUIRE (j != i->lines.end ());
183 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
184 b = j->blocks.front ();
185 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
186 BOOST_CHECK_EQUAL (b.italic, true);
187 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
188 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
189 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
190 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
191 BOOST_CHECK_EQUAL (b.text, "I enquired if his accent was real");
192 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
193 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
196 BOOST_CHECK (j == i->lines.end ());
200 BOOST_REQUIRE (i != subs.end ());
201 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 50, 42 * 4));
202 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 52, 21 * 4));
203 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
204 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
207 auto j = i->lines.begin ();
208 BOOST_REQUIRE (j != i->lines.end ());
209 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
210 auto b = j->blocks.front ();
211 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
212 BOOST_CHECK_EQUAL (b.italic, true);
213 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
214 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
215 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
216 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
217 BOOST_CHECK_EQUAL (b.text, "He said \"out of the house");
218 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
219 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
222 BOOST_REQUIRE (j != i->lines.end ());
223 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
224 b = j->blocks.front ();
225 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
226 BOOST_CHECK_EQUAL (b.italic, true);
227 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
228 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
229 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
230 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
231 BOOST_CHECK_EQUAL (b.text, "I'm incredibly scouse");
232 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
233 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
236 BOOST_CHECK (j == i->lines.end ());
240 BOOST_REQUIRE (i != subs.end ());
241 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 2, 208 * 4));
242 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 04, 10 * 4));
243 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
244 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
247 auto j = i->lines.begin();
248 BOOST_REQUIRE (j != i->lines.end ());
249 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
250 auto b = j->blocks.front();
251 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
252 BOOST_CHECK_EQUAL (b.italic, true);
253 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
254 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
255 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
256 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
257 BOOST_CHECK_EQUAL (b.text, "At home it depends how I feel.\"");
258 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
259 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
262 BOOST_REQUIRE (j != i->lines.end ());
263 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
264 b = j->blocks.front ();
265 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
266 BOOST_CHECK_EQUAL (b.italic, true);
267 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
268 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
269 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 2, 208 * 4));
270 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 4, 10 * 4));
271 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
272 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
273 BOOST_CHECK_EQUAL (b.text, "I spent a long weekend in Brighton");
274 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
275 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
276 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
277 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
280 BOOST_CHECK (j == i->lines.end ());
284 BOOST_REQUIRE (i != subs.end ());
285 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 15, 42 * 4));
286 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 16, 42 * 4));
287 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
288 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
291 auto j = i->lines.begin();
292 BOOST_REQUIRE (j != i->lines.end ());
293 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
294 auto b = j->blocks.front();
295 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
296 BOOST_CHECK_EQUAL (b.italic, true);
297 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
298 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
299 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
300 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
301 BOOST_CHECK_EQUAL (b.text, "With the legendary Miss Enid Blyton");
302 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
303 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
306 BOOST_REQUIRE (j != i->lines.end ());
307 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
308 b = j->blocks.front ();
309 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
310 BOOST_CHECK_EQUAL (b.italic, true);
311 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
312 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
313 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
314 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
315 BOOST_CHECK_EQUAL (b.text, "She said \"you be Noddy");
316 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
317 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
320 BOOST_CHECK (j == i->lines.end ());
324 BOOST_REQUIRE (i != subs.end ());
325 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 20, 219 * 4));
326 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 22, 73 * 4));
327 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
328 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
331 auto j = i->lines.begin();
332 BOOST_REQUIRE (j != i->lines.end ());
333 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
334 auto b = j->blocks.front();
335 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
336 BOOST_CHECK_EQUAL (b.italic, true);
337 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
338 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
339 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
340 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
341 BOOST_CHECK_EQUAL (b.text, "and I'll show you my body\"");
342 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
343 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
346 BOOST_REQUIRE (j != i->lines.end ());
347 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
348 b = j->blocks.front ();
349 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
350 BOOST_CHECK_EQUAL (b.italic, true);
351 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
352 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
353 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
354 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
355 BOOST_CHECK_EQUAL (b.text, "But Big Ears kept turning the light on.");
356 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
357 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
360 BOOST_CHECK (j == i->lines.end ());
364 BOOST_REQUIRE (i != subs.end ());
365 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 27, 115 * 4));
366 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 28, 208 * 4));
367 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
368 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
371 auto j = i->lines.begin();
372 BOOST_REQUIRE (j != i->lines.end ());
373 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
374 auto b = j->blocks.front();
375 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
376 BOOST_CHECK_EQUAL (b.italic, true);
377 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
378 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
379 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
380 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
381 BOOST_CHECK_EQUAL (b.text, "That curious creature the Sphinx");
382 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
383 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
386 BOOST_REQUIRE (j != i->lines.end ());
387 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
388 b = j->blocks.front ();
389 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
390 BOOST_CHECK_EQUAL (b.italic, true);
391 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
392 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
393 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
394 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
395 BOOST_CHECK_EQUAL (b.text, "Is smarter than anyone thinks");
396 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
397 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
400 BOOST_CHECK (j == i->lines.end ());
404 BOOST_REQUIRE (i != subs.end ());
405 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 42, 229 * 4));
406 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 45, 62 * 4));
407 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
408 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
411 auto j = i->lines.begin();
412 BOOST_REQUIRE (j != i->lines.end ());
413 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
414 auto b = j->blocks.front();
415 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
416 BOOST_CHECK_EQUAL (b.italic, false);
417 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
418 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
419 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
420 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
421 BOOST_CHECK_EQUAL (b.text, "It sits there and smirks");
422 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
423 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
426 BOOST_REQUIRE (j != i->lines.end ());
427 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
428 b = j->blocks.front ();
429 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
430 BOOST_CHECK_EQUAL (b.italic, false);
431 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
432 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
433 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
434 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
435 BOOST_CHECK_EQUAL (b.text, "And you don't think it works");
436 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
437 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
440 BOOST_CHECK (j == i->lines.end ());
444 BOOST_REQUIRE (i != subs.end ());
445 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 45, 146 * 4));
446 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 47, 94 * 4));
447 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
448 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
451 auto j = i->lines.begin();
452 BOOST_REQUIRE (j != i->lines.end ());
453 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
454 auto b = j->blocks.front();
455 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
456 BOOST_CHECK_EQUAL (b.italic, false);
457 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
458 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
459 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
460 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
461 BOOST_CHECK_EQUAL (b.text, "Then when you're not looking, it winks.");
462 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
463 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
466 BOOST_REQUIRE (j != i->lines.end ());
467 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
468 b = j->blocks.front ();
469 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
470 BOOST_CHECK_EQUAL (b.italic, false);
471 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
472 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
473 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
474 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
475 BOOST_CHECK_EQUAL (b.text, "When it snows you will find Sister Sledge");
476 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
477 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
480 BOOST_CHECK (j == i->lines.end ());
484 BOOST_REQUIRE (i != subs.end ());
485 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 47, 146 * 4));
486 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 48, 167 * 4));
487 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
488 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
491 auto j = i->lines.begin();
492 BOOST_REQUIRE (j != i->lines.end ());
493 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
494 auto b = j->blocks.front();
495 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
496 BOOST_CHECK_EQUAL (b.italic, false);
497 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
498 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
499 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
500 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
501 BOOST_CHECK_EQUAL (b.text, "Out mooning, at night, on the ledge");
502 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
503 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
506 BOOST_REQUIRE (j != i->lines.end ());
507 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
508 b = j->blocks.front ();
509 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
510 BOOST_CHECK_EQUAL (b.italic, false);
511 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
512 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
513 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
514 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
515 BOOST_CHECK_EQUAL (b.text, "One storey down");
516 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
517 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
520 BOOST_CHECK (j == i->lines.end ());
524 BOOST_REQUIRE (i != subs.end ());
525 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 53, 21 * 4));
526 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 56, 10 * 4));
527 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
528 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
531 auto j = i->lines.begin();
532 BOOST_REQUIRE (j != i->lines.end ());
533 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
534 auto b = j->blocks.front();
535 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
536 BOOST_CHECK_EQUAL (b.italic, false);
537 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
538 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
539 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
540 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
541 BOOST_CHECK_EQUAL (b.text, "Is the maestro, James Brown");
542 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
543 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
546 BOOST_REQUIRE (j != i->lines.end ());
547 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
548 b = j->blocks.front ();
549 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
550 BOOST_CHECK_EQUAL (b.italic, false);
551 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
552 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
553 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
554 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
555 BOOST_CHECK_EQUAL (b.text, "Displaying his meat and two veg.");
556 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
557 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
560 BOOST_CHECK (j == i->lines.end ());
564 BOOST_REQUIRE (i != subs.end ());
565 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 2, 5, 208 * 4));
566 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 2, 7, 31 * 4));
567 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
568 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
571 auto j = i->lines.begin();
572 BOOST_REQUIRE (j != i->lines.end ());
573 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
574 auto b = j->blocks.front();
575 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
576 BOOST_CHECK_EQUAL (b.italic, true);
577 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
578 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
579 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
580 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
581 BOOST_CHECK_EQUAL (b.text, "HELLO");
582 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
583 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
586 BOOST_REQUIRE (j != i->lines.end ());
587 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
588 b = j->blocks.front ();
589 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
590 BOOST_CHECK_EQUAL (b.italic, true);
591 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
592 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
593 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
594 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
595 BOOST_CHECK_EQUAL (b.text, "WORLD");
596 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
597 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
600 BOOST_CHECK (j == i->lines.end ());