3 #include "../abstracttrack.h"
12 void OverallTests::checkFlacTestfile1()
15 const auto tracks = m_fileInfo.
tracks();
16 CPPUNIT_ASSERT_EQUAL(1_st, tracks.size());
17 for (
const auto &track : tracks) {
20 CPPUNIT_ASSERT_EQUAL(
static_cast<std::uint16_t
>(2), track->channelCount());
21 CPPUNIT_ASSERT_EQUAL(44100u, track->samplingFrequency());
22 CPPUNIT_ASSERT_EQUAL(
static_cast<std::uint16_t
>(16), track->bitsPerSample());
23 CPPUNIT_ASSERT_EQUAL(4, track->duration().minutes());
25 const auto tags = m_fileInfo.
tags();
26 switch (m_tagStatus) {
27 case TagStatus::Original:
29 CPPUNIT_ASSERT_EQUAL(1_st, tags.size());
30 CPPUNIT_ASSERT_EQUAL(
"Sad Song"s, tags.front()->value(
KnownField::Title).toString());
32 CPPUNIT_ASSERT_EQUAL(
"Don't Go Away (Apple Lossless)"s, tags.front()->value(
KnownField::Album).toString());
33 CPPUNIT_ASSERT_EQUAL(
"Alternative & Punk"s, tags.front()->value(
KnownField::Genre).toString());
34 TESTUTILS_ASSERT_LIKE(
"encoder",
"Lavf.*", tags.front()->value(
KnownField::Encoder).toString());
35 CPPUNIT_ASSERT_EQUAL(
"1998"s, tags.front()->value(
KnownField::Year).toString());
42 case TagStatus::TestMetaDataPresent:
43 checkOggTestMetaData();
46 CPPUNIT_ASSERT_EQUAL(0_st, tags.size());
49 CPPUNIT_ASSERT(m_diag.
level() <= DiagLevel::Information);
56 void OverallTests::checkFlacTestfile2()
59 const auto tracks = m_fileInfo.
tracks();
60 CPPUNIT_ASSERT_EQUAL(1_st, tracks.size());
61 for (
const auto &track : tracks) {
64 CPPUNIT_ASSERT_EQUAL(
static_cast<std::uint16_t
>(2), track->channelCount());
65 CPPUNIT_ASSERT_EQUAL(44100u, track->samplingFrequency());
66 CPPUNIT_ASSERT_EQUAL(
static_cast<std::uint16_t
>(16), track->bitsPerSample());
67 CPPUNIT_ASSERT_EQUAL(4, track->duration().minutes());
69 const auto tags = m_fileInfo.
tags();
70 switch (m_tagStatus) {
71 case TagStatus::Original:
72 CPPUNIT_ASSERT_EQUAL(1_st, tags.size());
74 case TagStatus::TestMetaDataPresent:
75 checkOggTestMetaData();
78 CPPUNIT_ASSERT_EQUAL(0_st, tags.size());
83 bool gotMessageAboutMissingVorbisComment =
false;
84 for (
const auto &msg : m_diag) {
85 if (msg.level() == DiagLevel::Critical) {
86 CPPUNIT_ASSERT_EQUAL(
"OGG page after FLAC-to-Ogg mapping header doesn't contain Vorbis comment."s, msg.message());
87 gotMessageAboutMissingVorbisComment =
true;
90 CPPUNIT_ASSERT(msg.level() <= DiagLevel::Information);
92 CPPUNIT_ASSERT(gotMessageAboutMissingVorbisComment);
94 CPPUNIT_ASSERT(m_diag.level() <= DiagLevel::Information);
103 cerr << endl <<
"FLAC parser" << endl;
105 m_tagStatus = TagStatus::Original;
106 parseFile(testFilePath(
"flac/test.flac"), &OverallTests::checkFlacTestfile1);
107 parseFile(testFilePath(
"flac/test.ogg"), &OverallTests::checkFlacTestfile2);
120 for (m_mode = 0; m_mode != 0x2; ++m_mode) {
126 list<string> testConditions;
128 testConditions.emplace_back(
"removing tag");
130 testConditions.emplace_back(
"modifying tag");
132 cerr << endl <<
"FLAC maker - testmode " << m_mode <<
": " << joinStrings(testConditions,
", ") << endl;
136 void (
OverallTests::*modifyRoutine)(void) = (m_mode &
RemoveTag) ? &OverallTests::removeAllTags : &OverallTests::setOggTestMetaData;
137 makeFile(workingCopyPath(
"flac/test.flac"), modifyRoutine, &OverallTests::checkFlacTestfile1);
138 makeFile(workingCopyPath(
"flac/test.ogg"), modifyRoutine, &OverallTests::checkFlacTestfile2);