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());
89 void OverallTests::checkMp3TestMetaData()
97 CPPUNIT_ASSERT(id3v1Tag = m_fileInfo.id3v1Tag());
98 CPPUNIT_ASSERT(id3v2Tag = m_fileInfo.id3v2Tags().at(0).get());
100 CPPUNIT_ASSERT(id3v1Tag = m_fileInfo.id3v1Tag());
101 CPPUNIT_ASSERT(m_fileInfo.id3v2Tags().empty());
103 CPPUNIT_ASSERT(!m_fileInfo.id3v1Tag());
104 CPPUNIT_ASSERT(id3v2Tag = m_fileInfo.id3v2Tags().at(0).get());
113 m_preservedMetaData.pop();
120 CPPUNIT_ASSERT_EQUAL(m_testTitle, titleValue);
121 CPPUNIT_ASSERT_EQUAL(m_testComment, commentValue);
126 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", titleValue.
dataEncoding() == TagTextEncoding::Utf16LittleEndian);
128 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", commentValue.
dataEncoding() == TagTextEncoding::Utf16LittleEndian);
129 CPPUNIT_ASSERT_MESSAGE(
"not attempted to use UTF-8 in ID3v2.3", commentValue.
descriptionEncoding() == TagTextEncoding::Utf16LittleEndian);
131 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());
137 m_preservedMetaData.pop();
154 void OverallTests::checkMp3PaddingConstraints()
161 CPPUNIT_ASSERT(m_fileInfo.paddingSize() == 4096);
163 CPPUNIT_ASSERT(m_fileInfo.paddingSize() >= 1024);
164 CPPUNIT_ASSERT(m_fileInfo.paddingSize() <= (4096 + 1024));
173 void OverallTests::setMp3TestMetaData()
181 id3v1Tag = m_fileInfo.createId3v1Tag();
182 id3v2Tag = m_fileInfo.createId3v2Tag();
184 id3v1Tag = m_fileInfo.createId3v1Tag();
185 m_fileInfo.removeAllId3v2Tags();
187 m_fileInfo.removeId3v1Tag();
188 id3v2Tag = m_fileInfo.createId3v2Tag();
195 for(
Tag *tag : initializer_list<Tag *>{id3v1Tag, id3v2Tag}) {
213 cerr << endl <<
"MP3 parser" << endl;
216 parseFile(TestUtilities::testFilePath(
"mtx-test-data/mp3/id3-tag-and-xing-header.mp3"), &OverallTests::checkMp3Testfile1);
224 void OverallTests::testMp3Making()
230 for(m_mode = 0; m_mode != 0x20; ++m_mode) {
240 m_fileInfo.setTagPosition(ElementPosition::Keep);
241 m_fileInfo.setIndexPosition(ElementPosition::Keep);
244 m_fileInfo.setMaxPadding(m_mode &
PaddingConstraints ? (4096 + 1024) : static_cast<size_t>(-1));
245 m_fileInfo.setForceTagPosition(
false);
246 m_fileInfo.setForceIndexPosition(
false);
249 list<string> testConditions;
251 testConditions.emplace_back(
"forcing rewrite");
255 testConditions.emplace_back(
"removing tag");
257 testConditions.emplace_back(
"ID3v1 and ID3v2");
260 testConditions.emplace_back(
"ID3v1 only");
262 testConditions.emplace_back(
"ID3v2 only");
265 testConditions.emplace_back(
"padding constraints");
268 testConditions.emplace_back(
"use ID3v2.4");
270 cerr << endl <<
"MP3 maker - testmode " << m_mode <<
": " << joinStrings(testConditions,
", ") << endl;
274 void (
OverallTests::*modifyRoutine)(void) = (m_mode &
RemoveTag) ? &OverallTests::removeAllTags : &OverallTests::setMp3TestMetaData;
275 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.