return;
}
- xmlpp::Element::NodeList ref_children = ref->get_children ();
- xmlpp::Element::NodeList test_children = test->get_children ();
- BOOST_REQUIRE_MESSAGE (
- ref_children.size () == test_children.size (),
- "child counts of " << ref->get_name() << " differ; ref has " << ref_children.size() << ", test has " << test_children.size()
- );
+ auto whitespace_content = [](xmlpp::Node* node) {
+ auto content = dynamic_cast<xmlpp::ContentNode*>(node);
+ return content && content->get_content().find_first_not_of(" \t\r\n") == string::npos;
+ };
+
+ auto ref_children = ref->get_children ();
+ auto test_children = test->get_children ();
+
+ auto k = ref_children.begin ();
+ auto l = test_children.begin ();
+ while (k != ref_children.end() && l != test_children.end()) {
+
+ if (dynamic_cast<xmlpp::CommentNode*>(*k)) {
+ ++k;
+ continue;
+ }
+
+ if (dynamic_cast<xmlpp::CommentNode*>(*l)) {
+ ++l;
+ continue;
+ }
- xmlpp::Element::NodeList::iterator k = ref_children.begin ();
- xmlpp::Element::NodeList::iterator l = test_children.begin ();
- while (k != ref_children.end ()) {
+ if (whitespace_content(*k) && ignore_whitespace) {
+ ++k;
+ continue;
+ }
+
+ if (whitespace_content(*l) && ignore_whitespace) {
+ ++l;
+ continue;
+ }
/* XXX: should be doing xmlpp::EntityReference, xmlpp::XIncludeEnd, xmlpp::XIncludeStart */
- xmlpp::Element* ref_el = dynamic_cast<xmlpp::Element*> (*k);
- xmlpp::Element* test_el = dynamic_cast<xmlpp::Element*> (*l);
+ auto ref_el = dynamic_cast<xmlpp::Element*> (*k);
+ auto test_el = dynamic_cast<xmlpp::Element*> (*l);
BOOST_CHECK ((ref_el && test_el) || (!ref_el && !test_el));
if (ref_el && test_el) {
check_xml (ref_el, test_el, ignore_tags, ignore_whitespace);
}
- xmlpp::ContentNode* ref_cn = dynamic_cast<xmlpp::ContentNode*> (*k);
- xmlpp::ContentNode* test_cn = dynamic_cast<xmlpp::ContentNode*> (*l);
+ auto ref_cn = dynamic_cast<xmlpp::ContentNode*> (*k);
+ auto test_cn = dynamic_cast<xmlpp::ContentNode*> (*l);
BOOST_CHECK ((ref_cn && test_cn) || (!ref_cn && !test_cn));
if (ref_cn && test_cn) {
- if (
- !ignore_whitespace ||
- ref_cn->get_content().find_first_not_of(" \t\r\n") != string::npos ||
- test_cn->get_content().find_first_not_of(" \t\r\n") != string::npos) {
-
- BOOST_CHECK_EQUAL (ref_cn->get_content(), test_cn->get_content ());
- }
+ BOOST_CHECK_EQUAL (ref_cn->get_content(), test_cn->get_content());
}
++k;
++l;
}
- xmlpp::Element::AttributeList ref_attributes = ref->get_attributes ();
- xmlpp::Element::AttributeList test_attributes = test->get_attributes ();
+ while (k != ref_children.end() && ignore_whitespace && whitespace_content(*k)) {
+ ++k;
+ }
+
+ while (l != test_children.end() && ignore_whitespace && whitespace_content(*l)) {
+ ++l;
+ }
+
+ BOOST_REQUIRE (k == ref_children.end());
+ BOOST_REQUIRE (l == test_children.end());
+
+ auto ref_attributes = ref->get_attributes ();
+ auto test_attributes = test->get_attributes ();
BOOST_CHECK_EQUAL (ref_attributes.size(), test_attributes.size ());
- xmlpp::Element::AttributeList::const_iterator m = ref_attributes.begin();
- xmlpp::Element::AttributeList::const_iterator n = test_attributes.begin();
+ auto m = ref_attributes.begin();
+ auto n = test_attributes.begin();
while (m != ref_attributes.end ()) {
BOOST_CHECK_EQUAL ((*m)->get_name(), (*n)->get_name());
BOOST_CHECK_EQUAL ((*m)->get_value(), (*n)->get_value());
}
void
-check_xml (string ref, string test, list<string> ignore)
+check_xml (string ref, string test, list<string> ignore, bool ignore_whitespace)
{
xmlpp::DomParser* ref_parser = new xmlpp::DomParser ();
ref_parser->parse_memory (ref);
test_parser->parse_memory (test);
xmlpp::Element* test_root = test_parser->get_document()->get_root_node ();
- check_xml (ref_root, test_root, ignore);
+ check_xml (ref_root, test_root, ignore, ignore_whitespace);
}
void
}
+shared_ptr<dcp::SoundAsset>
+simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_meta, string language)
+{
+ /* Set a valid language, then overwrite it, so that the language parameter can be badly formed */
+ shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset(dcp::Fraction(24, 1), 48000, 1, dcp::LanguageTag("en-US"), dcp::SMPTE));
+ ms->_language = language;
+ ms->set_metadata (mxf_meta);
+ vector<dcp::Channel> active_channels;
+ active_channels.push_back (dcp::LEFT);
+ shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write (path / dcp::String::compose("audio%1.mxf", suffix), active_channels);
+
+ SF_INFO info;
+ info.format = 0;
+ SNDFILE* sndfile = sf_open ("test/data/1s_24-bit_48k_silence.wav", SFM_READ, &info);
+ BOOST_CHECK (sndfile);
+ float buffer[4096*6];
+ float* channels[1];
+ channels[0] = buffer;
+ while (true) {
+ sf_count_t N = sf_readf_float (sndfile, buffer, 4096);
+ sound_writer->write (channels, N);
+ if (N < 4096) {
+ break;
+ }
+ }
+
+ sound_writer->finalize ();
+
+ return ms;
+}
+
+
shared_ptr<dcp::DCP>
make_simple (boost::filesystem::path path, int reels)
{
string suffix = reels == 1 ? "" : dcp::String::compose("%1", i);
shared_ptr<dcp::MonoPictureAsset> mp = simple_picture (path, suffix);
-
- shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset(dcp::Fraction(24, 1), 48000, 1, dcp::LanguageTag("en-US"), dcp::SMPTE));
- ms->set_metadata (mxf_meta);
- vector<dcp::Channel> active_channels;
- active_channels.push_back (dcp::LEFT);
- shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write (path / dcp::String::compose("audio%1.mxf", suffix), active_channels);
-
- SF_INFO info;
- info.format = 0;
- SNDFILE* sndfile = sf_open ("test/data/1s_24-bit_48k_silence.wav", SFM_READ, &info);
- BOOST_CHECK (sndfile);
- float buffer[4096*6];
- float* channels[1];
- channels[0] = buffer;
- while (true) {
- sf_count_t N = sf_readf_float (sndfile, buffer, 4096);
- sound_writer->write (channels, N);
- if (N < 4096) {
- break;
- }
- }
-
- sound_writer->finalize ();
+ shared_ptr<dcp::SoundAsset> ms = simple_sound (path, suffix, mxf_meta, "en-US");
cpl->add (shared_ptr<dcp::Reel> (
new dcp::Reel (