Move all ostream operator<< into some test-only stream_operators.{cc,h} files.
authorCarl Hetherington <cth@carlh.net>
Thu, 21 Jan 2021 16:10:19 +0000 (17:10 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 21 Jan 2021 18:19:49 +0000 (19:19 +0100)
14 files changed:
src/subtitle_string.cc
src/types.cc
src/types.h
test/cpl_metadata_test.cc
test/decryption_test.cc
test/effect_test.cc
test/read_dcp_test.cc
test/read_smpte_subtitle_test.cc
test/reel_asset_test.cc
test/rgb_xyz_test.cc
test/stream_operators.cc [new file with mode: 0644]
test/stream_operators.h [new file with mode: 0644]
test/util_test.cc
test/wscript

index f5f8c8acb34e60d0bc9332681a9763c06213278a..0f89291e893b6175a55c10c2f9400d1f89723f18 100644 (file)
@@ -144,11 +144,13 @@ dcp::operator<< (ostream& s, SubtitleString const & sub)
                s << "underlined, ";
        }
 
-       s << "size " << sub.size() << ", aspect " << sub.aspect_adjust() << ", colour " << sub.colour()
+       s << "size " << sub.size() << ", aspect " << sub.aspect_adjust()
+         << ", colour (" << sub.colour().r << ", " << sub.colour().g << ", " << sub.colour().b << ")"
          << ", vpos " << sub.v_position() << ", valign " << ((int) sub.v_align())
          << ", hpos " << sub.h_position() << ", halign " << ((int) sub.h_align())
          << ", direction " << ((int) sub.direction())
-         << ", effect " << ((int) sub.effect()) << ", effect colour " << sub.effect_colour();
+         << ", effect " << ((int) sub.effect())
+         << ", effect colour (" << sub.effect_colour().r << ", " << sub.effect_colour().g << ", " << sub.effect_colour().b << ")";
 
        return s;
 }
index 9484939c707cbd7d4cc8897d98d6fc26ba6b37a2..6058ea10ae616760d911b7a4d01bc5afc03317ce 100644 (file)
@@ -61,11 +61,6 @@ bool dcp::operator!= (dcp::Size const & a, dcp::Size const & b)
        return !(a == b);
 }
 
-ostream& dcp::operator<< (ostream& s, dcp::Size const & a)
-{
-       s << a.width << "x" << a.height;
-       return s;
-}
 
 /** Construct a Fraction from a string of the form <numerator> <denominator>
  *  e.g. "1 3".
@@ -99,12 +94,6 @@ dcp::operator!= (Fraction const & a, Fraction const & b)
        return (a.numerator != b.numerator || a.denominator != b.denominator);
 }
 
-ostream&
-dcp::operator<< (ostream& s, Fraction const & f)
-{
-       s << f.numerator << "/" << f.denominator;
-       return s;
-}
 
 /** Construct a Colour, initialising it to black. */
 Colour::Colour ()
@@ -180,12 +169,6 @@ dcp::operator!= (Colour const & a, Colour const & b)
        return !(a == b);
 }
 
-ostream &
-dcp::operator<< (ostream& s, Colour const & c)
-{
-       s << "(" << c.r << ", " << c.g << ", " << c.b << ")";
-       return s;
-}
 
 string
 dcp::effect_to_string (Effect e)
@@ -217,14 +200,6 @@ dcp::string_to_effect (string s)
 }
 
 
-std::ostream&
-dcp::operator<< (std::ostream& s, Effect e)
-{
-       s << effect_to_string(e);
-       return s;
-}
-
-
 string
 dcp::halign_to_string (HAlign h)
 {
@@ -394,14 +369,6 @@ dcp::content_kind_from_string (string kind)
 }
 
 
-ostream&
-dcp::operator<< (ostream& s, ContentKind c)
-{
-       s << content_kind_to_string(c);
-       return s;
-}
-
-
 string
 dcp::marker_to_string (dcp::Marker m)
 {
@@ -479,14 +446,6 @@ dcp::operator== (Rating const & a, Rating const & b)
        return a.agency == b.agency && a.label == b.label;
 }
 
