Add some tests.
authorCarl Hetherington <cth@carlh.net>
Tue, 8 Aug 2023 21:53:42 +0000 (23:53 +0200)
committerCarl Hetherington <cth@carlh.net>
Wed, 9 Aug 2023 08:18:46 +0000 (10:18 +0200)
test/playlist_test.cc [new file with mode: 0644]
test/wscript

diff --git a/test/playlist_test.cc b/test/playlist_test.cc
new file mode 100644 (file)
index 0000000..e2b9f3f
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+    Copyright (C) 2023 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic 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.
+
+    DCP-o-matic 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 DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#include "lib/content.h"
+#include "lib/content_factory.h"
+#include "lib/film.h"
+#include "lib/playlist.h"
+#include "test.h"
+#include <boost/test/unit_test.hpp>
+
+
+using std::shared_ptr;
+using std::vector;
+
+
+static
+shared_ptr<Film>
+setup(vector<shared_ptr<Content>>& content, vector<dcpomatic::DCPTime>& positions, vector<dcpomatic::DCPTime>& lengths)
+{
+       for (auto i = 0; i < 3; ++i) {
+               content.push_back(content_factory("test/data/flat_red.png")[0]);
+       }
+
+       auto film = new_test_film2("playlist_move_later_test", content);
+
+       for (auto i: content) {
+               positions.push_back(i->position());
+       }
+
+       for (auto i: content) {
+               lengths.push_back(i->length_after_trim(film));
+       }
+
+       return film;
+}
+
+
+BOOST_AUTO_TEST_CASE(playlist_move_later_test1)
+{
+       vector<shared_ptr<Content>> content;
+       vector<dcpomatic::DCPTime> positions;
+       vector<dcpomatic::DCPTime> lengths;
+       auto film = setup(content, positions, lengths);
+
+       film->move_content_later(content[1]);
+
+       auto moved_content = film->content();
+       BOOST_REQUIRE_EQUAL(moved_content.size(), 3U);
+
+       BOOST_CHECK_EQUAL(moved_content[0], content[0]);
+       BOOST_CHECK_EQUAL(moved_content[1], content[2]);
+       BOOST_CHECK_EQUAL(moved_content[2], content[1]);
+
+       BOOST_CHECK(content[0]->position() == positions[0]);
+       BOOST_CHECK(content[1]->position() == positions[1] + lengths[2]);
+       BOOST_CHECK(content[2]->position() == positions[1]);
+}
+
+
+BOOST_AUTO_TEST_CASE(playlist_move_later_test2)
+{
+       vector<shared_ptr<Content>> content;
+       vector<dcpomatic::DCPTime> positions;
+       vector<dcpomatic::DCPTime> lengths;
+       auto film = setup(content, positions, lengths);
+
+       film->move_content_later(content[0]);
+
+       auto moved_content = film->content();
+       BOOST_REQUIRE_EQUAL(moved_content.size(), 3U);
+
+       BOOST_CHECK_EQUAL(moved_content[0], content[1]);
+       BOOST_CHECK_EQUAL(moved_content[1], content[0]);
+       BOOST_CHECK_EQUAL(moved_content[2], content[2]);
+
+       BOOST_CHECK(content[0]->position() == positions[0] + lengths[1]);
+       BOOST_CHECK(content[1]->position() == positions[0]);
+       BOOST_CHECK(content[2]->position() == positions[2]);
+}
+
index ccace40e76245e2bf22d54b18563882fa9857657..12cc0506f530afdae5eead6a675b37ce8236d94d 100644 (file)
@@ -123,6 +123,7 @@ def build(bld):
                  overlap_video_test.cc
                  pixel_formats_test.cc
                  player_test.cc
+                 playlist_test.cc
                  pulldown_detect_test.cc
                  ratio_test.cc
                  release_notes_test.cc