Use signals2 rather than sigc++
[libdcp.git] / test / tests.cc
index d434429a83047d2c9e23498429df1d188ae6075c..ef25b7c8d6fb85eb9ef84a9f390da2636b01e47e 100644 (file)
 #define BOOST_TEST_MODULE libdcp_test
 #include <boost/test/unit_test.hpp>
 
-using namespace std;
-using namespace boost;
+using std::string;
+using std::vector;
+using std::list;
+using boost::shared_ptr;
 
 string
 j2c (int)
@@ -61,12 +63,13 @@ BOOST_AUTO_TEST_CASE (dcp_test)
        t->product_name = "OpenDCP";
        t->product_version = "0.0.25";
        t->issue_date = "2012-07-17T04:45:18+00:00";
-       filesystem::remove_all ("build/test/foo");
-       filesystem::create_directories ("build/test/foo");
-       libdcp::DCP d ("build/test/foo", "A Test DCP", libdcp::FEATURE, 24, 24);
+       boost::filesystem::remove_all ("build/test/foo");
+       boost::filesystem::create_directories ("build/test/foo");
+       libdcp::DCP d ("build/test/foo");
+       shared_ptr<libdcp::CPL> cpl (new libdcp::CPL ("build/test/foo", "A Test DCP", libdcp::FEATURE, 24, 24));
 
        shared_ptr<libdcp::MonoPictureAsset> mp (new libdcp::MonoPictureAsset (
-                                                        sigc::ptr_fun (&j2c),
+                                                        j2c,
                                                         "build/test/foo",
                                                         "video.mxf",
                                                         &d.Progress,
@@ -77,23 +80,24 @@ BOOST_AUTO_TEST_CASE (dcp_test)
                                                         ));
 
        shared_ptr<libdcp::SoundAsset> ms (new libdcp::SoundAsset (
-                                                 sigc::ptr_fun (&wav),
-                                                 "build/test/foo",
-                                                 "audio.mxf",
-                                                 &(d.Progress),
-                                                 24,
-                                                 24,
-                                                 2
-                                                 ));
-
-       d.add_reel (shared_ptr<libdcp::Reel> (new libdcp::Reel (mp, ms, shared_ptr<libdcp::SubtitleAsset> ())));
+                                                  wav,
+                                                  "build/test/foo",
+                                                  "audio.mxf",
+                                                  &(d.Progress),
+                                                  24,
+                                                  24,
+                                                  2
+                                                  ));
+       
+       cpl->add_reel (shared_ptr<libdcp::Reel> (new libdcp::Reel (mp, ms, shared_ptr<libdcp::SubtitleAsset> ())));
+       d.add_cpl (cpl);
 
        d.write_xml ();
 }
 
 BOOST_AUTO_TEST_CASE (error_test)
 {
-       libdcp::DCP d ("build/test/bar", "A Test DCP", libdcp::TEST, 24, 24);
+       libdcp::DCP d ("build/test/bar");
        vector<string> p;
        p.push_back ("frobozz");
 
@@ -104,84 +108,414 @@ BOOST_AUTO_TEST_CASE (error_test)
 BOOST_AUTO_TEST_CASE (read_dcp)
 {
        libdcp::DCP d ("test/ref/DCP");
+       d.read ();
 
-       BOOST_CHECK_EQUAL (d.name(), "A Test DCP");
-       BOOST_CHECK_EQUAL (d.content_kind(), libdcp::FEATURE);
-       BOOST_CHECK_EQUAL (d.frames_per_second(), 24);
-       BOOST_CHECK_EQUAL (d.length(), 24);
+       list<shared_ptr<const libdcp::CPL> > cpls = d.cpls ();
+       BOOST_CHECK_EQUAL (cpls.size(), 1);
+
+       BOOST_CHECK_EQUAL (cpls.front()->name(), "A Test DCP");
+       BOOST_CHECK_EQUAL (cpls.front()->content_kind(), libdcp::FEATURE);
+       BOOST_CHECK_EQUAL (cpls.front()->frames_per_second(), 24);
+       BOOST_CHECK_EQUAL (cpls.front()->length(), 24);
 }
        
-BOOST_AUTO_TEST_CASE (subtitles)
+BOOST_AUTO_TEST_CASE (subtitles1)
 {
-       libdcp::SubtitleAsset subs ("test/ref", "subs.xml");
+       libdcp::SubtitleAsset subs ("test/data", "subs1.xml");
 
        BOOST_CHECK_EQUAL (subs.language(), "French");
 
        list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 6, 1));
        BOOST_CHECK_EQUAL (s.size(), 1);