-ostream &
-dcp::operator<< (ostream& s, Rating const & r)
-{
-       s << r.agency << " " << r.label;
-       return s;
-}
-
-
 ContentVersion::ContentVersion ()
        : id ("urn:uuid:" + make_uuid())
 {
@@ -702,65 +661,6 @@ dcp::string_to_status (string s)
 }
 
 
-ostream&
-dcp::operator<<(ostream& s, Status t)
-{
-       s << status_to_string(t);
-       return s;
-}
-
-
-ostream&
-dcp::operator<<(ostream& s, dcp::Channel c)
-{
-       switch (c) {
-       case Channel::LEFT:
-               s << "left(0)";
-               break;
-       case Channel::RIGHT:
-               s << "right(1)";
-               break;
-       case Channel::CENTRE:
-               s << "centre(2)";
-               break;
-       case Channel::LFE:
-               s << "lfe(3)";
-               break;
-       case Channel::LS:
-               s << "ls(4)";
-               break;
-       case Channel::RS:
-               s << "rs(5)";
-               break;
-       case Channel::HI:
-               s << "hi(6)";
-               break;
-       case Channel::VI:
-               s << "vi(7)";
-               break;
-       case Channel::BSL:
-               s << "bsl(10)";
-               break;
-       case Channel::BSR:
-               s << "bsr(11)";
-               break;
-       case Channel::MOTION_DATA:
-               s << "motion_data(12)";
-               break;
-       case Channel::SYNC_SIGNAL:
-               s << "sync_signal(13)";
-               break;
-       case Channel::SIGN_LANGUAGE:
-               s << "sign_language(14)";
-               break;
-       case Channel::CHANNEL_COUNT:
-               s << "(16)";
-               break;
-       }
-       return s;
-}
-
-
 Channel
 dcp::mca_id_to_channel (string id)
 {
@@ -938,50 +838,3 @@ dcp::used_audio_channels ()
        return c;
 }
 
-
-ostream&
-dcp::operator<< (ostream& s, NoteType t)
-{
-       switch (t) {
-       case NoteType::PROGRESS:
-               s << "progress";
-               break;
-       case NoteType::ERROR:
-               s << "error";
-               break;
-       case NoteType::NOTE:
-               s << "note";
-               break;
-       }
-       return s;
-}
-
-
-ostream&
-dcp::operator<< (ostream& s, MCASoundField f)
-{
-       switch (f) {
-       case MCASoundField::FIVE_POINT_ONE:
-               s << "5.1";
-               break;
-       case MCASoundField::SEVEN_POINT_ONE:
-               s << "7.1";
-               break;
-       }
-       return s;
-}
-
-
-ostream&
-dcp::operator<< (ostream& s, Standard t)
-{
-       switch (t) {
-       case Standard::INTEROP:
-               s << "interop";
-               break;
-       case Standard::SMPTE:
-               s << "smpte";
-               break;
-       }
-       return s;
-}
index 1f74f7abd32b2d773e65daa9354429235a7cde6f..c04b254362670aff9c9532b5a9b354abc8c0c820 100644 (file)
@@ -76,7 +76,6 @@ struct Size
 
 extern bool operator== (Size const & a, Size const & b);
 extern bool operator!= (Size const & a, Size const & b);
