2 Copyright (C) 2014 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>
28 using boost::shared_ptr;
30 /* Test reading of a DCP XML file */
31 BOOST_AUTO_TEST_CASE (dcp_reader_test1)
33 sub::DCPReader reader ("test/data/test1.xml");
34 list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
36 list<sub::Subtitle>::iterator i = subs.begin ();
37 BOOST_CHECK (i != subs.end ());
38 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 0, 5, 198 * 4));
39 BOOST_CHECK_EQUAL (i->to.metric(), sub::MetricTime (0, 0, 7, 115 * 4));
40 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
41 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
44 list<sub::Line>::iterator j = i->lines.begin ();
45 BOOST_CHECK (j != i->lines.end ());
46 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
47 sub::Block b = j->blocks.front ();
48 BOOST_CHECK_EQUAL (b.font, "Arial");
49 BOOST_CHECK_EQUAL (b.italic, false);
50 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
51 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
52 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
53 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
54 BOOST_CHECK_EQUAL (b.text, "My jacket was Idi Amin's");
55 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
56 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
59 BOOST_CHECK (j == i->lines.end ());
63 BOOST_CHECK (i != subs.end ());
64 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 0, 7, 177 * 4));
65 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 0, 11, 31 * 4));
66 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
67 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
70 list<sub::Line>::iterator j = i->lines.begin ();
71 BOOST_CHECK (j != i->lines.end ());
72 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
73 sub::Block b = j->blocks.front ();
74 BOOST_CHECK_EQUAL (b.font, "Arial");
75 BOOST_CHECK_EQUAL (b.italic, true);
76 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
77 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
78 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.21, 1);
79 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
80 BOOST_CHECK_EQUAL (b.text, "My corset was H.M. The Queen's");
81 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
82 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
85 BOOST_CHECK (j != i->lines.end ());
86 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
87 b = j->blocks.front ();
88 BOOST_CHECK_EQUAL (b.font, "Arial");
89 BOOST_CHECK_EQUAL (b.italic, false);
90 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
91 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
92 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
93 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
94 BOOST_CHECK_EQUAL (b.text, "My large wonderbra");
95 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
96 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
99 BOOST_CHECK (j == i->lines.end ());
103 BOOST_CHECK (i != subs.end ());
104 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 0, 11, 94 * 4));
105 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 0, 13, 63 * 4));
106 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
107 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
110 list<sub::Line>::iterator j = i->lines.begin ();
111 BOOST_CHECK (j != i->lines.end ());
112 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
113 sub::Block b = j->blocks.front ();
114 BOOST_CHECK_EQUAL (b.font, "Arial");
115 BOOST_CHECK_EQUAL (b.italic, false);
116 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
117 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
118 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
119 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
120 BOOST_CHECK_EQUAL (b.text, "Once belonged to the Shah");
121 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
122 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
125 BOOST_CHECK (j == i->lines.end ());
129 BOOST_CHECK (i != subs.end ());
130 BOOST_CHECK_EQUAL (i->from.metric(), sub::MetricTime (0, 0, 13, 104 * 4));
131 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 0, 15, 177 * 4));
132 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
133 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
136 list<sub::Line>::iterator j = i->lines.begin ();
137 BOOST_CHECK (j != i->lines.end ());
138 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
139 sub::Block b = j->blocks.front ();
140 BOOST_CHECK_EQUAL (b.font, "Arial");
141 BOOST_CHECK_EQUAL (b.italic, false);
142 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
143 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
144 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
145 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
146 BOOST_CHECK_EQUAL (b.text, "And these are Roy Hattersley's jeans");
147 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
148 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
151 BOOST_CHECK (j == i->lines.end ());
155 /* And another one */
156 BOOST_AUTO_TEST_CASE (dcp_reader_test2)
158 sub::DCPReader reader ("test/data/test2.xml");
159 list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
161 list<sub::Subtitle>::iterator i = subs.begin ();
162 BOOST_CHECK (i != subs.end ());
163 BOOST_CHECK_EQUAL (i->from.metric(), sub::MetricTime (0, 0, 41, 62 * 4));
164 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 0, 43, 52 * 4));
165 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
166 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
169 list<sub::Line>::iterator j = i->lines.begin ();
170 BOOST_CHECK (j != i->lines.end ());
171 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
172 sub::Block b = j->blocks.front ();
173 BOOST_CHECK_EQUAL (b.font, "Arial");
174 BOOST_CHECK_EQUAL (b.italic, true);
175 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
176 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
177 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
178 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
179 BOOST_CHECK_EQUAL (b.text, "At afternoon tea with John Peel");
180 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
181 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
184 BOOST_CHECK (j != i->lines.end ());
185 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
186 b = j->blocks.front ();
187 BOOST_CHECK_EQUAL (b.font, "Arial");
188 BOOST_CHECK_EQUAL (b.italic, true);
189 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
190 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
191 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
192 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
193 BOOST_CHECK_EQUAL (b.text, "I enquired if his accent was real");
194 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
195 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
198 BOOST_CHECK (j == i->lines.end ());
202 BOOST_CHECK (i != subs.end ());
203 BOOST_CHECK_EQUAL (i->from.metric(), sub::MetricTime (0, 0, 50, 42 * 4));
204 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 0, 52, 21 * 4));
205 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
206 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
209 list<sub::Line>::iterator j = i->lines.begin ();
210 BOOST_CHECK (j != i->lines.end ());
211 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
212 sub::Block b = j->blocks.front ();
213 BOOST_CHECK_EQUAL (b.font, "Arial");
214 BOOST_CHECK_EQUAL (b.italic, true);
215 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
216 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
217 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
218 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
219 BOOST_CHECK_EQUAL (b.text, "He said \"out of the house");
220 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
221 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
224 BOOST_CHECK (j != i->lines.end ());
225 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
226 b = j->blocks.front ();
227 BOOST_CHECK_EQUAL (b.font, "Arial");
228 BOOST_CHECK_EQUAL (b.italic, true);
229 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
230 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
231 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
232 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
233 BOOST_CHECK_EQUAL (b.text, "I'm incredibly scouse");
234 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
235 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
238 BOOST_CHECK (j == i->lines.end ());
242 BOOST_CHECK (i != subs.end ());
243 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 2, 208 * 4));
244 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 04, 10 * 4));
245 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
246 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
249 list<sub::Line>::iterator j = i->lines.begin ();
250 BOOST_CHECK (j != i->lines.end ());
251 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
252 sub::Block b = j->blocks.front ();
253 BOOST_CHECK_EQUAL (b.font, "Arial");
254 BOOST_CHECK_EQUAL (b.italic, true);
255 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
256 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
257 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
258 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
259 BOOST_CHECK_EQUAL (b.text, "At home it depends how I feel.\"");
260 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
261 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
264 BOOST_CHECK (j != i->lines.end ());
265 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
266 b = j->blocks.front ();
267 BOOST_CHECK_EQUAL (b.font, "Arial");
268 BOOST_CHECK_EQUAL (b.italic, true);
269 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
270 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
271 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 2, 208 * 4));
272 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 4, 10 * 4));
273 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
274 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
275 BOOST_CHECK_EQUAL (b.text, "I spent a long weekend in Brighton");
276 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
277 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
278 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
279 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
282 BOOST_CHECK (j == i->lines.end ());
286 BOOST_CHECK (i != subs.end ());
287 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 15, 42 * 4));
288 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 16, 42 * 4));
289 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
290 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
293 list<sub::Line>::iterator j = i->lines.begin ();
294 BOOST_CHECK (j != i->lines.end ());
295 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
296 sub::Block b = j->blocks.front ();
297 BOOST_CHECK_EQUAL (b.font, "Arial");
298 BOOST_CHECK_EQUAL (b.italic, true);
299 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
300 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
301 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
302 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
303 BOOST_CHECK_EQUAL (b.text, "With the legendary Miss Enid Blyton");
304 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
305 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
308 BOOST_CHECK (j != i->lines.end ());
309 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
310 b = j->blocks.front ();
311 BOOST_CHECK_EQUAL (b.font, "Arial");
312 BOOST_CHECK_EQUAL (b.italic, true);
313 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
314 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
315 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
316 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
317 BOOST_CHECK_EQUAL (b.text, "She said \"you be Noddy");
318 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
319 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
322 BOOST_CHECK (j == i->lines.end ());
326 BOOST_CHECK (i != subs.end ());
327 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 20, 219 * 4));
328 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 22, 73 * 4));
329 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
330 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
333 list<sub::Line>::iterator j = i->lines.begin ();
334 BOOST_CHECK (j != i->lines.end ());
335 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
336 sub::Block b = j->blocks.front ();
337 BOOST_CHECK_EQUAL (b.font, "Arial");
338 BOOST_CHECK_EQUAL (b.italic, true);
339 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
340 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
341 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
342 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
343 BOOST_CHECK_EQUAL (b.text, "and I'll show you my body\"");
344 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
345 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
348 BOOST_CHECK (j != i->lines.end ());
349 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
350 b = j->blocks.front ();
351 BOOST_CHECK_EQUAL (b.font, "Arial");
352 BOOST_CHECK_EQUAL (b.italic, true);
353 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
354 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
355 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
356 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
357 BOOST_CHECK_EQUAL (b.text, "But Big Ears kept turning the light on.");
358 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
359 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
362 BOOST_CHECK (j == i->lines.end ());
366 BOOST_CHECK (i != subs.end ());
367 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 27, 115 * 4));
368 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 28, 208 * 4));
369 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
370 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
373 list<sub::Line>::iterator j = i->lines.begin ();
374 BOOST_CHECK (j != i->lines.end ());
375 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
376 sub::Block b = j->blocks.front ();
377 BOOST_CHECK_EQUAL (b.font, "Arial");
378 BOOST_CHECK_EQUAL (b.italic, true);
379 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
380 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
381 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
382 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
383 BOOST_CHECK_EQUAL (b.text, "That curious creature the Sphinx");
384 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
385 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
388 BOOST_CHECK (j != i->lines.end ());
389 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
390 b = j->blocks.front ();
391 BOOST_CHECK_EQUAL (b.font, "Arial");
392 BOOST_CHECK_EQUAL (b.italic, true);
393 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
394 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
395 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
396 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
397 BOOST_CHECK_EQUAL (b.text, "Is smarter than anyone thinks");
398 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
399 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
402 BOOST_CHECK (j == i->lines.end ());
406 BOOST_CHECK (i != subs.end ());
407 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 42, 229 * 4));
408 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 45, 62 * 4));
409 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
410 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
413 list<sub::Line>::iterator j = i->lines.begin ();
414 BOOST_CHECK (j != i->lines.end ());
415 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
416 sub::Block b = j->blocks.front ();
417 BOOST_CHECK_EQUAL (b.font, "Arial");
418 BOOST_CHECK_EQUAL (b.italic, false);
419 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
420 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
421 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
422 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
423 BOOST_CHECK_EQUAL (b.text, "It sits there and smirks");
424 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
425 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
428 BOOST_CHECK (j != i->lines.end ());
429 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
430 b = j->blocks.front ();
431 BOOST_CHECK_EQUAL (b.font, "Arial");
432 BOOST_CHECK_EQUAL (b.italic, false);
433 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
434 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
435 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
436 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
437 BOOST_CHECK_EQUAL (b.text, "And you don't think it works");
438 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
439 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
442 BOOST_CHECK (j == i->lines.end ());
446 BOOST_CHECK (i != subs.end ());
447 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 45, 146 * 4));
448 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 47, 94 * 4));
449 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
450 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
453 list<sub::Line>::iterator j = i->lines.begin ();
454 BOOST_CHECK (j != i->lines.end ());
455 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
456 sub::Block b = j->blocks.front ();
457 BOOST_CHECK_EQUAL (b.font, "Arial");
458 BOOST_CHECK_EQUAL (b.italic, false);
459 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
460 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
461 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
462 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
463 BOOST_CHECK_EQUAL (b.text, "Then when you're not looking, it winks.");
464 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
465 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
468 BOOST_CHECK (j != i->lines.end ());
469 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
470 b = j->blocks.front ();
471 BOOST_CHECK_EQUAL (b.font, "Arial");
472 BOOST_CHECK_EQUAL (b.italic, false);
473 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
474 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
475 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
476 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
477 BOOST_CHECK_EQUAL (b.text, "When it snows you will find Sister Sledge");
478 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
479 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
482 BOOST_CHECK (j == i->lines.end ());
486 BOOST_CHECK (i != subs.end ());
487 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 47, 146 * 4));
488 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 48, 167 * 4));
489 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
490 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
493 list<sub::Line>::iterator j = i->lines.begin ();
494 BOOST_CHECK (j != i->lines.end ());
495 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
496 sub::Block b = j->blocks.front ();
497 BOOST_CHECK_EQUAL (b.font, "Arial");
498 BOOST_CHECK_EQUAL (b.italic, false);
499 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
500 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
501 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
502 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
503 BOOST_CHECK_EQUAL (b.text, "Out mooning, at night, on the ledge");
504 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
505 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
508 BOOST_CHECK (j != i->lines.end ());
509 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
510 b = j->blocks.front ();
511 BOOST_CHECK_EQUAL (b.font, "Arial");
512 BOOST_CHECK_EQUAL (b.italic, false);
513 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
514 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
515 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
516 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
517 BOOST_CHECK_EQUAL (b.text, "One storey down");
518 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
519 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
522 BOOST_CHECK (j == i->lines.end ());
526 BOOST_CHECK (i != subs.end ());
527 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 1, 53, 21 * 4));
528 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 1, 56, 10 * 4));
529 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
530 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
533 list<sub::Line>::iterator j = i->lines.begin ();
534 BOOST_CHECK (j != i->lines.end ());
535 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
536 sub::Block b = j->blocks.front ();
537 BOOST_CHECK_EQUAL (b.font, "Arial");
538 BOOST_CHECK_EQUAL (b.italic, false);
539 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
540 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
541 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
542 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
543 BOOST_CHECK_EQUAL (b.text, "Is the maestro, James Brown");
544 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
545 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
548 BOOST_CHECK (j != i->lines.end ());
549 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
550 b = j->blocks.front ();
551 BOOST_CHECK_EQUAL (b.font, "Arial");
552 BOOST_CHECK_EQUAL (b.italic, false);
553 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
554 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
555 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
556 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
557 BOOST_CHECK_EQUAL (b.text, "Displaying his meat and two veg.");
558 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
559 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
562 BOOST_CHECK (j == i->lines.end ());
566 BOOST_CHECK (i != subs.end ());
567 BOOST_CHECK_EQUAL (i->from.metric().get(), sub::MetricTime (0, 2, 5, 208 * 4));
568 BOOST_CHECK_EQUAL (i->to.metric().get(), sub::MetricTime (0, 2, 7, 31 * 4));
569 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
570 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
573 list<sub::Line>::iterator j = i->lines.begin ();
574 BOOST_CHECK (j != i->lines.end ());
575 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
576 sub::Block b = j->blocks.front ();
577 BOOST_CHECK_EQUAL (b.font, "Arial");
578 BOOST_CHECK_EQUAL (b.italic, true);
579 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
580 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
581 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
582 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
583 BOOST_CHECK_EQUAL (b.text, "HELLO");
584 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
585 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
588 BOOST_CHECK (j != i->lines.end ());
589 BOOST_CHECK_EQUAL (j->blocks.size(), 1);
590 b = j->blocks.front ();
591 BOOST_CHECK_EQUAL (b.font, "Arial");
592 BOOST_CHECK_EQUAL (b.italic, true);
593 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
594 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
595 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
596 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
597 BOOST_CHECK_EQUAL (b.text, "WORLD");
598 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
599 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
602 BOOST_CHECK (j == i->lines.end ());