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 "interop_dcp_reader.h"
22 #include <boost/test/unit_test.hpp>
23 #include <boost/optional/optional_io.hpp>
30 using boost::shared_ptr;
32 /* Test reading of a DCP XML file */
33 BOOST_AUTO_TEST_CASE (dcp_reader_test1)
35 sub::InteropDCPReader reader ("test/data/test1.xml");
36 list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
38 list<sub::Subtitle>::iterator i = subs.begin ();
39 BOOST_REQUIRE (i != subs.end ());
40 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 5, 198 * 4));
41 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 7, 115 * 4));
42 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
43 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
46 list<sub::Line>::iterator j = i->lines.begin ();
47 BOOST_REQUIRE (j != i->lines.end ());
48 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
49 sub::Block b = j->blocks.front ();
50 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
51 BOOST_CHECK_EQUAL (b.italic, false);
52 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
53 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
54 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
55 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
56 BOOST_CHECK_EQUAL (b.text, "My jacket was Idi Amin's");
57 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
58 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
61 BOOST_REQUIRE (j == i->lines.end ());
65 BOOST_REQUIRE (i != subs.end ());
66 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 7, 177 * 4));
67 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 11, 31 * 4));
68 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
69 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
72 list<sub::Line>::iterator j = i->lines.begin ();
73 BOOST_REQUIRE (j != i->lines.end ());
74 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
75 sub::Block b = j->blocks.front ();
76 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
77 BOOST_CHECK_EQUAL (b.italic, true);
78 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
79 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
80 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.21, 1);
81 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
82 BOOST_CHECK_EQUAL (b.text, "My corset was H.M. The Queen's");
83 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
84 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
87 BOOST_REQUIRE (j != i->lines.end ());
88 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
89 b = j->blocks.front ();
90 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
91 BOOST_CHECK_EQUAL (b.italic, false);
92 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
93 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
94 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
95 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
96 BOOST_CHECK_EQUAL (b.text, "My large wonderbra");
97 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
98 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
101 BOOST_REQUIRE (j == i->lines.end ());
105 BOOST_REQUIRE (i != subs.end ());
106 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 11, 94 * 4));
107 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 13, 63 * 4));
108 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
109 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
112 list<sub::Line>::iterator j = i->lines.begin ();
113 BOOST_REQUIRE (j != i->lines.end ());
114 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
115 sub::Block b = j->blocks.front ();
116 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
117 BOOST_CHECK_EQUAL (b.italic, false);
118 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
119 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
120 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
121 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
122 BOOST_CHECK_EQUAL (b.text, "Once belonged to the Shah");
123 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
124 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
127 BOOST_REQUIRE (j == i->lines.end ());
131 BOOST_REQUIRE (i != subs.end ());
132 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 13, 104 * 4));
133 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 15, 177 * 4));
134 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 4));
135 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 4));
138 list<sub::Line>::iterator j = i->lines.begin ();
139 BOOST_REQUIRE (j != i->lines.end ());
140 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
141 sub::Block b = j->blocks.front ();
142 BOOST_CHECK_EQUAL (b.font.get(), "theFontId");
143 BOOST_CHECK_EQUAL (b.italic, false);
144 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
145 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (39) / (72 * 11));
146 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.15, 1);
147 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::BOTTOM_OF_SCREEN);
148 BOOST_CHECK_EQUAL (b.text, "And these are Roy Hattersley's jeans");
149 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
150 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
153 BOOST_REQUIRE (j == i->lines.end ());
157 /* And another one */
158 BOOST_AUTO_TEST_CASE (dcp_reader_test2)
160 sub::InteropDCPReader reader ("test/data/test2.xml");
161 list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
163 list<sub::Subtitle>::iterator i = subs.begin ();
164 BOOST_REQUIRE (i != subs.end ());
165 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 41, 62 * 4));
166 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 43, 52 * 4));
167 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
168 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
171 list<sub::Line>::iterator j = i->lines.begin ();
172 BOOST_REQUIRE (j != i->lines.end ());
173 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
174 sub::Block b = j->blocks.front ();
175 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
176 BOOST_CHECK_EQUAL (b.italic, true);
177 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
178 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
179 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
180 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
181 BOOST_CHECK_EQUAL (b.text, "At afternoon tea with John Peel");
182 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
183 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
186 BOOST_REQUIRE (j != i->lines.end ());
187 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
188 b = j->blocks.front ();
189 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
190 BOOST_CHECK_EQUAL (b.italic, true);
191 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
192 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
193 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
194 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
195 BOOST_CHECK_EQUAL (b.text, "I enquired if his accent was real");
196 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
197 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
200 BOOST_CHECK (j == i->lines.end ());
204 BOOST_REQUIRE (i != subs.end ());
205 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 0, 50, 42 * 4));
206 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 0, 52, 21 * 4));
207 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
208 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
211 list<sub::Line>::iterator j = i->lines.begin ();
212 BOOST_REQUIRE (j != i->lines.end ());
213 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
214 sub::Block b = j->blocks.front ();
215 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
216 BOOST_CHECK_EQUAL (b.italic, true);
217 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
218 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
219 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
220 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
221 BOOST_CHECK_EQUAL (b.text, "He said \"out of the house");
222 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
223 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
226 BOOST_REQUIRE (j != i->lines.end ());
227 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
228 b = j->blocks.front ();
229 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
230 BOOST_CHECK_EQUAL (b.italic, true);
231 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
232 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
233 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
234 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
235 BOOST_CHECK_EQUAL (b.text, "I'm incredibly scouse");
236 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
237 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
240 BOOST_CHECK (j == i->lines.end ());
244 BOOST_REQUIRE (i != subs.end ());
245 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 2, 208 * 4));
246 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 04, 10 * 4));
247 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
248 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
251 list<sub::Line>::iterator j = i->lines.begin ();
252 BOOST_REQUIRE (j != i->lines.end ());
253 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
254 sub::Block b = j->blocks.front ();
255 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
256 BOOST_CHECK_EQUAL (b.italic, true);
257 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
258 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
259 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
260 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
261 BOOST_CHECK_EQUAL (b.text, "At home it depends how I feel.\"");
262 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
263 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
266 BOOST_REQUIRE (j != i->lines.end ());
267 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
268 b = j->blocks.front ();
269 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
270 BOOST_CHECK_EQUAL (b.italic, true);
271 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
272 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
273 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 2, 208 * 4));
274 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 4, 10 * 4));
275 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
276 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
277 BOOST_CHECK_EQUAL (b.text, "I spent a long weekend in Brighton");
278 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
279 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
280 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
281 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
284 BOOST_CHECK (j == i->lines.end ());
288 BOOST_REQUIRE (i != subs.end ());
289 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 15, 42 * 4));
290 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 16, 42 * 4));
291 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
292 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
295 list<sub::Line>::iterator j = i->lines.begin ();
296 BOOST_REQUIRE (j != i->lines.end ());
297 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
298 sub::Block b = j->blocks.front ();
299 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
300 BOOST_CHECK_EQUAL (b.italic, true);
301 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
302 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
303 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
304 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
305 BOOST_CHECK_EQUAL (b.text, "With the legendary Miss Enid Blyton");
306 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
307 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
310 BOOST_REQUIRE (j != i->lines.end ());
311 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
312 b = j->blocks.front ();
313 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
314 BOOST_CHECK_EQUAL (b.italic, true);
315 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
316 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
317 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
318 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
319 BOOST_CHECK_EQUAL (b.text, "She said \"you be Noddy");
320 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
321 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
324 BOOST_CHECK (j == i->lines.end ());
328 BOOST_REQUIRE (i != subs.end ());
329 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 20, 219 * 4));
330 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 22, 73 * 4));
331 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
332 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
335 list<sub::Line>::iterator j = i->lines.begin ();
336 BOOST_REQUIRE (j != i->lines.end ());
337 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
338 sub::Block b = j->blocks.front ();
339 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
340 BOOST_CHECK_EQUAL (b.italic, true);
341 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
342 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
343 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
344 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
345 BOOST_CHECK_EQUAL (b.text, "and I'll show you my body\"");
346 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
347 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
350 BOOST_REQUIRE (j != i->lines.end ());
351 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
352 b = j->blocks.front ();
353 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
354 BOOST_CHECK_EQUAL (b.italic, true);
355 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
356 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
357 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
358 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
359 BOOST_CHECK_EQUAL (b.text, "But Big Ears kept turning the light on.");
360 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
361 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
364 BOOST_CHECK (j == i->lines.end ());
368 BOOST_REQUIRE (i != subs.end ());
369 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 27, 115 * 4));
370 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 28, 208 * 4));
371 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
372 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
375 list<sub::Line>::iterator j = i->lines.begin ();
376 BOOST_REQUIRE (j != i->lines.end ());
377 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
378 sub::Block b = j->blocks.front ();
379 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
380 BOOST_CHECK_EQUAL (b.italic, true);
381 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
382 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
383 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
384 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
385 BOOST_CHECK_EQUAL (b.text, "That curious creature the Sphinx");
386 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
387 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
390 BOOST_REQUIRE (j != i->lines.end ());
391 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
392 b = j->blocks.front ();
393 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
394 BOOST_CHECK_EQUAL (b.italic, true);
395 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
396 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
397 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
398 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
399 BOOST_CHECK_EQUAL (b.text, "Is smarter than anyone thinks");
400 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
401 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
404 BOOST_CHECK (j == i->lines.end ());
408 BOOST_REQUIRE (i != subs.end ());
409 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 42, 229 * 4));
410 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 45, 62 * 4));
411 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
412 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
415 list<sub::Line>::iterator j = i->lines.begin ();
416 BOOST_REQUIRE (j != i->lines.end ());
417 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
418 sub::Block b = j->blocks.front ();
419 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
420 BOOST_CHECK_EQUAL (b.italic, false);
421 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
422 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
423 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
424 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
425 BOOST_CHECK_EQUAL (b.text, "It sits there and smirks");
426 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
427 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
430 BOOST_REQUIRE (j != i->lines.end ());
431 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
432 b = j->blocks.front ();
433 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
434 BOOST_CHECK_EQUAL (b.italic, false);
435 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
436 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
437 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
438 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
439 BOOST_CHECK_EQUAL (b.text, "And you don't think it works");
440 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
441 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
444 BOOST_CHECK (j == i->lines.end ());
448 BOOST_REQUIRE (i != subs.end ());
449 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 45, 146 * 4));
450 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 47, 94 * 4));
451 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
452 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
455 list<sub::Line>::iterator j = i->lines.begin ();
456 BOOST_REQUIRE (j != i->lines.end ());
457 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
458 sub::Block b = j->blocks.front ();
459 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
460 BOOST_CHECK_EQUAL (b.italic, false);
461 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
462 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
463 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
464 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
465 BOOST_CHECK_EQUAL (b.text, "Then when you're not looking, it winks.");
466 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
467 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
470 BOOST_REQUIRE (j != i->lines.end ());
471 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
472 b = j->blocks.front ();
473 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
474 BOOST_CHECK_EQUAL (b.italic, false);
475 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
476 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
477 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
478 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
479 BOOST_CHECK_EQUAL (b.text, "When it snows you will find Sister Sledge");
480 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
481 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
484 BOOST_CHECK (j == i->lines.end ());
488 BOOST_REQUIRE (i != subs.end ());
489 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 47, 146 * 4));
490 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 48, 167 * 4));
491 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
492 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
495 list<sub::Line>::iterator j = i->lines.begin ();
496 BOOST_REQUIRE (j != i->lines.end ());
497 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
498 sub::Block b = j->blocks.front ();
499 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
500 BOOST_CHECK_EQUAL (b.italic, false);
501 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
502 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
503 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
504 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
505 BOOST_CHECK_EQUAL (b.text, "Out mooning, at night, on the ledge");
506 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
507 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
510 BOOST_REQUIRE (j != i->lines.end ());
511 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
512 b = j->blocks.front ();
513 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
514 BOOST_CHECK_EQUAL (b.italic, false);
515 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
516 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
517 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
518 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
519 BOOST_CHECK_EQUAL (b.text, "One storey down");
520 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
521 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
524 BOOST_CHECK (j == i->lines.end ());
528 BOOST_REQUIRE (i != subs.end ());
529 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 1, 53, 21 * 4));
530 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 1, 56, 10 * 4));
531 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
532 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
535 list<sub::Line>::iterator j = i->lines.begin ();
536 BOOST_REQUIRE (j != i->lines.end ());
537 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
538 sub::Block b = j->blocks.front ();
539 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
540 BOOST_CHECK_EQUAL (b.italic, false);
541 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
542 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
543 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
544 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
545 BOOST_CHECK_EQUAL (b.text, "Is the maestro, James Brown");
546 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
547 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
550 BOOST_REQUIRE (j != i->lines.end ());
551 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
552 b = j->blocks.front ();
553 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
554 BOOST_CHECK_EQUAL (b.italic, false);
555 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
556 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
557 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
558 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
559 BOOST_CHECK_EQUAL (b.text, "Displaying his meat and two veg.");
560 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
561 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
564 BOOST_CHECK (j == i->lines.end ());
568 BOOST_REQUIRE (i != subs.end ());
569 BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 2, 5, 208 * 4));
570 BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 2, 7, 31 * 4));
571 BOOST_CHECK_EQUAL (i->fade_up.get(), sub::Time::from_hms (0, 0, 0, 0));
572 BOOST_CHECK_EQUAL (i->fade_down.get(), sub::Time::from_hms (0, 0, 0, 0));
575 list<sub::Line>::iterator j = i->lines.begin ();
576 BOOST_REQUIRE (j != i->lines.end ());
577 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
578 sub::Block b = j->blocks.front ();
579 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
580 BOOST_CHECK_EQUAL (b.italic, true);
581 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
582 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
583 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.89, 1);
584 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
585 BOOST_CHECK_EQUAL (b.text, "HELLO");
586 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
587 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
590 BOOST_REQUIRE (j != i->lines.end ());
591 BOOST_REQUIRE_EQUAL (j->blocks.size(), 1);
592 b = j->blocks.front ();
593 BOOST_CHECK_EQUAL (b.font.get(), "theFont");
594 BOOST_CHECK_EQUAL (b.italic, true);
595 BOOST_CHECK (b.colour == sub::Colour (1, 1, 1));
596 BOOST_CHECK_EQUAL (b.font_size.proportional().get(), float (42) / (72 * 11));
597 BOOST_CHECK_CLOSE (j->vertical_position.proportional.get(), 0.95, 1);
598 BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SCREEN);
599 BOOST_CHECK_EQUAL (b.text, "WORLD");
600 BOOST_CHECK_EQUAL (b.effect, sub::BORDER);
601 BOOST_CHECK (b.effect_colour.get() == sub::Colour (0, 0, 0));
604 BOOST_CHECK (j == i->lines.end ());