-extern std::ostream& operator<< (std::ostream& s, Size const & a);
 
 /** Identifier for a sound channel */
 enum class Channel {
@@ -99,7 +98,6 @@ enum class Channel {
 };
 
 std::vector<dcp::Channel> used_audio_channels ();
-std::ostream& operator<< (std::ostream& s, Channel c);
 
 
 enum class MCASoundField
@@ -113,7 +111,6 @@ extern std::string channel_to_mca_id (Channel c, MCASoundField field);
 extern Channel mca_id_to_channel (std::string);
 extern std::string channel_to_mca_name (Channel c, MCASoundField field);
 extern ASDCP::UL channel_to_mca_universal_label (Channel c, MCASoundField field, ASDCP::Dictionary const* dict);
-std::ostream& operator<< (std::ostream& s, MCASoundField f);
 
 
 enum class ContentKind
@@ -134,7 +131,6 @@ enum class ContentKind
 
 extern std::string content_kind_to_string (ContentKind kind);
 extern ContentKind content_kind_from_string (std::string kind);
-std::ostream& operator<<(std::ostream& s, ContentKind c);
 
 enum class Effect
 {
@@ -145,7 +141,6 @@ enum class Effect
 
 extern std::string effect_to_string (Effect e);
 extern Effect string_to_effect (std::string s);
-std::ostream& operator<< (std::ostream& s, Effect e);
 
 enum class HAlign
 {
@@ -212,7 +207,6 @@ public:
 
 extern bool operator== (Fraction const & a, Fraction const & b);
 extern bool operator!= (Fraction const & a, Fraction const & b);
-extern std::ostream& operator<< (std::ostream& s, Fraction const & f);
 
 /** @struct EqualityOptions
  *  @brief  A class to describe what "equality" means for a particular test.
@@ -267,14 +261,12 @@ enum class NoteType {
        NOTE
 };
 
-std::ostream& operator<< (std::ostream& s, NoteType t);
 
 enum class Standard {
        INTEROP,
        SMPTE
 };
 
-std::ostream& operator<< (std::ostream& s, Standard t);
 
 enum class Formulation {
        MODIFIED_TRANSITIONAL_1,
@@ -305,7 +297,6 @@ public:
 
 extern bool operator== (Colour const & a, Colour const & b);
 extern bool operator!= (Colour const & a, Colour const & b);
-extern std::ostream & operator<< (std::ostream & s, Colour const & c);
 
 typedef boost::function<void (NoteType, std::string)> NoteHandler;
 
@@ -354,7 +345,6 @@ public:
 };
 
 extern bool operator== (Rating const & a, Rating const & b);
-extern std::ostream& operator<< (std::ostream& s, Rating const & r);
 
 
 enum class Status
@@ -367,7 +357,6 @@ enum class Status
 
 extern std::string status_to_string (Status s);
 extern Status string_to_status (std::string s);
-std::ostream& operator<< (std::ostream& s, Status t);
 
 
 class ContentVersion
index 45afecb33d5b6f71068ad0aec14d84d131cd636d..c9ee3b9b834b2e805f2f37d7c75c44c554cd5471 100644 (file)
@@ -38,6 +38,7 @@
 #include "language_tag.h"
 #include "reel.h"
 #include "reel_subtitle_asset.h"
+#include "stream_operators.h"
 #include "test.h"
 #include <memory>
 #include <boost/test/unit_test.hpp>
index 3c4c0d6120dfc7f00ea48e63784e7a7afe106481..77f349bd1940c30937ef9df8e3b0c79fd13fece1 100644 (file)
@@ -44,6 +44,7 @@
 #include "openjpeg_image.h"
 #include "rgb_xyz.h"
 #include "colour_conversion.h"
+#include "stream_operators.h"
 #include <boost/test/unit_test.hpp>
 #include <boost/scoped_array.hpp>
 
index 3be4b8f98d544603eb9ed7d71a993b259cd3501f..c56b64514ef1f2303cd75d37cf33ce376044b9a3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -32,6 +32,7 @@
 */
 
 #include "types.h"
+#include "stream_operators.h"
 #include "exceptions.h"
 #include <boost/test/unit_test.hpp>
 
index 9c5450914a10a12f250684deeae60ca6a50e773b..f995353efd0f59c70ce7688e027be3f5baf6efa8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -35,6 +35,7 @@
 #include <boost/optional/optional_io.hpp>
 #include "dcp.h"
 #include "cpl.h"
+#include "stream_operators.h"
 
 using std::list;
 using std::shared_ptr;
index 15fc5dd887ea425716f9b8839da96e84e633b29f..49fd1f6271c25f3f6b28d593a930efb77f13992f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2015-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2015-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -36,6 +36,7 @@
 #include "local_time.h"
 #include "smpte_load_font_node.h"
 #include "subtitle_image.h"
+#include "stream_operators.h"
 #include <boost/test/unit_test.hpp>
 #include <boost/optional.hpp>
 #include <boost/optional/optional_io.hpp>
index bf609c2c059669e2ef96c6d9f17eb7449e9c0812..e0c7f781459e5c9621e39e9cd18f7d41aa026e2e 100644 (file)
@@ -35,6 +35,7 @@
 #include "reel_subtitle_asset.h"
 #include <libcxml/cxml.h>
 #include <boost/test/unit_test.hpp>
+#include "stream_operators.h"
 #include "test.h"
 
 
index 54f6174ca61a77d5be608e98b37f3d7f0da21783..69a4d612781c8ab75a3ed8b53e253a1e15772c00 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of libdcp.
 
@@ -34,6 +34,7 @@
 #include "rgb_xyz.h"
 #include "openjpeg_image.h"
 #include "colour_conversion.h"
+#include "stream_operators.h"
 #include <boost/test/unit_test.hpp>
 #include <boost/bind.hpp>
 #include <boost/scoped_array.hpp>
diff --git a/test/stream_operators.cc b/test/stream_operators.cc
new file mode 100644 (file)
index 0000000..5e4f88e
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+    Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+    This file is part of libdcp.
+
+    libdcp is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    libdcp is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
+*/
+
+
+/** @file  test/stream_operators.cc
+ *  @brief A collection of operator<< methods so that we can use boost test macros with libdcp's types.
+ */
+
+
+#include "stream_operators.h"
+#include "types.h"
+#include "verify.h"
+#include <iostream>
+
+
+using std::ostream;
+
+
+ostream&
+dcp::operator<< (ostream& s, Size const & a)
+{
+       s << a.width << "x" << a.height;
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, Fraction const & f)
+{
+       s << f.numerator << "/" << f.denominator;
+       return s;
+}
+
+
+ostream &
+dcp::operator<< (ostream& s, Colour const & c)
+{
+       s << "(" << c.r << ", " << c.g << ", " << c.b << ")";
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (std::ostream& s, Effect e)
+{
+       s << effect_to_string(e);
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, ContentKind c)
+{
+       s << content_kind_to_string(c);
+       return s;
+}
+
+
+ostream &
+dcp::operator<< (ostream& s, Rating const & r)
+{
+       s << r.agency << " " << r.label;
+       return s;
+}
+
+
+ostream&
+dcp::operator<<(ostream& s, Status t)
+{
+       s << status_to_string(t);
+       return s;
+}
+
+
+ostream&
+dcp::operator<<(ostream& s, Channel c)
+{
+       switch (c) {
+       case Channel::LEFT:
+               s << "left(0)";
+               break;
+       case Channel::RIGHT:
+               s << "right(1)";
+               break;
+       case Channel::CENTRE:
+               s << "centre(2)";
+               break;
+       case Channel::LFE:
+               s << "lfe(3)";
+               break;
+       case Channel::LS:
+               s << "ls(4)";
+               break;
+       case Channel::RS:
+               s << "rs(5)";
+               break;
+       case Channel::HI:
+               s << "hi(6)";
+               break;
+       case Channel::VI:
+               s << "vi(7)";
+               break;
+       case Channel::BSL:
+               s << "bsl(10)";
+               break;
+       case Channel::BSR:
+               s << "bsr(11)";
+               break;
+       case Channel::MOTION_DATA:
+               s << "motion_data(12)";
+               break;
+       case Channel::SYNC_SIGNAL:
+               s << "sync_signal(13)";
+               break;
+       case Channel::SIGN_LANGUAGE:
+               s << "sign_language(14)";
+               break;
+       case Channel::CHANNEL_COUNT:
+               s << "(16)";
+               break;
+       }
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, NoteType t)
+{
+       switch (t) {
+       case NoteType::PROGRESS:
+               s << "progress";
+               break;
+       case NoteType::ERROR:
+               s << "error";
+               break;
+       case NoteType::NOTE:
+               s << "note";
+               break;
+       }
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, MCASoundField f)
+{
+       switch (f) {
+       case MCASoundField::FIVE_POINT_ONE:
+               s << "5.1";
+               break;
+       case MCASoundField::SEVEN_POINT_ONE:
+               s << "7.1";
+               break;
+       }
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, Standard t)
+{
+       switch (t) {
+       case Standard::INTEROP:
+               s << "interop";
+               break;
+       case Standard::SMPTE:
+               s << "smpte";
+               break;
+       }
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, VerificationNote::Type t)
+{
+       switch (t) {
+       case VerificationNote::Type::ERROR:
+               s << "error";
+               break;
+       case VerificationNote::Type::BV21_ERROR:
+               s << "bv21_error";
+               break;
+       case VerificationNote::Type::WARNING:
+               s << "warning";
+               break;
+       }
+       return s;
+}
+
+
+ostream&
+dcp::operator<< (ostream& s, VerificationNote::Code c)
+{
+       s << static_cast<int>(c);
+       return s;
+}
diff --git a/test/stream_operators.h b/test/stream_operators.h
new file mode 100644 (file)
index 0000000..862de69
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    Copyright (C) 2021 Carl Hetherington <cth@carlh.net>
+
+    This file is part of libdcp.
+
+    libdcp is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    libdcp is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with libdcp.  If not, see <http://www.gnu.org/licenses/>.
+
+    In addition, as a special exception, the copyright holders give
+    permission to link the code of portions of this program with the
+    OpenSSL library under certain conditions as described in each
+    individual source file, and distribute linked combinations
+    including the two.
+
+    You must obey the GNU General Public License in all respects
+    for all of the code used other than OpenSSL.  If you modify
+    file(s) with this exception, you may extend this exception to your
+    version of the file(s), but you are not obligated to do so.  If you
+    do not wish to do so, delete this exception statement from your
+    version.  If you delete this exception statement from all source
+    files in the program, then also delete it here.
+*/
+
+
+#include "types.h"
+#include "verify.h"
+
+
+namespace dcp {
+
+std::ostream& operator<< (std::ostream& s, Size const& a);
+std::ostream& operator<< (std::ostream& s, Channel c);
+std::ostream& operator<< (std::ostream& s, MCASoundField f);
+std::ostream& operator<< (std::ostream& s, ContentKind c);
+std::ostream& operator<< (std::ostream& s, Effect e);
+std::ostream& operator<< (std::ostream& s, Fraction const& f);
+std::ostream& operator<< (std::ostream& s, NoteType t);
+std::ostream& operator<< (std::ostream& s, Standard t);
+std::ostream& operator<< (std::ostream& s, Colour const& c);
+std::ostream& operator<< (std::ostream& s, Rating const& r);
+std::ostream& operator<< (std::ostream& s, Status t);
+std::ostream& operator<< (std::ostream& s, VerificationNote::Code c);
+std::ostream& operator<< (std::ostream& s, VerificationNote::Type t);
+}
+
index 51a5dab68fbb3b6bdaba8433e6dd043ef53aa804..8ca7df44f4cf2d6ddb70e4feb14325d10471a9dd 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "util.h"
 #include "local_time.h"
+#include "stream_operators.h"
 #include <boost/test/unit_test.hpp>
 #include <fstream>
 
index 9a8a7b53d62d03f0886ef8b9bc98cb8c071c822a..a25b2cd55226b996e63b06b4e23ee1b837421470 100644 (file)
@@ -1,5 +1,5 @@
 #
-#    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
+#    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 #
 #    This file is part of libdcp.
 #
@@ -99,6 +99,7 @@ def build(bld):
                  smpte_load_font_test.cc
                  smpte_subtitle_test.cc
                  sound_frame_test.cc
+                 stream_operators.cc
                  sync_test.cc
                  test.cc
                  util_test.cc