4 #include "../abstracttrack.h" 5 #include "../mpegaudio/mpegaudioframe.h" 6 #include "../id3/id3v1tag.h" 7 #include "../id3/id3v2tag.h" 24 void OverallTests::checkMp3Testfile1()
27 const auto tracks = m_fileInfo.tracks();
28 CPPUNIT_ASSERT(tracks.size() == 1);
29 for(
const auto &track : tracks) {
33 CPPUNIT_ASSERT(track->channelCount() == 2);
34 CPPUNIT_ASSERT(track->channelConfig() ==
static_cast<byte
>(MpegChannelMode::JointStereo));
35 CPPUNIT_ASSERT(track->samplingFrequency() == 44100);
36 CPPUNIT_ASSERT(track->duration().seconds() == 3);
38 const auto tags = m_fileInfo.tags();
41 CPPUNIT_ASSERT(m_fileInfo.id3v1Tag());
42 CPPUNIT_ASSERT(m_fileInfo.id3v2Tags().size() == 1);
43 CPPUNIT_ASSERT(tags.size() == 2);
44 for(
const auto &tag : tags) {
48 case TagType::Id3v1Tag:
51 CPPUNIT_ASSERT(tag->value(
KnownField::Album).toString() ==
"Double Nickels On The Dime");
55 case TagType::Id3v2Tag:
56 CPPUNIT_ASSERT(tag->value(
KnownField::Title).dataEncoding() == TagTextEncoding::Utf16LittleEndian);
61 CPPUNIT_ASSERT(tag->value(
KnownField::Album).toWString() == u
"Double Nickels On The Dime");
68 CPPUNIT_ASSERT(tag->value(KnownField::Length).toTimeSpan().isNull());
77 checkMp3TestMetaData();
80 CPPUNIT_ASSERT_EQUAL(0_st, tracks.size());
88 void OverallTests::checkMp3TestMetaData()
96 CPPUNIT_ASSERT(id3v1Tag = m_fileInfo.id3v1Tag());
97 CPPUNIT_ASSERT(id3v2Tag = m_fileInfo.id3v2Tags().at(0).get());
99 CPPUNIT_ASSERT(id3v1Tag = m_fileInfo.id3v1Tag());
100 CPPUNIT_ASSERT(m_fileInfo.id3v2Tags().empty());
102 CPPUNIT_ASSERT(!m_fileInfo.id3v1Tag());
103 CPPUNIT_ASSERT(id3v2Tag = m_fileInfo.id3v2Tags().at(0).get());
112 m_preservedMetaData.pop();
119 CPPUNIT_ASSERT_EQUAL(m_testTitle, titleValue);
120 CPPUNIT_ASSERT_EQUAL(m_testComment, commentValue);
125 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", titleValue.
dataEncoding() == TagTextEncoding::Utf16LittleEndian);
127 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", commentValue.
dataEncoding() == TagTextEncoding::Utf16LittleEndian);
128 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", commentValue.
descriptionEncoding() == TagTextEncoding::Utf16LittleEndian);
130 CPPUNIT_ASSERT_EQUAL_MESSAGE(
"description is also converted to UTF-16",
"s\0o\0m\0e\0 \0d\0e\0s\0c\0r\0i\0p\0t\0i\0\xf3\0n\0"s, commentValue.
description());
136 m_preservedMetaData.pop();
153 void OverallTests::checkMp3PaddingConstraints()
160 CPPUNIT_ASSERT(m_fileInfo.paddingSize() == 4096);
162 CPPUNIT_ASSERT(m_fileInfo.paddingSize() >= 1024);
163 CPPUNIT_ASSERT(m_fileInfo.paddingSize() <= (4096 + 1024));
172 void OverallTests::setMp3TestMetaData()
180 id3v1Tag = m_fileInfo.createId3v1Tag();
181 id3v2Tag = m_fileInfo.createId3v2Tag();
183 id3v1Tag = m_fileInfo.createId3v1Tag();
184 m_fileInfo.removeAllId3v2Tags();
186 m_fileInfo.removeId3v1Tag();
187 id3v2Tag = m_fileInfo.createId3v2Tag();
189 if(!(m_mode & Id3v1Only) && m_mode &
UseId3v24) {
194 for(
Tag *tag : initializer_list<Tag *>{id3v1Tag, id3v2Tag}) {
212 cerr << endl <<
"MP3 parser" << endl;
213 m_fileInfo.setForceFullParse(
false);
215 parseFile(TestUtilities::testFilePath(
"mtx-test-data/mp3/id3-tag-and-xing-header.mp3"), &OverallTests::checkMp3Testfile1);
223 void OverallTests::testMp3Making()
226 m_fileInfo.setForceFullParse(
true);
229 for(m_mode = 0; m_mode != 0x20; ++m_mode) {
239 m_fileInfo.setTagPosition(ElementPosition::Keep);
240 m_fileInfo.setIndexPosition(ElementPosition::Keep);
242 m_fileInfo.setMinPadding(m_mode & PaddingConstraints ? 1024 : 0);
243 m_fileInfo.setMaxPadding(m_mode & PaddingConstraints ? (4096 + 1024) : static_cast<size_t>(-1));
244 m_fileInfo.setForceTagPosition(
false);
245 m_fileInfo.setForceIndexPosition(
false);
248 list<string> testConditions;
249 if(m_mode & ForceRewring) {
250 testConditions.emplace_back(
"forcing rewrite");
254 testConditions.emplace_back(
"removing tag");
256 testConditions.emplace_back(
"ID3v1 and ID3v2");
259 testConditions.emplace_back(
"ID3v1 only");
261 testConditions.emplace_back(
"ID3v2 only");
263 if(m_mode & PaddingConstraints) {
264 testConditions.emplace_back(
"padding constraints");
266 if(m_mode & UseId3v24) {
267 testConditions.emplace_back(
"use ID3v2.4");
269 cerr << endl <<
"MP3 maker - testmode " << m_mode <<
": " << joinStrings(testConditions,
", ") << endl;
273 void (
OverallTests::*modifyRoutine)(void) = (m_mode &
RemoveTag) ? &OverallTests::removeAllTags : &OverallTests::setMp3TestMetaData;
274 makeFile(TestUtilities::workingCopyPath(
"mtx-test-data/mp3/id3-tag-and-xing-header.mp3"), modifyRoutine, &OverallTests::checkMp3Testfile1);
The OverallTests class tests reading and writing tags and parsing technical information for all suppo...
void testMp3Parsing()
Tests the MP3 parser via MediaFileInfo.