Various developments.
[libsub.git] / test / dcp_reader_test.cc
1 /*
2     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
3
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.
8
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.
13
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.
17
18 */
19
20 #include "dcp_reader.h"
21 #include <boost/test/unit_test.hpp>
22 #include <fstream>
23
24 using std::list;
25 using std::cout;
26 using std::ifstream;
27 using boost::shared_ptr;
28
29 /* Test reading of a DCP XML file */
30 BOOST_AUTO_TEST_CASE (dcp_reader_test1)
31 {
32         ifstream file ("test/data/test1.xml");
33         sub::DCPReader reader (file);
34         list<sub::Subtitle> subs = reader.subtitles ();
35
36         list<sub::Subtitle>::iterator i = subs.begin ();
37
38         BOOST_CHECK (i != subs.end ());
39         BOOST_CHECK_EQUAL (i->font, "Arial");
40         BOOST_CHECK_EQUAL (i->italic, false);
41         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
42         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (39) / (72 * 11));
43         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 5, 198 * 4));
44         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 7, 115 * 4));
45         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.15, 1);
46         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::BOTTOM);
47         BOOST_CHECK_EQUAL (i->text, "My jacket was Idi Amin's");
48         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
49         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
50         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
51         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
52
53         ++i;
54         BOOST_CHECK (i != subs.end ());
55         BOOST_CHECK_EQUAL (i->font, "Arial");
56         BOOST_CHECK_EQUAL (i->italic, true);
57         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
58         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (39) / (72 * 11));
59         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 7, 177 * 4));
60         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 11, 31 * 4));
61         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.21, 1);
62         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::BOTTOM);
63         BOOST_CHECK_EQUAL (i->text, "My corset was H.M. The Queen's");
64         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
65         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
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));
68
69         ++i;
70         BOOST_CHECK (i != subs.end ());
71         BOOST_CHECK_EQUAL (i->font, "Arial");
72         BOOST_CHECK_EQUAL (i->italic, false);
73         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
74         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (39) / (72 * 11));
75         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 7, 177 * 4));
76         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 11, 31 * 4));
77         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.15, 1);
78         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::BOTTOM);
79         BOOST_CHECK_EQUAL (i->text, "My large wonderbra");
80         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
81         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
82         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
83         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
84
85         ++i;
86         BOOST_CHECK (i != subs.end ());
87         BOOST_CHECK_EQUAL (i->font, "Arial");
88         BOOST_CHECK_EQUAL (i->italic, false);
89         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
90         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (39) / (72 * 11));
91         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 11, 94 * 4));
92         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 13, 63 * 4));
93         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.15, 1);
94         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::BOTTOM);
95         BOOST_CHECK_EQUAL (i->text, "Once belonged to the Shah");
96         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
97         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
98         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
99         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
100
101         ++i;
102         BOOST_CHECK (i != subs.end ());
103         BOOST_CHECK_EQUAL (i->font, "Arial");
104         BOOST_CHECK_EQUAL (i->italic, false);
105         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
106         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (39) / (72 * 11));
107         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 13, 104 * 4));
108         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 15, 177 * 4));
109         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.15, 1);
110         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::BOTTOM);
111         BOOST_CHECK_EQUAL (i->text, "And these are Roy Hattersley's jeans");
112         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
113         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
114         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 4));
115         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 4));
116 }
117
118 /* And another one */
119 BOOST_AUTO_TEST_CASE (dcp_reader_test2)
120 {
121         ifstream file ("test/data/test2.xml");
122         sub::DCPReader reader (file);
123         list<sub::Subtitle> subs = reader.subtitles ();
124
125         list<sub::Subtitle>::iterator i = subs.begin ();
126
127         BOOST_CHECK (i != subs.end ());
128         BOOST_CHECK_EQUAL (i->font, "Arial");
129         BOOST_CHECK_EQUAL (i->italic, true);
130         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
131         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
132         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 41, 62 * 4));
133         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 43, 52 * 4));
134         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
135         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
136         BOOST_CHECK_EQUAL (i->text, "At afternoon tea with John Peel");
137         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
138         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
139         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
140         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
141
142         ++i;
143         BOOST_CHECK (i != subs.end ());
144         BOOST_CHECK_EQUAL (i->font, "Arial");
145         BOOST_CHECK_EQUAL (i->italic, true);
146         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
147         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
148         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 41, 62 * 4));
149         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 43, 52 * 4));
150         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
151         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
152         BOOST_CHECK_EQUAL (i->text, "I enquired if his accent was real");
153         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
154         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
155         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
156         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
157         
158         ++i;
159         BOOST_CHECK (i != subs.end ());
160         BOOST_CHECK_EQUAL (i->font, "Arial");
161         BOOST_CHECK_EQUAL (i->italic, true);
162         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
163         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
164         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 50, 42 * 4));
165         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 52, 21 * 4));
166         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
167         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
168         BOOST_CHECK_EQUAL (i->text, "He said \"out of the house");
169         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
170         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
171         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
172         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
173
174         ++i;
175         BOOST_CHECK (i != subs.end ());
176         BOOST_CHECK_EQUAL (i->font, "Arial");
177         BOOST_CHECK_EQUAL (i->italic, true);
178         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
179         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
180         BOOST_CHECK_EQUAL (i->from.metric, sub::MetricTime (0, 0, 50, 42 * 4));
181         BOOST_CHECK_EQUAL (i->to.metric, sub::MetricTime (0, 0, 52, 21 * 4));
182         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
183         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
184         BOOST_CHECK_EQUAL (i->text, "I'm incredibly scouse");
185         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
186         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
187         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
188         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
189
190         ++i;
191         BOOST_CHECK (i != subs.end ());
192         BOOST_CHECK_EQUAL (i->font, "Arial");
193         BOOST_CHECK_EQUAL (i->italic, true);
194         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
195         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
196         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 2, 208 * 4));
197         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 04, 10 * 4));
198         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
199         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
200         BOOST_CHECK_EQUAL (i->text, "At home it depends how I feel.\"");
201         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
202         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
203         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
204         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
205
206         ++i;
207         BOOST_CHECK (i != subs.end ());
208         BOOST_CHECK_EQUAL (i->font, "Arial");
209         BOOST_CHECK_EQUAL (i->italic, true);
210         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
211         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
212         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 2, 208 * 4));
213         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 4, 10 * 4));
214         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
215         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
216         BOOST_CHECK_EQUAL (i->text, "I spent a long weekend in Brighton");
217         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
218         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
219         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
220         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
221
222         ++i;
223         BOOST_CHECK (i != subs.end ());
224         BOOST_CHECK_EQUAL (i->font, "Arial");
225         BOOST_CHECK_EQUAL (i->italic, true);
226         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
227         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
228         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 15, 42 * 4));
229         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 16, 42 * 4));
230         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
231         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
232         BOOST_CHECK_EQUAL (i->text, "With the legendary Miss Enid Blyton");
233         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
234         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
235         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
236         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
237
238         ++i;
239         BOOST_CHECK (i != subs.end ());
240         BOOST_CHECK_EQUAL (i->font, "Arial");
241         BOOST_CHECK_EQUAL (i->italic, true);
242         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
243         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
244         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 15, 42 * 4));
245         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 16, 42 * 4));
246         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
247         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
248         BOOST_CHECK_EQUAL (i->text, "She said \"you be Noddy");
249         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
250         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
251         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
252         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
253
254         ++i;
255         BOOST_CHECK (i != subs.end ());
256         BOOST_CHECK_EQUAL (i->font, "Arial");
257         BOOST_CHECK_EQUAL (i->italic, true);
258         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
259         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
260         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 20, 219 * 4));
261         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 22, 73 * 4));
262         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
263         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
264         BOOST_CHECK_EQUAL (i->text, "and I'll show you my body\"");
265         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
266         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
267         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
268         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));   
269
270         ++i;
271         BOOST_CHECK (i != subs.end ());
272         BOOST_CHECK_EQUAL (i->font, "Arial");
273         BOOST_CHECK_EQUAL (i->italic, true);
274         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
275         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
276         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 20, 219 * 4));
277         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 22, 73 * 4));
278         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
279         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
280         BOOST_CHECK_EQUAL (i->text, "But Big Ears kept turning the light on.");
281         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
282         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
283         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
284         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
285         
286         ++i;
287         BOOST_CHECK (i != subs.end ());
288         BOOST_CHECK_EQUAL (i->font, "Arial");
289         BOOST_CHECK_EQUAL (i->italic, true);
290         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
291         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
292         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 27, 115 * 4));
293         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 28, 208 * 4));
294         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
295         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
296         BOOST_CHECK_EQUAL (i->text, "That curious creature the Sphinx");
297         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
298         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
299         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
300         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
301
302         ++i;
303         BOOST_CHECK (i != subs.end ());
304         BOOST_CHECK_EQUAL (i->font, "Arial");
305         BOOST_CHECK_EQUAL (i->italic, true);
306         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
307         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
308         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 27, 115 * 4));
309         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 28, 208 * 4));
310         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
311         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
312         BOOST_CHECK_EQUAL (i->text, "Is smarter than anyone thinks");
313         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
314         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
315         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
316         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
317
318         ++i;
319         BOOST_CHECK (i != subs.end ());
320         BOOST_CHECK_EQUAL (i->font, "Arial");
321         BOOST_CHECK_EQUAL (i->italic, false);
322         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
323         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
324         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 42, 229 * 4));
325         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 45, 62 * 4));
326         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
327         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
328         BOOST_CHECK_EQUAL (i->text, "It sits there and smirks");
329         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
330         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
331         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
332         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
333
334         ++i;
335         BOOST_CHECK (i != subs.end ());
336         BOOST_CHECK_EQUAL (i->font, "Arial");
337         BOOST_CHECK_EQUAL (i->italic, false);
338         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
339         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
340         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 42, 229 * 4));
341         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 45, 62 * 4));
342         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
343         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
344         BOOST_CHECK_EQUAL (i->text, "And you don't think it works");
345         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
346         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
347         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
348         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
349
350         ++i;
351         BOOST_CHECK (i != subs.end ());
352         BOOST_CHECK_EQUAL (i->font, "Arial");
353         BOOST_CHECK_EQUAL (i->italic, false);
354         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
355         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
356         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 45, 146 * 4));
357         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 47, 94 * 4));
358         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
359         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
360         BOOST_CHECK_EQUAL (i->text, "Then when you're not looking, it winks.");
361         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
362         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
363         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
364         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
365
366         ++i;
367         BOOST_CHECK (i != subs.end ());
368         BOOST_CHECK_EQUAL (i->font, "Arial");
369         BOOST_CHECK_EQUAL (i->italic, false);
370         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
371         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
372         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 45, 146 * 4));
373         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 47, 94 * 4));
374         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
375         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
376         BOOST_CHECK_EQUAL (i->text, "When it snows you will find Sister Sledge");
377         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
378         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
379         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
380         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
381
382         ++i;
383         BOOST_CHECK (i != subs.end ());
384         BOOST_CHECK_EQUAL (i->font, "Arial");
385         BOOST_CHECK_EQUAL (i->italic, false);
386         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
387         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
388         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 47, 146 * 4));
389         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 48, 167 * 4));
390         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
391         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
392         BOOST_CHECK_EQUAL (i->text, "Out mooning, at night, on the ledge");
393         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
394         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
395         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
396         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
397
398         ++i;
399         BOOST_CHECK (i != subs.end ());
400         BOOST_CHECK_EQUAL (i->font, "Arial");
401         BOOST_CHECK_EQUAL (i->italic, false);
402         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
403         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
404         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 47, 146 * 4));
405         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 48, 167 * 4));
406         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
407         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
408         BOOST_CHECK_EQUAL (i->text, "One storey down");
409         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
410         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
411         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
412         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
413
414         ++i;
415         BOOST_CHECK (i != subs.end ());
416         BOOST_CHECK_EQUAL (i->font, "Arial");
417         BOOST_CHECK_EQUAL (i->italic, false);
418         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
419         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
420         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 53, 21 * 4));
421         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 56, 10 * 4));
422         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
423         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
424         BOOST_CHECK_EQUAL (i->text, "Is the maestro, James Brown");
425         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
426         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
427         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
428         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
429
430         ++i;
431         BOOST_CHECK (i != subs.end ());
432         BOOST_CHECK_EQUAL (i->font, "Arial");
433         BOOST_CHECK_EQUAL (i->italic, false);
434         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
435         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
436         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 1, 53, 21 * 4));
437         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 1, 56, 10 * 4));
438         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
439         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
440         BOOST_CHECK_EQUAL (i->text, "Displaying his meat and two veg.");
441         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
442         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
443         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
444         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
445         
446         ++i;
447         BOOST_CHECK (i != subs.end ());
448         BOOST_CHECK_EQUAL (i->font, "Arial");
449         BOOST_CHECK_EQUAL (i->italic, true);
450         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
451         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
452         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 2, 5, 208 * 4));
453         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 2, 7, 31 * 4));
454         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.89, 1);
455         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
456         BOOST_CHECK_EQUAL (i->text, "HELLO");
457         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
458         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
459         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
460         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
461
462         ++i;
463         BOOST_CHECK (i != subs.end ());
464         BOOST_CHECK_EQUAL (i->font, "Arial");
465         BOOST_CHECK_EQUAL (i->italic, true);
466         BOOST_CHECK (i->colour == sub::Colour (1, 1, 1));
467         BOOST_CHECK_EQUAL (i->font_size.proportional.get(), float (42) / (72 * 11));
468         BOOST_CHECK_EQUAL (i->from.metric.get(), sub::MetricTime (0, 2, 5, 208 * 4));
469         BOOST_CHECK_EQUAL (i->to.metric.get(), sub::MetricTime (0, 2, 7, 31 * 4));
470         BOOST_CHECK_CLOSE (i->vertical_position.proportional.get(), 0.95, 1);
471         BOOST_CHECK_EQUAL (i->vertical_position.reference.get(), sub::TOP);
472         BOOST_CHECK_EQUAL (i->text, "WORLD");
473         BOOST_CHECK_EQUAL (i->effect, sub::BORDER);
474         BOOST_CHECK (i->effect_colour.get() == sub::Colour (0, 0, 0));
475         BOOST_CHECK_EQUAL (i->fade_up.get(), sub::MetricTime (0, 0, 0, 0));
476         BOOST_CHECK_EQUAL (i->fade_down.get(), sub::MetricTime (0, 0, 0, 0));
477 }