SubtitleString -> shared_ptr<Subtitle>
[libdcp.git] / test / read_interop_subtitle_test.cc
1 /*
2     Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
3
4     This file is part of libdcp.
5
6     libdcp is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     libdcp is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "interop_subtitle_asset.h"
21 #include "interop_load_font_node.h"
22 #include "subtitle_string.h"
23 #include <boost/test/unit_test.hpp>
24
25 using std::list;
26 using std::string;
27 using boost::shared_ptr;
28 using boost::dynamic_pointer_cast;
29
30 /** Load some subtitle content from Interop XML and check that it is read correctly */
31 BOOST_AUTO_TEST_CASE (read_interop_subtitle_test1)
32 {
33         dcp::InteropSubtitleAsset subs ("test/data/subs1.xml");
34
35         BOOST_CHECK_EQUAL (subs.id(), "cab5c268-222b-41d2-88ae-6d6999441b17");
36         BOOST_CHECK_EQUAL (subs.movie_title(), "Movie Title");
37         BOOST_CHECK_EQUAL (subs.reel_number(), "1");
38         BOOST_CHECK_EQUAL (subs.language(), "French");
39
40         list<shared_ptr<dcp::LoadFontNode> > lfn = subs.load_font_nodes ();
41         BOOST_REQUIRE_EQUAL (lfn.size(), 1);
42         shared_ptr<dcp::InteropLoadFontNode> interop_lfn = dynamic_pointer_cast<dcp::InteropLoadFontNode> (lfn.front ());
43         BOOST_REQUIRE (interop_lfn);
44         BOOST_CHECK_EQUAL (interop_lfn->id, "theFontId");
45         BOOST_CHECK_EQUAL (interop_lfn->uri, "arial.ttf");
46
47         list<shared_ptr<dcp::Subtitle> > s = subs.subtitles_during (dcp::Time (0, 0, 6, 1, 250), dcp::Time (0, 0, 6, 2, 250), false);
48         BOOST_REQUIRE_EQUAL (s.size(), 1);
49         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
50         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
51                                    string ("theFontId"),
52                                    false,
53                                    false,
54                                    false,
55                                    dcp::Colour (255, 255, 255),
56                                    39,
57                                    1.0,
58                                    dcp::Time (0, 0, 5, 198, 250),
59                                    dcp::Time (0, 0, 7, 115, 250),
60                                    0,
61                                    dcp::HALIGN_CENTER,
62                                    0.15,
63                                    dcp::VALIGN_BOTTOM,
64                                    dcp::DIRECTION_LTR,
65                                    "My jacket was Idi Amin's",
66                                    dcp::BORDER,
67                                    dcp::Colour (0, 0, 0),
68                                    dcp::Time (0, 0, 0, 1, 250),
69                                    dcp::Time (0, 0, 0, 1, 250)
70                                    ));
71
72         s = subs.subtitles_during (dcp::Time (0, 0, 7, 190, 250), dcp::Time (0, 0, 7, 191, 250), false);
73         BOOST_REQUIRE_EQUAL (s.size(), 2);
74         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
75         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
76                                    string ("theFontId"),
77                                    true,
78                                    false,
79                                    false,
80                                    dcp::Colour (255, 255, 255),
81                                    39,
82                                    1.0,
83                                    dcp::Time (0, 0, 7, 177, 250),
84                                    dcp::Time (0, 0, 11, 31, 250),
85                                    0,
86                                    dcp::HALIGN_CENTER,
87                                    0.21,
88                                    dcp::VALIGN_BOTTOM,
89                                    dcp::DIRECTION_LTR,
90                                    "My corset was H.M. The Queen's",
91                                    dcp::BORDER,
92                                    dcp::Colour (0, 0, 0),
93                                    dcp::Time (0, 0, 0, 1, 250),
94                                    dcp::Time (0, 0, 0, 1, 250)
95                                    ));
96         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
97         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
98                                    string ("theFontId"),
99                                    false,
100                                    false,
101                                    false,
102                                    dcp::Colour (255, 255, 255),
103                                    39,
104                                    1.0,
105                                    dcp::Time (0, 0, 7, 177, 250),
106                                    dcp::Time (0, 0, 11, 31, 250),
107                                    0,
108                                    dcp::HALIGN_CENTER,
109                                    0.15,
110                                    dcp::VALIGN_BOTTOM,
111                                    dcp::DIRECTION_LTR,
112                                    "My large wonderbra",
113                                    dcp::BORDER,
114                                    dcp::Colour (0, 0, 0),
115                                    dcp::Time (0, 0, 0, 1, 250),
116                                    dcp::Time (0, 0, 0, 1, 250)
117                                    ));
118
119         s = subs.subtitles_during (dcp::Time (0, 0, 11, 95, 250), dcp::Time (0, 0, 11, 96, 250), false);
120         BOOST_REQUIRE_EQUAL (s.size(), 1);
121         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
122         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
123                                    string ("theFontId"),
124                                    false,
125                                    false,
126                                    false,
127                                    dcp::Colour (255, 255, 255),
128                                    39,
129                                    1.0,
130                                    dcp::Time (0, 0, 11, 94, 250),
131                                    dcp::Time (0, 0, 13, 63, 250),
132                                    0,
133                                    dcp::HALIGN_CENTER,
134                                    0.15,
135                                    dcp::VALIGN_BOTTOM,
136                                    dcp::DIRECTION_LTR,
137                                    "Once belonged to the Shah",
138                                    dcp::BORDER,
139                                    dcp::Colour (0, 0, 0),
140                                    dcp::Time (0, 0, 0, 1, 250),
141                                    dcp::Time (0, 0, 0, 1, 250)
142                                    ));
143
144         s = subs.subtitles_during (dcp::Time (0, 0, 14, 42, 250), dcp::Time (0, 0, 14, 43, 250), false);
145         BOOST_REQUIRE_EQUAL (s.size(), 1);
146         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
147         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
148                                    string ("theFontId"),
149                                    false,
150                                    true,
151                                    true,
152                                    dcp::Colour (255, 255, 255),
153                                    39,
154                                    1.0,
155                                    dcp::Time (0, 0, 13, 104, 250),
156                                    dcp::Time (0, 0, 15, 177, 250),
157                                    0,
158                                    dcp::HALIGN_CENTER,
159                                    0.15,
160                                    dcp::VALIGN_BOTTOM,
161                                    dcp::DIRECTION_LTR,
162                                    "And these are Roy Hattersley's jeans",
163                                    dcp::BORDER,
164                                    dcp::Colour (0, 0, 0),
165                                    dcp::Time (0, 0, 0, 1, 250),
166                                    dcp::Time (0, 0, 0, 1, 250)
167                                    ));
168 }
169
170 /** And similarly for another one */
171 BOOST_AUTO_TEST_CASE (read_interop_subtitle_test2)
172 {
173         dcp::InteropSubtitleAsset subs ("test/data/subs2.xml");
174
175         list<shared_ptr<dcp::Subtitle> > s = subs.subtitles_during (dcp::Time (0, 0, 42, 100, 250), dcp::Time (0, 0, 42, 101, 250), false);
176         BOOST_REQUIRE_EQUAL (s.size(), 2);
177         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
178         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
179                                    string ("theFont"),
180                                    true,
181                                    false,
182                                    false,
183                                    dcp::Colour (255, 255, 255),
184                                    42,
185                                    1.0,
186                                    dcp::Time (0, 0, 41, 62, 250),
187                                    dcp::Time (0, 0, 43, 52, 250),
188                                    0,
189                                    dcp::HALIGN_CENTER,
190                                    0.89,
191                                    dcp::VALIGN_TOP,
192                                    dcp::DIRECTION_LTR,
193                                    "At afternoon tea with John Peel",
194                                    dcp::BORDER,
195                                    dcp::Colour (0, 0, 0),
196                                    dcp::Time (0, 0, 0, 0, 250),
197                                    dcp::Time (0, 0, 0, 0, 250)
198                                    ));
199         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
200         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
201                                    string ("theFont"),
202                                    true,
203                                    false,
204                                    false,
205                                    dcp::Colour (255, 255, 255),
206                                    42,
207                                    1.0,
208                                    dcp::Time (0, 0, 41, 62, 250),
209                                    dcp::Time (0, 0, 43, 52, 250),
210                                    0,
211                                    dcp::HALIGN_CENTER,
212                                    0.95,
213                                    dcp::VALIGN_TOP,
214                                    dcp::DIRECTION_LTR,
215                                    "I enquired if his accent was real",
216                                    dcp::BORDER,
217                                    dcp::Colour (0, 0, 0),
218                                    dcp::Time (0, 0, 0, 0, 250),
219                                    dcp::Time (0, 0, 0, 0, 250)
220                                    ));
221
222         s = subs.subtitles_during (dcp::Time (0, 0, 50, 50, 250), dcp::Time (0, 0, 50, 51, 250), false);
223         BOOST_REQUIRE_EQUAL (s.size(), 2);
224         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
225         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
226                                    string ("theFont"),
227                                    true,
228                                    false,
229                                    false,
230                                    dcp::Colour (255, 255, 255),
231                                    42,
232                                    1.0,
233                                    dcp::Time (0, 0, 50, 42, 250),
234                                    dcp::Time (0, 0, 52, 21, 250),
235                                    0,
236                                    dcp::HALIGN_CENTER,
237                                    0.89,
238                                    dcp::VALIGN_TOP,
239                                    dcp::DIRECTION_LTR,
240                                    "He said \"out of the house",
241                                    dcp::BORDER,
242                                    dcp::Colour (0, 0, 0),
243                                    dcp::Time (0, 0, 0, 0, 250),
244                                    dcp::Time (0, 0, 0, 0, 250)
245                                    ));
246         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
247         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
248                                    string ("theFont"),
249                                    true,
250                                    false,
251                                    false,
252                                    dcp::Colour (255, 255, 255),
253                                    42,
254                                    1.0,
255                                    dcp::Time (0, 0, 50, 42, 250),
256                                    dcp::Time (0, 0, 52, 21, 250),
257                                    0,
258                                    dcp::HALIGN_CENTER,
259                                    0.95,
260                                    dcp::VALIGN_TOP,
261                                    dcp::DIRECTION_LTR,
262                                    "I'm incredibly scouse",
263                                    dcp::BORDER,
264                                    dcp::Colour (0, 0, 0),
265                                    dcp::Time (0, 0, 0, 0, 250),
266                                    dcp::Time (0, 0, 0, 0, 250)
267                                    ));
268
269         s = subs.subtitles_during (dcp::Time (0, 1, 2, 300, 250), dcp::Time (0, 1, 2, 301, 250), false);
270         BOOST_REQUIRE_EQUAL (s.size(), 2);
271         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
272         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
273                                    string ("theFont"),
274                                    true,
275                                    false,
276                                    false,
277                                    dcp::Colour (255, 255, 255),
278                                    42,
279                                    1.0,
280                                    dcp::Time (0, 1, 2, 208, 250),
281                                    dcp::Time (0, 1, 4, 10, 250),
282                                    0,
283                                    dcp::HALIGN_CENTER,
284                                    0.89,
285                                    dcp::VALIGN_TOP,
286                                    dcp::DIRECTION_LTR,
287                                    "At home it depends how I feel.\"",
288                                    dcp::BORDER,
289                                    dcp::Colour (0, 0, 0),
290                                    dcp::Time (0, 0, 0, 0, 250),
291                                    dcp::Time (0, 0, 0, 0, 250)
292                                    ));
293         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
294         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
295                                    string ("theFont"),
296                                    true,
297                                    false,
298                                    false,
299                                    dcp::Colour (255, 255, 255),
300                                    42,
301                                    1.0,
302                                    dcp::Time (0, 1, 2, 208, 250),
303                                    dcp::Time (0, 1, 4, 10, 250),
304                                    0,
305                                    dcp::HALIGN_CENTER,
306                                    0.95,
307                                    dcp::VALIGN_TOP,
308                                    dcp::DIRECTION_LTR,
309                                    "I spent a long weekend in Brighton",
310                                    dcp::BORDER,
311                                    dcp::Colour (0, 0, 0),
312                                    dcp::Time (0, 0, 0, 0, 250),
313                                    dcp::Time (0, 0, 0, 0, 250)
314                                    ));
315
316         s = subs.subtitles_during (dcp::Time (0, 1, 15, 50, 250), dcp::Time (0, 1, 15, 51, 250), false);
317         BOOST_REQUIRE_EQUAL (s.size(), 2);
318         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
319         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
320                                    string ("theFont"),
321                                    true,
322                                    false,
323                                    false,
324                                    dcp::Colour (255, 255, 255),
325                                    42,
326                                    1.0,
327                                    dcp::Time (0, 1, 15, 42, 250),
328                                    dcp::Time (0, 1, 16, 42, 250),
329                                    0,
330                                    dcp::HALIGN_CENTER,
331                                    0.89,
332                                    dcp::VALIGN_TOP,
333                                    dcp::DIRECTION_RTL,
334                                    "With the legendary Miss Enid Blyton",
335                                    dcp::BORDER,
336                                    dcp::Colour (0, 0, 0),
337                                    dcp::Time (0, 0, 0, 0, 250),
338                                    dcp::Time (0, 0, 0, 0, 250)
339                                    ));
340         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
341         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
342                                    string ("theFont"),
343                                    true,
344                                    false,
345                                    false,
346                                    dcp::Colour (255, 255, 255),
347                                    42,
348                                    1.0,
349                                    dcp::Time (0, 1, 15, 42, 250),
350                                    dcp::Time (0, 1, 16, 42, 250),
351                                    0,
352                                    dcp::HALIGN_CENTER,
353                                    0.95,
354                                    dcp::VALIGN_TOP,
355                                    dcp::DIRECTION_TTB,
356                                    "She said \"you be Noddy",
357                                    dcp::BORDER,
358                                    dcp::Colour (0, 0, 0),
359                                    dcp::Time (0, 0, 0, 0, 250),
360                                    dcp::Time (0, 0, 0, 0, 250)
361                                    ));
362
363         s = subs.subtitles_during (dcp::Time (0, 1, 27, 200, 250), dcp::Time (0, 1, 27, 201, 250), false);
364         BOOST_REQUIRE_EQUAL (s.size(), 2);
365         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
366         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
367                                    string ("theFont"),
368                                    true,
369                                    false,
370                                    false,
371                                    dcp::Colour (255, 255, 255),
372                                    42,
373                                    1.0,
374                                    dcp::Time (0, 1, 27, 115, 250),
375                                    dcp::Time (0, 1, 28, 208, 250),
376                                    0,
377                                    dcp::HALIGN_CENTER,
378                                    0.89,
379                                    dcp::VALIGN_TOP,
380                                    dcp::DIRECTION_BTT,
381                                    "That curious creature the Sphinx",
382                                    dcp::BORDER,
383                                    dcp::Colour (0, 0, 0),
384                                    dcp::Time (0, 0, 0, 0, 250),
385                                    dcp::Time (0, 0, 0, 0, 250)
386                                    ));
387         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
388         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
389                                    string ("theFont"),
390                                    true,
391                                    false,
392                                    false,
393                                    dcp::Colour (255, 255, 255),
394                                    42,
395                                    1.0,
396                                    dcp::Time (0, 1, 27, 115, 250),
397                                    dcp::Time (0, 1, 28, 208, 250),
398                                    0,
399                                    dcp::HALIGN_CENTER,
400                                    0.95,
401                                    dcp::VALIGN_TOP,
402                                    dcp::DIRECTION_LTR,
403                                    "Is smarter than anyone thinks",
404                                    dcp::BORDER,
405                                    dcp::Colour (0, 0, 0),
406                                    dcp::Time (0, 0, 0, 0, 250),
407                                    dcp::Time (0, 0, 0, 0, 250)
408                                    ));
409
410         s = subs.subtitles_during (dcp::Time (0, 1, 42, 300, 250), dcp::Time (0, 1, 42, 301, 250), false);
411         BOOST_REQUIRE_EQUAL (s.size(), 2);
412         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
413         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
414                                    string ("theFont"),
415                                    false,
416                                    false,
417                                    false,
418                                    dcp::Colour (255, 255, 255),
419                                    42,
420                                    1.0,
421                                    dcp::Time (0, 1, 42, 229, 250),
422                                    dcp::Time (0, 1, 45, 62, 250),
423                                    0,
424                                    dcp::HALIGN_CENTER,
425                                    0.89,
426                                    dcp::VALIGN_TOP,
427                                    dcp::DIRECTION_LTR,
428                                    "It sits there and smirks",
429                                    dcp::BORDER,
430                                    dcp::Colour (0, 0, 0),
431                                    dcp::Time (0, 0, 0, 0, 250),
432                                    dcp::Time (0, 0, 0, 0, 250)
433                                    ));
434         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
435         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
436                                    string ("theFont"),
437                                    false,
438                                    false,
439                                    false,
440                                    dcp::Colour (255, 255, 255),
441                                    42,
442                                    1.0,
443                                    dcp::Time (0, 1, 42, 229, 250),
444                                    dcp::Time (0, 1, 45, 62, 250),
445                                    0,
446                                    dcp::HALIGN_CENTER,
447                                    0.95,
448                                    dcp::VALIGN_TOP,
449                                    dcp::DIRECTION_LTR,
450                                    "And you don't think it works",
451                                    dcp::BORDER,
452                                    dcp::Colour (0, 0, 0),
453                                    dcp::Time (0, 0, 0, 0, 250),
454                                    dcp::Time (0, 0, 0, 0, 250)
455                                    ));
456
457         s = subs.subtitles_during (dcp::Time (0, 1, 45, 200, 250), dcp::Time (0, 1, 45, 201, 250), false);
458         BOOST_REQUIRE_EQUAL (s.size(), 2);
459         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
460         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
461                                    string ("theFont"),
462                                    false,
463                                    false,
464                                    false,
465                                    dcp::Colour (255, 255, 255),
466                                    42,
467                                    1.0,
468                                    dcp::Time (0, 1, 45, 146, 250),
469                                    dcp::Time (0, 1, 47, 94, 250),
470                                    0,
471                                    dcp::HALIGN_CENTER,
472                                    0.89,
473                                    dcp::VALIGN_TOP,
474                                    dcp::DIRECTION_LTR,
475                                    "Then when you're not looking, it winks.",
476                                    dcp::BORDER,
477                                    dcp::Colour (0, 0, 0),
478                                    dcp::Time (0, 0, 0, 0, 250),
479                                    dcp::Time (0, 0, 0, 0, 250)
480                                    ));
481         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
482         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
483                                    string ("theFont"),
484                                    false,
485                                    false,
486                                    false,
487                                    dcp::Colour (255, 255, 255),
488                                    42,
489                                    1.0,
490                                    dcp::Time (0, 1, 45, 146, 250),
491                                    dcp::Time (0, 1, 47, 94, 250),
492                                    0,
493                                    dcp::HALIGN_CENTER,
494                                    0.95,
495                                    dcp::VALIGN_TOP,
496                                    dcp::DIRECTION_LTR,
497                                    "When it snows you will find Sister Sledge",
498                                    dcp::BORDER,
499                                    dcp::Colour (0, 0, 0),
500                                    dcp::Time (0, 0, 0, 0, 250),
501                                    dcp::Time (0, 0, 0, 0, 250)
502                                    ));
503
504         s = subs.subtitles_during (dcp::Time (0, 1, 47, 249, 250), dcp::Time (0, 1, 47, 250, 250), false);
505         BOOST_REQUIRE_EQUAL (s.size(), 2);
506         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
507         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
508                                    string ("theFont"),
509                                    false,
510                                    false,
511                                    false,
512                                    dcp::Colour (255, 255, 255),
513                                    42,
514                                    1.0,
515                                    dcp::Time (0, 1, 47, 146, 250),
516                                    dcp::Time (0, 1, 48, 167, 250),
517                                    0,
518                                    dcp::HALIGN_CENTER,
519                                    0.89,
520                                    dcp::VALIGN_TOP,
521                                    dcp::DIRECTION_LTR,
522                                    "Out mooning, at night, on the ledge",
523                                    dcp::BORDER,
524                                    dcp::Colour (0, 0, 0),
525                                    dcp::Time (0, 0, 0, 0, 250),
526                                    dcp::Time (0, 0, 0, 0, 250)
527                                    ));
528         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
529         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
530                                    string ("theFont"),
531                                    false,
532                                    false,
533                                    false,
534                                    dcp::Colour (255, 255, 255),
535                                    42,
536                                    1.0,
537                                    dcp::Time (0, 1, 47, 146, 250),
538                                    dcp::Time (0, 1, 48, 167, 250),
539                                    0,
540                                    dcp::HALIGN_CENTER,
541                                    0.95,
542                                    dcp::VALIGN_TOP,
543                                    dcp::DIRECTION_LTR,
544                                    "One storey down",
545                                    dcp::BORDER,
546                                    dcp::Colour (0, 0, 0),
547                                    dcp::Time (0, 0, 0, 0, 250),
548                                    dcp::Time (0, 0, 0, 0, 250)
549                                    ));
550
551         s = subs.subtitles_during (dcp::Time (0, 2, 6, 210, 250), dcp::Time (0, 2, 6, 211, 250), false);
552         BOOST_REQUIRE_EQUAL (s.size(), 2);
553         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.front()));
554         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.front()), dcp::SubtitleString (
555                                    string ("theFont"),
556                                    true,
557                                    false,
558                                    false,
559                                    dcp::Colour (255, 255, 255),
560                                    42,
561                                    1.0,
562                                    dcp::Time (0, 2, 5, 208, 250),
563                                    dcp::Time (0, 2, 7, 31, 250),
564                                    0,
565                                    dcp::HALIGN_CENTER,
566                                    0.89,
567                                    dcp::VALIGN_TOP,
568                                    dcp::DIRECTION_LTR,
569                                    "HELLO",
570                                    dcp::BORDER,
571                                    dcp::Colour (0, 0, 0),
572                                    dcp::Time (0, 0, 0, 0, 250),
573                                    dcp::Time (0, 0, 0, 0, 250)
574                                    ));
575         BOOST_REQUIRE (dynamic_pointer_cast<dcp::SubtitleString>(s.back()));
576         BOOST_CHECK_EQUAL (*dynamic_pointer_cast<dcp::SubtitleString>(s.back()), dcp::SubtitleString (
577                                    string ("theFont"),
578                                    true,
579                                    false,
580                                    false,
581                                    dcp::Colour (255, 255, 255),
582                                    42,
583                                    1.0,
584                                    dcp::Time (0, 2, 5, 208, 250),
585                                    dcp::Time (0, 2, 7, 31, 250),
586                                    0,
587                                    dcp::HALIGN_CENTER,
588                                    0.95,
589                                    dcp::VALIGN_TOP,
590                                    dcp::DIRECTION_LTR,
591                                    "WORLD",
592                                    dcp::BORDER,
593                                    dcp::Colour (0, 0, 0),
594                                    dcp::Time (0, 0, 0, 0, 250),
595                                    dcp::Time (0, 0, 0, 0, 250)
596                                    ));
597 }