2 Copyright (C) 2012 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/filesystem.hpp>
26 #include "exceptions.h"
27 #include "subtitle_asset.h"
28 #include "picture_asset.h"
29 #include "sound_asset.h"
32 #define BOOST_TEST_DYN_LINK
33 #define BOOST_TEST_MODULE libdcp_test
34 #include <boost/test/unit_test.hpp>
37 using namespace boost;
42 return "test/data/32x32_red_square.j2c";
48 return "test/data/1s_24-bit_48k_silence.wav";
52 BOOST_AUTO_TEST_CASE (dcp_test)
54 Kumu::libdcp_test = true;
56 libdcp::Metadata* t = libdcp::Metadata::instance ();
57 t->issuer = "OpenDCP 0.0.25";
58 t->creator = "OpenDCP 0.0.25";
59 t->company_name = "OpenDCP";
60 t->product_name = "OpenDCP";
61 t->product_version = "0.0.25";
62 t->issue_date = "2012-07-17T04:45:18+00:00";
63 filesystem::remove_all ("build/test/foo");
64 filesystem::create_directories ("build/test/foo");
65 libdcp::DCP d ("build/test/foo", "A Test DCP", libdcp::FEATURE, 24, 24);
67 shared_ptr<libdcp::PictureAsset> mp (new libdcp::PictureAsset (
78 shared_ptr<libdcp::SoundAsset> ms (new libdcp::SoundAsset (
88 d.add_reel (shared_ptr<libdcp::Reel> (new libdcp::Reel (mp, ms, shared_ptr<libdcp::SubtitleAsset> ())));
93 BOOST_AUTO_TEST_CASE (error_test)
95 libdcp::DCP d ("build/test/bar", "A Test DCP", libdcp::TEST, 24, 24);
97 p.push_back ("frobozz");
99 BOOST_CHECK_THROW (new libdcp::PictureAsset (p, "build/test/bar", "video.mxf", &d.Progress, 24, 24, 32, 32), libdcp::FileError);
100 BOOST_CHECK_THROW (new libdcp::SoundAsset (p, "build/test/bar", "audio.mxf", &d.Progress, 24, 24), libdcp::FileError);
103 BOOST_AUTO_TEST_CASE (read_dcp)
105 libdcp::DCP d ("test/ref/DCP");
107 BOOST_CHECK_EQUAL (d.name(), "A Test DCP");
108 BOOST_CHECK_EQUAL (d.content_kind(), libdcp::FEATURE);
109 BOOST_CHECK_EQUAL (d.frames_per_second(), 24);
110 BOOST_CHECK_EQUAL (d.length(), 24);
113 BOOST_AUTO_TEST_CASE (subtitles)
115 libdcp::SubtitleAsset subs ("test/ref", "subs.xml");
117 BOOST_CHECK_EQUAL (subs.language(), "French");
119 list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 6, 1));
120 BOOST_CHECK_EQUAL (s.size(), 1);
121 BOOST_CHECK_EQUAL (s.front()->text(), "My jacket was Idi Amin's");
122 BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
123 BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 5, 198));
124 BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 7, 115));
125 BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
126 BOOST_CHECK_EQUAL (s.front()->italic(), false);
127 BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
128 BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
129 BOOST_CHECK_EQUAL (s.front()->effect(), "border");
130 BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
132 s = subs.subtitles_at (libdcp::Time (0, 0, 7, 190));
133 BOOST_CHECK_EQUAL (s.size(), 2);
134 BOOST_CHECK_EQUAL (s.front()->text(), "My corset was H.M. The Queen's");
135 BOOST_CHECK_EQUAL (s.front()->v_position(), 21);
136 BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 7, 177));
137 BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 11, 31));
138 BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
139 BOOST_CHECK_EQUAL (s.front()->italic(), true);
140 BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
141 BOOST_CHECK_EQUAL (s.front()->effect(), "border");
142 BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
143 BOOST_CHECK_EQUAL (s.back()->text(), "My large wonderbra");
144 BOOST_CHECK_EQUAL (s.back()->v_position(), 15);
145 BOOST_CHECK_EQUAL (s.back()->in(), libdcp::Time (0, 0, 7, 177));
146 BOOST_CHECK_EQUAL (s.back()->out(), libdcp::Time (0, 0, 11, 31));
147 BOOST_CHECK_EQUAL (s.back()->font(), "Arial");
148 BOOST_CHECK_EQUAL (s.back()->italic(), true);
149 BOOST_CHECK_EQUAL (s.back()->color(), libdcp::Color(255, 255, 255));
150 BOOST_CHECK_EQUAL (s.back()->size_in_pixels(1080), 53);
151 BOOST_CHECK_EQUAL (s.back()->effect(), "border");
152 BOOST_CHECK_EQUAL (s.back()->effect_color(), libdcp::Color(0, 0, 0));
154 s = subs.subtitles_at (libdcp::Time (0, 0, 11, 95));
155 BOOST_CHECK_EQUAL (s.size(), 1);
156 BOOST_CHECK_EQUAL (s.front()->text(), "Once belonged to the Shah");
157 BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
158 BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 11, 94));
159 BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 13, 63));
160 BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
161 BOOST_CHECK_EQUAL (s.front()->italic(), false);
162 BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
163 BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
164 BOOST_CHECK_EQUAL (s.front()->effect(), "border");
165 BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
167 s = subs.subtitles_at (libdcp::Time (0, 0, 14, 42));
168 BOOST_CHECK_EQUAL (s.size(), 1);
169 BOOST_CHECK_EQUAL (s.front()->text(), "And these are Roy Hattersley's jeans");
170 BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
171 BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 13, 104));
172 BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 15, 177));
173 BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
174 BOOST_CHECK_EQUAL (s.front()->italic(), false);
175 BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
176 BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
177 BOOST_CHECK_EQUAL (s.front()->effect(), "border");
178 BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
181 BOOST_AUTO_TEST_CASE (dcp_time)
183 libdcp::Time t (977143, 24);
185 BOOST_CHECK_EQUAL (t.t, 73);
186 BOOST_CHECK_EQUAL (t.s, 34);
187 BOOST_CHECK_EQUAL (t.m, 18);
188 BOOST_CHECK_EQUAL (t.h, 11);
191 BOOST_AUTO_TEST_CASE (color)
193 libdcp::Color c ("FFFF0000");
195 BOOST_CHECK_EQUAL (c.r, 255);
196 BOOST_CHECK_EQUAL (c.g, 0);
197 BOOST_CHECK_EQUAL (c.b, 0);
199 c = libdcp::Color ("FF00FF00");
201 BOOST_CHECK_EQUAL (c.r, 0);
202 BOOST_CHECK_EQUAL (c.g, 255);
203 BOOST_CHECK_EQUAL (c.b, 0);
205 c = libdcp::Color ("FF0000FF");
207 BOOST_CHECK_EQUAL (c.r, 0);
208 BOOST_CHECK_EQUAL (c.g, 0);
209 BOOST_CHECK_EQUAL (c.b, 255);