-       BOOST_CHECK_EQUAL (s.front()->text(), "My jacket was Idi Amin's");
-       BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
-       BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 5, 198));
-       BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 7, 115));
-       BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
-       BOOST_CHECK_EQUAL (s.front()->italic(), false);
-       BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
-       BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
-       BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
-       BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
-       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
-
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  39,
+                                  libdcp::Time (0, 0, 5, 198),
+                                  libdcp::Time (0, 0, 7, 115),
+                                  15,
+                                  libdcp::BOTTOM,
+                                  "My jacket was Idi Amin's",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 1),
+                                  libdcp::Time (0, 0, 0, 1)
+                                  ));
+                                                        
        s = subs.subtitles_at (libdcp::Time (0, 0, 7, 190));
        BOOST_CHECK_EQUAL (s.size(), 2);
-       BOOST_CHECK_EQUAL (s.front()->text(), "My corset was H.M. The Queen's");
-       BOOST_CHECK_EQUAL (s.front()->v_position(), 21);
-       BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 7, 177));
-       BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 11, 31));
-       BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
-       BOOST_CHECK_EQUAL (s.front()->italic(), true);
-       BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
-       BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
-       BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
-       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
-       BOOST_CHECK_EQUAL (s.back()->text(), "My large wonderbra");
-       BOOST_CHECK_EQUAL (s.back()->v_position(), 15);
-       BOOST_CHECK_EQUAL (s.back()->in(), libdcp::Time (0, 0, 7, 177));
-       BOOST_CHECK_EQUAL (s.back()->out(), libdcp::Time (0, 0, 11, 31));
-       BOOST_CHECK_EQUAL (s.back()->font(), "Arial");
-       BOOST_CHECK_EQUAL (s.back()->italic(), true);
-       BOOST_CHECK_EQUAL (s.back()->color(), libdcp::Color(255, 255, 255));
-       BOOST_CHECK_EQUAL (s.back()->size_in_pixels(1080), 53);
-       BOOST_CHECK_EQUAL (s.back()->effect(), libdcp::BORDER);
-       BOOST_CHECK_EQUAL (s.back()->effect_color(), libdcp::Color(0, 0, 0));
-       BOOST_CHECK_EQUAL (s.back()->v_align(), libdcp::BOTTOM);
-       
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  39,
+                                  libdcp::Time (0, 0, 7, 177),
+                                  libdcp::Time (0, 0, 11, 31),
+                                  21,
+                                  libdcp::BOTTOM,
+                                  "My corset was H.M. The Queen's",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 1),
+                                  libdcp::Time (0, 0, 0, 1)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  39,
+                                  libdcp::Time (0, 0, 7, 177),
+                                  libdcp::Time (0, 0, 11, 31),
+                                  15,
+                                  libdcp::BOTTOM,
+                                  "My large wonderbra",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 1),
+                                  libdcp::Time (0, 0, 0, 1)
+                                  ));
+
        s = subs.subtitles_at (libdcp::Time (0, 0, 11, 95));
        BOOST_CHECK_EQUAL (s.size(), 1);
-       BOOST_CHECK_EQUAL (s.front()->text(), "Once belonged to the Shah");
-       BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
-       BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 11, 94));
-       BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 13, 63));
-       BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
-       BOOST_CHECK_EQUAL (s.front()->italic(), false);
-       BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
-       BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
-       BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
-       BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
-       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  39,
+                                  libdcp::Time (0, 0, 11, 94),
+                                  libdcp::Time (0, 0, 13, 63),
+                                  15,
+                                  libdcp::BOTTOM,
+                                  "Once belonged to the Shah",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 1),
+                                  libdcp::Time (0, 0, 0, 1)
+                                  ));
 
        s = subs.subtitles_at (libdcp::Time (0, 0, 14, 42));
        BOOST_CHECK_EQUAL (s.size(), 1);
