2 Copyright (C) 2012-2013 Carl Hetherington <cth@carlh.net>
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.
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.
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.
20 #include <boost/test/unit_test.hpp>
21 #include "subtitle_asset.h"
24 using boost::shared_ptr;
26 /* Load a subtitle asset from XML and check that it is read correctly */
27 BOOST_AUTO_TEST_CASE (subtitles1)
29 libdcp::SubtitleAsset subs ("test/data", "subs1.xml");
31 BOOST_CHECK_EQUAL (subs.language(), "French");
33 list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 6, 1));
34 BOOST_CHECK_EQUAL (s.size(), 1);
35 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
38 libdcp::Color (255, 255, 255),
40 libdcp::Time (0, 0, 5, 198),
41 libdcp::Time (0, 0, 7, 115),
44 "My jacket was Idi Amin's",
46 libdcp::Color (0, 0, 0),
47 libdcp::Time (0, 0, 0, 1),
48 libdcp::Time (0, 0, 0, 1)
51 s = subs.subtitles_at (libdcp::Time (0, 0, 7, 190));
52 BOOST_CHECK_EQUAL (s.size(), 2);
53 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
56 libdcp::Color (255, 255, 255),
58 libdcp::Time (0, 0, 7, 177),
59 libdcp::Time (0, 0, 11, 31),
62 "My corset was H.M. The Queen's",
64 libdcp::Color (0, 0, 0),
65 libdcp::Time (0, 0, 0, 1),
66 libdcp::Time (0, 0, 0, 1)
68 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
71 libdcp::Color (255, 255, 255),
73 libdcp::Time (0, 0, 7, 177),
74 libdcp::Time (0, 0, 11, 31),
79 libdcp::Color (0, 0, 0),
80 libdcp::Time (0, 0, 0, 1),
81 libdcp::Time (0, 0, 0, 1)
84 s = subs.subtitles_at (libdcp::Time (0, 0, 11, 95));
85 BOOST_CHECK_EQUAL (s.size(), 1);
86 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
89 libdcp::Color (255, 255, 255),
91 libdcp::Time (0, 0, 11, 94),
92 libdcp::Time (0, 0, 13, 63),
95 "Once belonged to the Shah",
97 libdcp::Color (0, 0, 0),
98 libdcp::Time (0, 0, 0, 1),
99 libdcp::Time (0, 0, 0, 1)
102 s = subs.subtitles_at (libdcp::Time (0, 0, 14, 42));
103 BOOST_CHECK_EQUAL (s.size(), 1);
104 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
107 libdcp::Color (255, 255, 255),
109 libdcp::Time (0, 0, 13, 104),
110 libdcp::Time (0, 0, 15, 177),
113 "And these are Roy Hattersley's jeans",
115 libdcp::Color (0, 0, 0),
116 libdcp::Time (0, 0, 0, 1),
117 libdcp::Time (0, 0, 0, 1)
121 /** And similarly for another one */
122 BOOST_AUTO_TEST_CASE (subtitles2)
124 libdcp::SubtitleAsset subs ("test/data", "subs2.xml");
126 list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 42, 100));
127 BOOST_CHECK_EQUAL (s.size(), 2);
128 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
131 libdcp::Color (255, 255, 255),
133 libdcp::Time (0, 0, 41, 62),
134 libdcp::Time (0, 0, 43, 52),
137 "At afternoon tea with John Peel",
139 libdcp::Color (0, 0, 0),
140 libdcp::Time (0, 0, 0, 0),
141 libdcp::Time (0, 0, 0, 0)
143 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
146 libdcp::Color (255, 255, 255),
148 libdcp::Time (0, 0, 41, 62),
149 libdcp::Time (0, 0, 43, 52),
152 "I enquired if his accent was real",
154 libdcp::Color (0, 0, 0),
155 libdcp::Time (0, 0, 0, 0),
156 libdcp::Time (0, 0, 0, 0)
159 s = subs.subtitles_at (libdcp::Time (0, 0, 50, 50));
160 BOOST_CHECK_EQUAL (s.size(), 2);
161 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
164 libdcp::Color (255, 255, 255),
166 libdcp::Time (0, 0, 50, 42),
167 libdcp::Time (0, 0, 52, 21),
170 "He said \"out of the house",
172 libdcp::Color (0, 0, 0),
173 libdcp::Time (0, 0, 0, 0),
174 libdcp::Time (0, 0, 0, 0)
176 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
179 libdcp::Color (255, 255, 255),
181 libdcp::Time (0, 0, 50, 42),
182 libdcp::Time (0, 0, 52, 21),
185 "I'm incredibly scouse",
187 libdcp::Color (0, 0, 0),
188 libdcp::Time (0, 0, 0, 0),
189 libdcp::Time (0, 0, 0, 0)
192 s = subs.subtitles_at (libdcp::Time (0, 1, 2, 300));
193 BOOST_CHECK_EQUAL (s.size(), 2);
194 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
197 libdcp::Color (255, 255, 255),
199 libdcp::Time (0, 1, 2, 208),
200 libdcp::Time (0, 1, 4, 10),
203 "At home it depends how I feel.\"",
205 libdcp::Color (0, 0, 0),
206 libdcp::Time (0, 0, 0, 0),
207 libdcp::Time (0, 0, 0, 0)
209 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
212 libdcp::Color (255, 255, 255),
214 libdcp::Time (0, 1, 2, 208),
215 libdcp::Time (0, 1, 4, 10),
218 "I spent a long weekend in Brighton",
220 libdcp::Color (0, 0, 0),
221 libdcp::Time (0, 0, 0, 0),
222 libdcp::Time (0, 0, 0, 0)
225 s = subs.subtitles_at (libdcp::Time (0, 1, 15, 50));
226 BOOST_CHECK_EQUAL (s.size(), 2);
227 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
230 libdcp::Color (255, 255, 255),
232 libdcp::Time (0, 1, 15, 42),
233 libdcp::Time (0, 1, 16, 42),
236 "With the legendary Miss Enid Blyton",
238 libdcp::Color (0, 0, 0),
239 libdcp::Time (0, 0, 0, 0),
240 libdcp::Time (0, 0, 0, 0)
242 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
245 libdcp::Color (255, 255, 255),
247 libdcp::Time (0, 1, 15, 42),
248 libdcp::Time (0, 1, 16, 42),
251 "She said \"you be Noddy",
253 libdcp::Color (0, 0, 0),
254 libdcp::Time (0, 0, 0, 0),
255 libdcp::Time (0, 0, 0, 0)
258 s = subs.subtitles_at (libdcp::Time (0, 1, 27, 200));
259 BOOST_CHECK_EQUAL (s.size(), 2);
260 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
263 libdcp::Color (255, 255, 255),
265 libdcp::Time (0, 1, 27, 115),
266 libdcp::Time (0, 1, 28, 208),
269 "That curious creature the Sphinx",
271 libdcp::Color (0, 0, 0),
272 libdcp::Time (0, 0, 0, 0),
273 libdcp::Time (0, 0, 0, 0)
275 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
278 libdcp::Color (255, 255, 255),
280 libdcp::Time (0, 1, 27, 115),
281 libdcp::Time (0, 1, 28, 208),
284 "Is smarter than anyone thinks",
286 libdcp::Color (0, 0, 0),
287 libdcp::Time (0, 0, 0, 0),
288 libdcp::Time (0, 0, 0, 0)
291 s = subs.subtitles_at (libdcp::Time (0, 1, 42, 300));
292 BOOST_CHECK_EQUAL (s.size(), 2);
293 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
296 libdcp::Color (255, 255, 255),
298 libdcp::Time (0, 1, 42, 229),
299 libdcp::Time (0, 1, 45, 62),
302 "It sits there and smirks",
304 libdcp::Color (0, 0, 0),
305 libdcp::Time (0, 0, 0, 0),
306 libdcp::Time (0, 0, 0, 0)
308 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
311 libdcp::Color (255, 255, 255),
313 libdcp::Time (0, 1, 42, 229),
314 libdcp::Time (0, 1, 45, 62),
317 "And you don't think it works",
319 libdcp::Color (0, 0, 0),
320 libdcp::Time (0, 0, 0, 0),
321 libdcp::Time (0, 0, 0, 0)
324 s = subs.subtitles_at (libdcp::Time (0, 1, 45, 200));
325 BOOST_CHECK_EQUAL (s.size(), 2);
326 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
329 libdcp::Color (255, 255, 255),
331 libdcp::Time (0, 1, 45, 146),
332 libdcp::Time (0, 1, 47, 94),
335 "Then when you're not looking, it winks.",
337 libdcp::Color (0, 0, 0),
338 libdcp::Time (0, 0, 0, 0),
339 libdcp::Time (0, 0, 0, 0)
341 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
344 libdcp::Color (255, 255, 255),
346 libdcp::Time (0, 1, 45, 146),
347 libdcp::Time (0, 1, 47, 94),
350 "When it snows you will find Sister Sledge",
352 libdcp::Color (0, 0, 0),
353 libdcp::Time (0, 0, 0, 0),
354 libdcp::Time (0, 0, 0, 0)
357 s = subs.subtitles_at (libdcp::Time (0, 1, 47, 249));
358 BOOST_CHECK_EQUAL (s.size(), 2);
359 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
362 libdcp::Color (255, 255, 255),
364 libdcp::Time (0, 1, 47, 146),
365 libdcp::Time (0, 1, 48, 167),
368 "Out mooning, at night, on the ledge",
370 libdcp::Color (0, 0, 0),
371 libdcp::Time (0, 0, 0, 0),
372 libdcp::Time (0, 0, 0, 0)
374 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
377 libdcp::Color (255, 255, 255),
379 libdcp::Time (0, 1, 47, 146),
380 libdcp::Time (0, 1, 48, 167),
385 libdcp::Color (0, 0, 0),
386 libdcp::Time (0, 0, 0, 0),
387 libdcp::Time (0, 0, 0, 0)
390 s = subs.subtitles_at (libdcp::Time (0, 2, 6, 210));
391 BOOST_CHECK_EQUAL (s.size(), 2);
392 BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
395 libdcp::Color (255, 255, 255),
397 libdcp::Time (0, 2, 5, 208),
398 libdcp::Time (0, 2, 7, 31),
403 libdcp::Color (0, 0, 0),
404 libdcp::Time (0, 0, 0, 0),
405 libdcp::Time (0, 0, 0, 0)
407 BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
410 libdcp::Color (255, 255, 255),
412 libdcp::Time (0, 2, 5, 208),
413 libdcp::Time (0, 2, 7, 31),
418 libdcp::Color (0, 0, 0),
419 libdcp::Time (0, 0, 0, 0),
420 libdcp::Time (0, 0, 0, 0)