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