Rename subtitle_tests -> subtitle_test.
[libdcp.git] / test / subtitle_test.cc
1 /*
2     Copyright (C) 2012-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 "interop_subtitle_content.h"
21 #include "subtitle_string.h"
22 #include <boost/test/unit_test.hpp>
23
24 using std::list;
25 using std::string;
26 using boost::shared_ptr;
27
28 /* Load some subtitle content from XML and check that it is read correctly */
29 BOOST_AUTO_TEST_CASE (subtitles1)
30 {
31         dcp::InteropSubtitleContent subs ("test/data/subs1.xml");
32
33         BOOST_CHECK_EQUAL (subs.language(), "French");
34
35         list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 6, 1), dcp::Time (0, 0, 6, 2));
36         BOOST_CHECK_EQUAL (s.size(), 1);
37         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
38                                    string ("theFontId"),
39                                    false,
40                                    dcp::Colour (255, 255, 255),
41                                    39,
42                                    dcp::Time (0, 0, 5, 198),
43                                    dcp::Time (0, 0, 7, 115),
44                                    15,
45                                    dcp::BOTTOM,
46                                    "My jacket was Idi Amin's",
47                                    dcp::BORDER,
48                                    dcp::Colour (0, 0, 0),
49                                    dcp::Time (0, 0, 0, 1),
50                                    dcp::Time (0, 0, 0, 1)
51                                    ));
52                                                          
53         s = subs.subtitles_during (dcp::Time (0, 0, 7, 190), dcp::Time (0, 0, 7, 191));
54         BOOST_CHECK_EQUAL (s.size(), 2);
55         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
56                                    string ("theFontId"),
57                                    true,
58                                    dcp::Colour (255, 255, 255),
59                                    39,
60                                    dcp::Time (0, 0, 7, 177),
61                                    dcp::Time (0, 0, 11, 31),
62                                    21,
63                                    dcp::BOTTOM,
64                                    "My corset was H.M. The Queen's",
65                                    dcp::BORDER,
66                                    dcp::Colour (0, 0, 0),
67                                    dcp::Time (0, 0, 0, 1),
68                                    dcp::Time (0, 0, 0, 1)
69                                    ));
70         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
71                                    string ("theFontId"),
72                                    false,
73                                    dcp::Colour (255, 255, 255),
74                                    39,
75                                    dcp::Time (0, 0, 7, 177),
76                                    dcp::Time (0, 0, 11, 31),
77                                    15,
78                                    dcp::BOTTOM,
79                                    "My large wonderbra",
80                                    dcp::BORDER,
81                                    dcp::Colour (0, 0, 0),
82                                    dcp::Time (0, 0, 0, 1),
83                                    dcp::Time (0, 0, 0, 1)
84                                    ));
85
86         s = subs.subtitles_during (dcp::Time (0, 0, 11, 95), dcp::Time (0, 0, 11, 96));
87         BOOST_CHECK_EQUAL (s.size(), 1);
88         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
89                                    string ("theFontId"),
90                                    false,
91                                    dcp::Colour (255, 255, 255),
92                                    39,
93                                    dcp::Time (0, 0, 11, 94),
94                                    dcp::Time (0, 0, 13, 63),
95                                    15,
96                                    dcp::BOTTOM,
97                                    "Once belonged to the Shah",
98                                    dcp::BORDER,
99                                    dcp::Colour (0, 0, 0),
100                                    dcp::Time (0, 0, 0, 1),
101                                    dcp::Time (0, 0, 0, 1)
102                                    ));
103
104         s = subs.subtitles_during (dcp::Time (0, 0, 14, 42), dcp::Time (0, 0, 14, 43));
105         BOOST_CHECK_EQUAL (s.size(), 1);
106         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
107                                    string ("theFontId"),
108                                    false,
109                                    dcp::Colour (255, 255, 255),
110                                    39,
111                                    dcp::Time (0, 0, 13, 104),
112                                    dcp::Time (0, 0, 15, 177),
113                                    15,
114                                    dcp::BOTTOM,
115                                    "And these are Roy Hattersley's jeans",
116                                    dcp::BORDER,
117                                    dcp::Colour (0, 0, 0),
118                                    dcp::Time (0, 0, 0, 1),
119                                    dcp::Time (0, 0, 0, 1)
120                                    ));
121 }
122
123 /** And similarly for another one */
124 BOOST_AUTO_TEST_CASE (subtitles2)
125 {
126         dcp::InteropSubtitleContent subs ("test/data/subs2.xml");
127
128         list<dcp::SubtitleString> s = subs.subtitles_during (dcp::Time (0, 0, 42, 100), dcp::Time (0, 0, 42, 101));
129         BOOST_CHECK_EQUAL (s.size(), 2);
130         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
131                                    string ("theFont"),
132                                    true,
133                                    dcp::Colour (255, 255, 255),
134                                    42,
135                                    dcp::Time (0, 0, 41, 62),
136                                    dcp::Time (0, 0, 43, 52),
137                                    89,
138                                    dcp::TOP,
139                                    "At afternoon tea with John Peel",
140                                    dcp::BORDER,
141                                    dcp::Colour (0, 0, 0),
142                                    dcp::Time (0, 0, 0, 0),
143                                    dcp::Time (0, 0, 0, 0)
144                                    ));
145         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
146                                    string ("theFont"),
147                                    true,
148                                    dcp::Colour (255, 255, 255),
149                                    42,
150                                    dcp::Time (0, 0, 41, 62),
151                                    dcp::Time (0, 0, 43, 52),
152                                    95,
153                                    dcp::TOP,
154                                    "I enquired if his accent was real",
155                                    dcp::BORDER,
156                                    dcp::Colour (0, 0, 0),
157                                    dcp::Time (0, 0, 0, 0),
158                                    dcp::Time (0, 0, 0, 0)
159                                    ));
160
161         s = subs.subtitles_during (dcp::Time (0, 0, 50, 50), dcp::Time (0, 0, 50, 51));
162         BOOST_CHECK_EQUAL (s.size(), 2);
163         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
164                                    string ("theFont"),
165                                    true,
166                                    dcp::Colour (255, 255, 255),
167                                    42,
168                                    dcp::Time (0, 0, 50, 42),
169                                    dcp::Time (0, 0, 52, 21),
170                                    89,
171                                    dcp::TOP,
172                                    "He said \"out of the house",
173                                    dcp::BORDER,
174                                    dcp::Colour (0, 0, 0),
175                                    dcp::Time (0, 0, 0, 0),
176                                    dcp::Time (0, 0, 0, 0)
177                                    ));
178         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
179                                    string ("theFont"),
180                                    true,
181                                    dcp::Colour (255, 255, 255),
182                                    42,
183                                    dcp::Time (0, 0, 50, 42),
184                                    dcp::Time (0, 0, 52, 21),
185                                    95,
186                                    dcp::TOP,
187                                    "I'm incredibly scouse",
188                                    dcp::BORDER,
189                                    dcp::Colour (0, 0, 0),
190                                    dcp::Time (0, 0, 0, 0),
191                                    dcp::Time (0, 0, 0, 0)
192                                    ));
193
194         s = subs.subtitles_during (dcp::Time (0, 1, 2, 300), dcp::Time (0, 1, 2, 301));
195         BOOST_CHECK_EQUAL (s.size(), 2);
196         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
197                                    string ("theFont"),
198                                    true,
199                                    dcp::Colour (255, 255, 255),
200                                    42,
201                                    dcp::Time (0, 1, 2, 208),
202                                    dcp::Time (0, 1, 4, 10),
203                                    89,
204                                    dcp::TOP,
205                                    "At home it depends how I feel.\"",
206                                    dcp::BORDER,
207                                    dcp::Colour (0, 0, 0),
208                                    dcp::Time (0, 0, 0, 0),
209                                    dcp::Time (0, 0, 0, 0)
210                                    ));
211         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
212                                    string ("theFont"),
213                                    true,
214                                    dcp::Colour (255, 255, 255),
215                                    42,
216                                    dcp::Time (0, 1, 2, 208),
217                                    dcp::Time (0, 1, 4, 10),
218                                    95,
219                                    dcp::TOP,
220                                    "I spent a long weekend in Brighton",
221                                    dcp::BORDER,
222                                    dcp::Colour (0, 0, 0),
223                                    dcp::Time (0, 0, 0, 0),
224                                    dcp::Time (0, 0, 0, 0)
225                                    ));
226
227         s = subs.subtitles_during (dcp::Time (0, 1, 15, 50), dcp::Time (0, 1, 15, 51));
228         BOOST_CHECK_EQUAL (s.size(), 2);
229         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
230                                    string ("theFont"),
231                                    true,
232                                    dcp::Colour (255, 255, 255),
233                                    42,
234                                    dcp::Time (0, 1, 15, 42),
235                                    dcp::Time (0, 1, 16, 42),
236                                    89,
237                                    dcp::TOP,
238                                    "With the legendary Miss Enid Blyton",
239                                    dcp::BORDER,
240                                    dcp::Colour (0, 0, 0),
241                                    dcp::Time (0, 0, 0, 0),
242                                    dcp::Time (0, 0, 0, 0)
243                                    ));
244         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
245                                    string ("theFont"),
246                                    true,
247                                    dcp::Colour (255, 255, 255),
248                                    42,
249                                    dcp::Time (0, 1, 15, 42),
250                                    dcp::Time (0, 1, 16, 42),
251                                    95,
252                                    dcp::TOP,
253                                    "She said \"you be Noddy",
254                                    dcp::BORDER,
255                                    dcp::Colour (0, 0, 0),
256                                    dcp::Time (0, 0, 0, 0),
257                                    dcp::Time (0, 0, 0, 0)
258                                    ));
259
260         s = subs.subtitles_during (dcp::Time (0, 1, 27, 200), dcp::Time (0, 1, 27, 201));
261         BOOST_CHECK_EQUAL (s.size(), 2);
262         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
263                                    string ("theFont"),
264                                    true,
265                                    dcp::Colour (255, 255, 255),
266                                    42,
267                                    dcp::Time (0, 1, 27, 115),
268                                    dcp::Time (0, 1, 28, 208),
269                                    89,
270                                    dcp::TOP,
271                                    "That curious creature the Sphinx",
272                                    dcp::BORDER,
273                                    dcp::Colour (0, 0, 0),
274                                    dcp::Time (0, 0, 0, 0),
275                                    dcp::Time (0, 0, 0, 0)
276                                    ));
277         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
278                                    string ("theFont"),
279                                    true,
280                                    dcp::Colour (255, 255, 255),
281                                    42,
282                                    dcp::Time (0, 1, 27, 115),
283                                    dcp::Time (0, 1, 28, 208),
284                                    95,
285                                    dcp::TOP,
286                                    "Is smarter than anyone thinks",
287                                    dcp::BORDER,
288                                    dcp::Colour (0, 0, 0),
289                                    dcp::Time (0, 0, 0, 0),
290                                    dcp::Time (0, 0, 0, 0)
291                                    ));
292
293         s = subs.subtitles_during (dcp::Time (0, 1, 42, 300), dcp::Time (0, 1, 42, 301));
294         BOOST_CHECK_EQUAL (s.size(), 2);
295         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
296                                    string ("theFont"),
297                                    false,
298                                    dcp::Colour (255, 255, 255),
299                                    42,
300                                    dcp::Time (0, 1, 42, 229),
301                                    dcp::Time (0, 1, 45, 62),
302                                    89,
303                                    dcp::TOP,
304                                    "It sits there and smirks",
305                                    dcp::BORDER,
306                                    dcp::Colour (0, 0, 0),
307                                    dcp::Time (0, 0, 0, 0),
308                                    dcp::Time (0, 0, 0, 0)
309                                    ));
310         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
311                                    string ("theFont"),
312                                    false,
313                                    dcp::Colour (255, 255, 255),
314                                    42,
315                                    dcp::Time (0, 1, 42, 229),
316                                    dcp::Time (0, 1, 45, 62),
317                                    95,
318                                    dcp::TOP,
319                                    "And you don't think it works",
320                                    dcp::BORDER,
321                                    dcp::Colour (0, 0, 0),
322                                    dcp::Time (0, 0, 0, 0),
323                                    dcp::Time (0, 0, 0, 0)
324                                    ));
325
326         s = subs.subtitles_during (dcp::Time (0, 1, 45, 200), dcp::Time (0, 1, 45, 201));
327         BOOST_CHECK_EQUAL (s.size(), 2);
328         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
329                                    string ("theFont"),
330                                    false,
331                                    dcp::Colour (255, 255, 255),
332                                    42,
333                                    dcp::Time (0, 1, 45, 146),
334                                    dcp::Time (0, 1, 47, 94),
335                                    89,
336                                    dcp::TOP,
337                                    "Then when you're not looking, it winks.",
338                                    dcp::BORDER,
339                                    dcp::Colour (0, 0, 0),
340                                    dcp::Time (0, 0, 0, 0),
341                                    dcp::Time (0, 0, 0, 0)
342                                    ));
343         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
344                                    string ("theFont"),
345                                    false,
346                                    dcp::Colour (255, 255, 255),
347                                    42,
348                                    dcp::Time (0, 1, 45, 146),
349                                    dcp::Time (0, 1, 47, 94),
350                                    95,
351                                    dcp::TOP,
352                                    "When it snows you will find Sister Sledge",
353                                    dcp::BORDER,
354                                    dcp::Colour (0, 0, 0),
355                                    dcp::Time (0, 0, 0, 0),
356                                    dcp::Time (0, 0, 0, 0)
357                                    ));
358
359         s = subs.subtitles_during (dcp::Time (0, 1, 47, 249), dcp::Time (0, 1, 47, 250));
360         BOOST_CHECK_EQUAL (s.size(), 2);
361         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
362                                    string ("theFont"),
363                                    false,
364                                    dcp::Colour (255, 255, 255),
365                                    42,
366                                    dcp::Time (0, 1, 47, 146),
367                                    dcp::Time (0, 1, 48, 167),
368                                    89,
369                                    dcp::TOP,
370                                    "Out mooning, at night, on the ledge",
371                                    dcp::BORDER,
372                                    dcp::Colour (0, 0, 0),
373                                    dcp::Time (0, 0, 0, 0),
374                                    dcp::Time (0, 0, 0, 0)
375                                    ));
376         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
377                                    string ("theFont"),
378                                    false,
379                                    dcp::Colour (255, 255, 255),
380                                    42,
381                                    dcp::Time (0, 1, 47, 146),
382                                    dcp::Time (0, 1, 48, 167),
383                                    95,
384                                    dcp::TOP,
385                                    "One storey down",
386                                    dcp::BORDER,
387                                    dcp::Colour (0, 0, 0),
388                                    dcp::Time (0, 0, 0, 0),
389                                    dcp::Time (0, 0, 0, 0)
390                                    ));
391
392         s = subs.subtitles_during (dcp::Time (0, 2, 6, 210), dcp::Time (0, 2, 6, 211));
393         BOOST_CHECK_EQUAL (s.size(), 2);
394         BOOST_CHECK_EQUAL (s.front(), dcp::SubtitleString (
395                                    string ("theFont"),
396                                    true,
397                                    dcp::Colour (255, 255, 255),
398                                    42,
399                                    dcp::Time (0, 2, 5, 208),
400                                    dcp::Time (0, 2, 7, 31),
401                                    89,
402                                    dcp::TOP,
403                                    "HELLO",
404                                    dcp::BORDER,
405                                    dcp::Colour (0, 0, 0),
406                                    dcp::Time (0, 0, 0, 0),
407                                    dcp::Time (0, 0, 0, 0)
408                                    ));
409         BOOST_CHECK_EQUAL (s.back(), dcp::SubtitleString (
410                                    string ("theFont"),
411                                    true,
412                                    dcp::Colour (255, 255, 255),
413                                    42,
414                                    dcp::Time (0, 2, 5, 208),
415                                    dcp::Time (0, 2, 7, 31),
416                                    95,
417                                    dcp::TOP,
418                                    "WORLD",
419                                    dcp::BORDER,
420                                    dcp::Colour (0, 0, 0),
421                                    dcp::Time (0, 0, 0, 0),
422                                    dcp::Time (0, 0, 0, 0)
423                                    ));
424
425         
426         
427 }