Support single quotes in font color tags.
[libsub.git] / test / subrip_reader_test.cc
index 818b6ad3ecd01f2d6335f02eabc8637e1e463517..8f23abb2556ea0962b35f6a1ec815eaebd0b32b1 100644 (file)
@@ -307,6 +307,24 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test)
        ++i;
        r._subs.clear ();
 
+       rs = sub::RawSubtitle();
+       r.convert_line ("<B>This is <I>nesting</I> of subtitles</B>", rs);
+       BOOST_CHECK_EQUAL (r._subs.size(), 3);
+       i = r._subs.begin();
+       BOOST_CHECK_EQUAL (i->text, "This is ");
+       BOOST_CHECK_EQUAL (i->bold, true);
+       BOOST_CHECK_EQUAL (i->italic, false);
+       ++i;
+       BOOST_CHECK_EQUAL (i->text, "nesting");
+       BOOST_CHECK_EQUAL (i->bold, true);
+       BOOST_CHECK_EQUAL (i->italic, true);
+       ++i;
+       BOOST_CHECK_EQUAL (i->text, " of subtitles");
+       BOOST_CHECK_EQUAL (i->bold, true);
+       BOOST_CHECK_EQUAL (i->italic, false);
+       ++i;
+       r._subs.clear ();
+
        rs = sub::RawSubtitle();
        r.convert_line ("<font color=\"#ff00ff\">simple color</font>", rs);
        BOOST_CHECK_EQUAL (r._subs.size(), 1);
@@ -317,6 +335,17 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test)
        BOOST_CHECK_CLOSE (r._subs.front().colour.b, 1, 0.1);
        r._subs.clear ();
 
+       /* single quotes are apparently also allowed */
+       rs = sub::RawSubtitle();
+       r.convert_line("<font color=\'#ff00ff\'>simple color</font>", rs);
+       BOOST_CHECK_EQUAL(r._subs.size(), 1);
+       BOOST_CHECK_EQUAL(r._subs.front().text, "simple color");
+       BOOST_CHECK_EQUAL(r._subs.front().bold, false);
+       BOOST_CHECK_CLOSE(r._subs.front().colour.r, 1, 0.1);
+       BOOST_CHECK(fabs(r._subs.front().colour.g) < 0.01);
+       BOOST_CHECK_CLOSE(r._subs.front().colour.b, 1, 0.1);
+       r._subs.clear();
+
        rs = sub::RawSubtitle();
        r.convert_line ("<font color=\"#FF00FF\">simple color in capitals</font>", rs);
        BOOST_CHECK_EQUAL (r._subs.size(), 1);
@@ -377,14 +406,36 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test)
        BOOST_CHECK (fabs (i->colour.g) < 0.01);
        BOOST_CHECK_CLOSE (i->colour.b, 1, 0.1);
        r._subs.clear ();
+
+       rs = sub::RawSubtitle();
+       r.convert_line("<font color=\"#0000ffdd\">some blue text with alpha</font>", rs);
+       BOOST_CHECK_EQUAL(r._subs.size(), 1);
+       i = r._subs.begin();
+       BOOST_CHECK_EQUAL(i->text, "some blue text with alpha");
+       BOOST_CHECK_EQUAL(i->bold, false);
+       BOOST_CHECK(fabs(i->colour.r) < 0.01);
+       BOOST_CHECK(fabs(i->colour.g) < 0.01);
+       BOOST_CHECK_CLOSE(i->colour.b, 1, 0.1);
+       r._subs.clear();
+
+       rs = sub::RawSubtitle();
+       r.convert_line ("<< angle brackets but no HTML >>", rs);
+       BOOST_CHECK_EQUAL (r._subs.size(), 1);
+       i = r._subs.begin ();
+       BOOST_CHECK_EQUAL (i->text, "<< angle brackets but no HTML >>");
+       r._subs.clear();
 }
 
 /** Test SubripReader::convert_time */
 BOOST_AUTO_TEST_CASE (subrip_reader_convert_time_test)
 {
        sub::SubripReader reader;
-       BOOST_CHECK_EQUAL (reader.convert_time ("00:03:10,500"), sub::Time::from_hms (0, 3, 10, 500));
-       BOOST_CHECK_EQUAL (reader.convert_time ("04:19:51,782"), sub::Time::from_hms (4, 19, 51, 782));
+       auto t = reader.convert_time("00:03:10,500", ",");
+       BOOST_REQUIRE(t);
+       BOOST_CHECK_EQUAL(*t, sub::Time::from_hms(0, 3, 10, 500));
+       t = reader.convert_time("04:19:51,782", ",");
+       BOOST_REQUIRE(t);
+       BOOST_CHECK_EQUAL(*t, sub::Time::from_hms(4, 19, 51, 782));
 }
 
 static void
@@ -576,6 +627,7 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test5)
        BOOST_CHECK_CLOSE (r._subs.front().colour.b, 3.0 / 255, 0.1);
 }
 
+
 /** Test alignment */
 BOOST_AUTO_TEST_CASE (subrip_reader_test6)
 {
@@ -631,3 +683,27 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test6)
        r._subs.clear ();
 }
 
+
+BOOST_AUTO_TEST_CASE(subrip_with_unicode_line_separator_test)
+{
+       auto f = fopen ("test/data/newline.srt", "r");
+       BOOST_REQUIRE(f);
+       sub::SubripReader reader(f);
+       fclose(f);
+       auto subs = sub::collect<std::vector<sub::Subtitle>>(reader.subtitles());
+
+       BOOST_REQUIRE_EQUAL(subs.size(), 2U);
+
+       BOOST_REQUIRE_EQUAL(subs[0].lines.size(), 2U);
+       BOOST_REQUIRE_EQUAL(subs[0].lines[0].blocks.size(), 1U);
+       BOOST_CHECK_EQUAL(subs[0].lines[0].blocks[0].text, "Du fühlst dich danach besser.");
+       BOOST_REQUIRE_EQUAL(subs[0].lines[1].blocks.size(), 1U);
+       BOOST_CHECK_EQUAL(subs[0].lines[1].blocks[0].text, "Okay, Kleiner?");
+
+       BOOST_REQUIRE_EQUAL(subs[1].lines.size(), 2U);
+       BOOST_REQUIRE_EQUAL(subs[1].lines[0].blocks.size(), 1U);
+       BOOST_CHECK_EQUAL(subs[1].lines[0].blocks[0].text, "Sie kann es nicht machen");
+       BOOST_REQUIRE_EQUAL(subs[1].lines[1].blocks.size(), 1U);
+       BOOST_CHECK_EQUAL(subs[1].lines[1].blocks[0].text, "wenn du dich bewegst.");
+}
+