-       BOOST_CHECK_EQUAL (s.front()->text(), "And these are Roy Hattersley's jeans");
-       BOOST_CHECK_EQUAL (s.front()->v_position(), 15);
-       BOOST_CHECK_EQUAL (s.front()->in(), libdcp::Time (0, 0, 13, 104));
-       BOOST_CHECK_EQUAL (s.front()->out(), libdcp::Time (0, 0, 15, 177));
-       BOOST_CHECK_EQUAL (s.front()->font(), "Arial");
-       BOOST_CHECK_EQUAL (s.front()->italic(), false);
-       BOOST_CHECK_EQUAL (s.front()->color(), libdcp::Color(255, 255, 255));
-       BOOST_CHECK_EQUAL (s.front()->size_in_pixels(1080), 53);
-       BOOST_CHECK_EQUAL (s.front()->effect(), libdcp::BORDER);
-       BOOST_CHECK_EQUAL (s.front()->effect_color(), libdcp::Color(0, 0, 0));
-       BOOST_CHECK_EQUAL (s.front()->v_align(), libdcp::BOTTOM);
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  39,
+                                  libdcp::Time (0, 0, 13, 104),
+                                  libdcp::Time (0, 0, 15, 177),
+                                  15,
+                                  libdcp::BOTTOM,
+                                  "And these are Roy Hattersley's jeans",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 1),
+                                  libdcp::Time (0, 0, 0, 1)
+                                  ));
+}
+
+BOOST_AUTO_TEST_CASE (subtitles2)
+{
+       libdcp::SubtitleAsset subs ("test/data", "subs2.xml");
+
+       list<shared_ptr<libdcp::Subtitle> > s = subs.subtitles_at (libdcp::Time (0, 0, 42, 100));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 0, 41, 62),
+                                  libdcp::Time (0, 0, 43, 52),
+                                  89,
+                                  libdcp::TOP,
+                                  "At afternoon tea with John Peel",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 0, 41, 62),
+                                  libdcp::Time (0, 0, 43, 52),
+                                  95,
+                                  libdcp::TOP,
+                                  "I enquired if his accent was real",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 0, 50, 50));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 0, 50, 42),
+                                  libdcp::Time (0, 0, 52, 21),
+                                  89,
+                                  libdcp::TOP,
+                                  "He said \"out of the house",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 0, 50, 42),
+                                  libdcp::Time (0, 0, 52, 21),
+                                  95,
+                                  libdcp::TOP,
+                                  "I'm incredibly scouse",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 2, 300));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 2, 208),
+                                  libdcp::Time (0, 1, 4, 10),
+                                  89,
+                                  libdcp::TOP,
+                                  "At home it depends how I feel.\"",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 2, 208),
+                                  libdcp::Time (0, 1, 4, 10),
+                                  95,
+                                  libdcp::TOP,
+                                  "I spent a long weekend in Brighton",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 15, 50));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 15, 42),
+                                  libdcp::Time (0, 1, 16, 42),
+                                  89,
+                                  libdcp::TOP,
+                                  "With the legendary Miss Enid Blyton",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 15, 42),
+                                  libdcp::Time (0, 1, 16, 42),
+                                  95,
+                                  libdcp::TOP,
+                                  "She said \"you be Noddy",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 27, 200));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 27, 115),
+                                  libdcp::Time (0, 1, 28, 208),
+                                  89,
+                                  libdcp::TOP,
+                                  "That curious creature the Sphinx",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 27, 115),
+                                  libdcp::Time (0, 1, 28, 208),
+                                  95,
+                                  libdcp::TOP,
+                                  "Is smarter than anyone thinks",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 42, 300));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 42, 229),
+                                  libdcp::Time (0, 1, 45, 62),
+                                  89,
+                                  libdcp::TOP,
+                                  "It sits there and smirks",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 42, 229),
+                                  libdcp::Time (0, 1, 45, 62),
+                                  95,
+                                  libdcp::TOP,
+                                  "And you don't think it works",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 45, 200));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 45, 146),
+                                  libdcp::Time (0, 1, 47, 94),
+                                  89,
+                                  libdcp::TOP,
+                                  "Then when you're not looking, it winks.",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 45, 146),
+                                  libdcp::Time (0, 1, 47, 94),
+                                  95,
+                                  libdcp::TOP,
+                                  "When it snows you will find Sister Sledge",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 1, 47, 249));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 47, 146),
+                                  libdcp::Time (0, 1, 48, 167),
+                                  89,
+                                  libdcp::TOP,
+                                  "Out mooning, at night, on the ledge",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  false,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 1, 47, 146),
+                                  libdcp::Time (0, 1, 48, 167),
+                                  95,
+                                  libdcp::TOP,
+                                  "One storey down",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       s = subs.subtitles_at (libdcp::Time (0, 2, 6, 210));
+       BOOST_CHECK_EQUAL (s.size(), 2);
+       BOOST_CHECK_EQUAL (*(s.front().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 2, 5, 208),
+                                  libdcp::Time (0, 2, 7, 31),
+                                  89,
+                                  libdcp::TOP,
+                                  "HELLO",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+       BOOST_CHECK_EQUAL (*(s.back().get()), libdcp::Subtitle (
+                                  "Arial",
+                                  true,
+                                  libdcp::Color (255, 255, 255),
+                                  42,
+                                  libdcp::Time (0, 2, 5, 208),
+                                  libdcp::Time (0, 2, 7, 31),
+                                  95,
+                                  libdcp::TOP,
+                                  "WORLD",
+                                  libdcp::BORDER,
+                                  libdcp::Color (0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0),
+                                  libdcp::Time (0, 0, 0, 0)
+                                  ));
+
+       
+       
 }
 
 BOOST_AUTO_TEST_CASE (dcp_time)
