diff options
Diffstat (limited to 'test/long.cc')
| -rw-r--r-- | test/long.cc | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/test/long.cc b/test/long.cc new file mode 100644 index 000000000..6be1ef2ff --- /dev/null +++ b/test/long.cc @@ -0,0 +1,156 @@ +/* + Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + + This program 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include <fstream> +#include <iostream> +#include <boost/filesystem.hpp> +#include <boost/algorithm/string/predicate.hpp> +#include "format.h" +#include "film.h" +#include "filter.h" +#include "job_manager.h" +#include "util.h" +#include "exceptions.h" +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE dvdomatic_test +#include <boost/test/unit_test.hpp> + +using namespace std; +using namespace boost; + +bool +compare (string ref, string test, list<string> exclude) +{ + ifstream r (ref.c_str ()); + ifstream t (test.c_str ()); + + while (r.good ()) { + string rl; + getline (r, rl); + string tl; + getline (t, tl); + + bool ex = false; + for (list<string>::iterator i = exclude.begin(); i != exclude.end(); ++i) { + if (rl.find (*i) != string::npos && tl.find (*i) != string::npos) { + ex = true; + } + } + + if (!ex && rl != tl) { + cerr << "Fail:\n" << rl << "\n" << tl << "\n"; + return true; + } + } + + return false; +} + + +BOOST_AUTO_TEST_CASE (make_dcp_test) +{ + dvdomatic_setup (); + + string const dcp_name = "FOO-BAR-BAZ"; + + string const ref_film = "test/film"; + string const ref_dcp = ref_film + "/" + dcp_name; + string const ref_pkl = ref_dcp + "/bdb4ae0a-0d09-4554-8557-0b4260f4c359_pkl.xml"; + string const ref_cpl = ref_dcp + "/08dd6e45-83b5-41dc-9179-d7c59f597a12_cpl.xml"; + string const test_film = "build/test/film"; + string const test_dcp = test_film + "/" + dcp_name; + + if (boost::filesystem::exists (test_film)) { + boost::filesystem::remove_all (test_film); + } + + Film f (test_film, false); + f.write_metadata (); + boost::filesystem::copy_file ("test/zombie.mpeg", "build/test/film/zombie.mpeg"); + f.set_content ("zombie.mpeg"); + f.set_dcp_content_type (DCPContentType::from_pretty_name ("Test")); + + BOOST_CHECK_EQUAL (f.audio_channels(), 2); + BOOST_CHECK_EQUAL (f.audio_sample_rate(), 48000); + BOOST_CHECK_EQUAL (audio_sample_format_to_string (f.audio_sample_format()), "S16"); + + f.set_format (Format::from_nickname ("Flat")); + + f.make_dcp (true, 5); + + while (JobManager::instance()->work_to_do ()) { + sleep (1); + } + + { + stringstream s; + s << "diff -ur test/film/j2c " << test_film << "/j2c"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + { + stringstream s; + s << "diff -ur test/film/wavs " << test_film << "/wavs"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + { + stringstream s; + s << "diff -u test/film/metadata " << test_film << "/metadata"; + int const r = ::system (s.str().c_str ()); + BOOST_CHECK_EQUAL (r, 0); + } + + /* Find the test pkl and cpl */ + string test_pkl; + string test_cpl; + + for (filesystem::directory_iterator i = filesystem::directory_iterator (test_dcp); i != filesystem::directory_iterator(); ++i) { +#if BOOST_FILESYSTEM_VERSION == 3 + string const t = filesystem::path(*i).generic_string (); +#else + string const t = i->string (); +#endif + if (algorithm::ends_with (t, "cpl.xml")) { + test_cpl = t; + } else if (algorithm::ends_with (t, "pkl.xml")) { + test_pkl = t; + } + } + + { + list<string> exclude; + exclude.push_back ("urn:uuid"); + exclude.push_back ("urn:uri"); + exclude.push_back ("<IssueDate>"); + exclude.push_back ("<LabelText>"); + exclude.push_back ("<Hash>"); + BOOST_CHECK_EQUAL (compare (ref_cpl, test_cpl, exclude), false); + } + + { + list<string> exclude; + exclude.push_back ("urn:uuid"); + exclude.push_back ("<IssueDate>"); + exclude.push_back ("<Hash>"); + BOOST_CHECK_EQUAL (compare (ref_pkl, test_pkl, exclude), false); + } +} |
