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