@@ -192,6 +526,8 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (t.s, 34);
        BOOST_CHECK_EQUAL (t.m, 18);
        BOOST_CHECK_EQUAL (t.h, 11);
+       BOOST_CHECK_EQUAL (t.to_string(), "11:18:34:73");
+       BOOST_CHECK_EQUAL (t.to_ticks(), 1017923);
 
        libdcp::Time a (3, 2, 3, 4);
        libdcp::Time b (2, 3, 4, 5);
@@ -201,6 +537,8 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (r.m, 58);
        BOOST_CHECK_EQUAL (r.s, 58);
        BOOST_CHECK_EQUAL (r.t, 249);
+       BOOST_CHECK_EQUAL (r.to_string(), "0:58:58:249");
+       BOOST_CHECK_EQUAL (r.to_ticks(), 88699);
 
        a = libdcp::Time (1, 58, 56, 240);
        b = libdcp::Time (1, 7, 12, 120);
@@ -209,6 +547,8 @@ BOOST_AUTO_TEST_CASE (dcp_time)
        BOOST_CHECK_EQUAL (r.m, 6);
        BOOST_CHECK_EQUAL (r.s, 9);
        BOOST_CHECK_EQUAL (r.t, 110);
+       BOOST_CHECK_EQUAL (r.to_string(), "3:6:9:110");
+       BOOST_CHECK_EQUAL (r.to_ticks(), 279335);
 
        a = libdcp::Time (24, 12, 6, 3);
        b = libdcp::Time (16, 8, 4, 2);
@@ -222,18 +562,20 @@ BOOST_AUTO_TEST_CASE (color)
        BOOST_CHECK_EQUAL (c.r, 255);
        BOOST_CHECK_EQUAL (c.g, 0);
        BOOST_CHECK_EQUAL (c.b, 0);
+       BOOST_CHECK_EQUAL (c.to_argb_string(), "FFFF0000");
 
        c = libdcp::Color ("FF00FF00");
 
        BOOST_CHECK_EQUAL (c.r, 0);
        BOOST_CHECK_EQUAL (c.g, 255);
        BOOST_CHECK_EQUAL (c.b, 0);
+       BOOST_CHECK_EQUAL (c.to_argb_string(), "FF00FF00");
 
        c = libdcp::Color ("FF0000FF");
 
        BOOST_CHECK_EQUAL (c.r, 0);
        BOOST_CHECK_EQUAL (c.g, 0);
        BOOST_CHECK_EQUAL (c.b, 255);
-}
-
+       BOOST_CHECK_EQUAL (c.to_argb_string(), "FF0000FF");
        
+}