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 dcp::SubtitleAsset subs ("test/data/subs1.xml");
31 BOOST_CHECK_EQUAL (subs.language(), "French");
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 (
38 dcp::Color (255, 255, 255),
40 dcp::Time (0, 0, 5, 198),
41 dcp::Time (0, 0, 7, 115),
44 "My jacket was Idi Amin's",
47 dcp::Time (0, 0, 0, 1),
48 dcp::Time (0, 0, 0, 1)
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 (
56 dcp::Color (255, 255, 255),
58 dcp::Time (0, 0, 7, 177),
59 dcp::Time (0, 0, 11, 31),
62 "My corset was H.M. The Queen's",
65 dcp::Time (0, 0, 0, 1),
66 dcp::Time (0, 0, 0, 1)
68 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
71 dcp::Color (255, 255, 255),
73 dcp::Time (0, 0, 7, 177),
74 dcp::Time (0, 0, 11, 31),
80 dcp::Time (0, 0, 0, 1),
81 dcp::Time (0, 0, 0, 1)
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 (
89 dcp::Color (255, 255, 255),
91 dcp::Time (0, 0, 11, 94),
92 dcp::Time (0, 0, 13, 63),
95 "Once belonged to the Shah",
98 dcp::Time (0, 0, 0, 1),
99 dcp::Time (0, 0, 0, 1)
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 (
107 dcp::Color (255, 255, 255),
109 dcp::Time (0, 0, 13, 104),
110 dcp::Time (0, 0, 15, 177),
113 "And these are Roy Hattersley's jeans",
115 dcp::Color (0, 0, 0),
116 dcp::Time (0, 0, 0, 1),
117 dcp::Time (0, 0, 0, 1)
121 /** And similarly for another one */
122 BOOST_AUTO_TEST_CASE (subtitles2)
124 dcp::SubtitleAsset subs ("test/data/subs2.xml");
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 (
131 dcp::Color (255, 255, 255),
133 dcp::Time (0, 0, 41, 62),
134 dcp::Time (0, 0, 43, 52),
137 "At afternoon tea with John Peel",
139 dcp::Color (0, 0, 0),
140 dcp::Time (0, 0, 0, 0),
141 dcp::Time (0, 0, 0, 0)
143 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
146 dcp::Color (255, 255, 255),
148 dcp::Time (0, 0, 41, 62),
149 dcp::Time (0, 0, 43, 52),
152 "I enquired if his accent was real",
154 dcp::Color (0, 0, 0),
155 dcp::Time (0, 0, 0, 0),
156 dcp::Time (0, 0, 0, 0)
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 (
164 dcp::Color (255, 255, 255),
166 dcp::Time (0, 0, 50, 42),
167 dcp::Time (0, 0, 52, 21),
170 "He said \"out of the house",
172 dcp::Color (0, 0, 0),
173 dcp::Time (0, 0, 0, 0),
174 dcp::Time (0, 0, 0, 0)
176 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
179 dcp::Color (255, 255, 255),
181 dcp::Time (0, 0, 50, 42),
182 dcp::Time (0, 0, 52, 21),
185 "I'm incredibly scouse",
187 dcp::Color (0, 0, 0),
188 dcp::Time (0, 0, 0, 0),
189 dcp::Time (0, 0, 0, 0)
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 (
197 dcp::Color (255, 255, 255),
199 dcp::Time (0, 1, 2, 208),
200 dcp::Time (0, 1, 4, 10),
203 "At home it depends how I feel.\"",
205 dcp::Color (0, 0, 0),
206 dcp::Time (0, 0, 0, 0),
207 dcp::Time (0, 0, 0, 0)
209 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
212 dcp::Color (255, 255, 255),
214 dcp::Time (0, 1, 2, 208),
215 dcp::Time (0, 1, 4, 10),
218 "I spent a long weekend in Brighton",
220 dcp::Color (0, 0, 0),
221 dcp::Time (0, 0, 0, 0),
222 dcp::Time (0, 0, 0, 0)
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 (
230 dcp::Color (255, 255, 255),
232 dcp::Time (0, 1, 15, 42),
233 dcp::Time (0, 1, 16, 42),
236 "With the legendary Miss Enid Blyton",
238 dcp::Color (0, 0, 0),
239 dcp::Time (0, 0, 0, 0),
240 dcp::Time (0, 0, 0, 0)
242 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
245 dcp::Color (255, 255, 255),
247 dcp::Time (0, 1, 15, 42),
248 dcp::Time (0, 1, 16, 42),
251 "She said \"you be Noddy",
253 dcp::Color (0, 0, 0),
254 dcp::Time (0, 0, 0, 0),
255 dcp::Time (0, 0, 0, 0)
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 (
263 dcp::Color (255, 255, 255),
265 dcp::Time (0, 1, 27, 115),
266 dcp::Time (0, 1, 28, 208),
269 "That curious creature the Sphinx",
271 dcp::Color (0, 0, 0),
272 dcp::Time (0, 0, 0, 0),
273 dcp::Time (0, 0, 0, 0)
275 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
278 dcp::Color (255, 255, 255),
280 dcp::Time (0, 1, 27, 115),
281 dcp::Time (0, 1, 28, 208),
284 "Is smarter than anyone thinks",
286 dcp::Color (0, 0, 0),
287 dcp::Time (0, 0, 0, 0),
288 dcp::Time (0, 0, 0, 0)
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 (
296 dcp::Color (255, 255, 255),
298 dcp::Time (0, 1, 42, 229),
299 dcp::Time (0, 1, 45, 62),
302 "It sits there and smirks",
304 dcp::Color (0, 0, 0),
305 dcp::Time (0, 0, 0, 0),
306 dcp::Time (0, 0, 0, 0)
308 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
311 dcp::Color (255, 255, 255),
313 dcp::Time (0, 1, 42, 229),
314 dcp::Time (0, 1, 45, 62),
317 "And you don't think it works",
319 dcp::Color (0, 0, 0),
320 dcp::Time (0, 0, 0, 0),
321 dcp::Time (0, 0, 0, 0)
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 (
329 dcp::Color (255, 255, 255),
331 dcp::Time (0, 1, 45, 146),
332 dcp::Time (0, 1, 47, 94),
335 "Then when you're not looking, it winks.",
337 dcp::Color (0, 0, 0),
338 dcp::Time (0, 0, 0, 0),
339 dcp::Time (0, 0, 0, 0)
341 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
344 dcp::Color (255, 255, 255),
346 dcp::Time (0, 1, 45, 146),
347 dcp::Time (0, 1, 47, 94),
350 "When it snows you will find Sister Sledge",
352 dcp::Color (0, 0, 0),
353 dcp::Time (0, 0, 0, 0),
354 dcp::Time (0, 0, 0, 0)
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 (
362 dcp::Color (255, 255, 255),
364 dcp::Time (0, 1, 47, 146),
365 dcp::Time (0, 1, 48, 167),
368 "Out mooning, at night, on the ledge",
370 dcp::Color (0, 0, 0),
371 dcp::Time (0, 0, 0, 0),
372 dcp::Time (0, 0, 0, 0)
374 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
377 dcp::Color (255, 255, 255),
379 dcp::Time (0, 1, 47, 146),
380 dcp::Time (0, 1, 48, 167),
385 dcp::Color (0, 0, 0),
386 dcp::Time (0, 0, 0, 0),
387 dcp::Time (0, 0, 0, 0)
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 (
395 dcp::Color (255, 255, 255),
397 dcp::Time (0, 2, 5, 208),
398 dcp::Time (0, 2, 7, 31),
403 dcp::Color (0, 0, 0),
404 dcp::Time (0, 0, 0, 0),
405 dcp::Time (0, 0, 0, 0)
407 BOOST_CHECK_EQUAL (*(s.back().get()), dcp::Subtitle (
410 dcp::Color (255, 255, 255),
412 dcp::Time (0, 2, 5, 208),
413 dcp::Time (0, 2, 7, 31),
418 dcp::Color (0, 0, 0),
419 dcp::Time (0, 0, 0, 0),
420 dcp::Time (0, 0, 0, 0)