mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Add some tests about splitting/merging Ogg pages.
This commit is contained in:
parent
8130b30397
commit
1fa677e2ef
@ -59,16 +59,31 @@ public:
|
||||
{
|
||||
Vorbis::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(136383L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(19, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131127U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(3832U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(longText, f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3685, f.audioProperties()->lengthInMilliseconds());
|
||||
|
||||
f.tag()->setTitle("ABCDE");
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Vorbis::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(4370L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(3, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(60U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(3832U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(String("ABCDE"), f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3685, f.audioProperties()->lengthInMilliseconds());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <tbytevectorlist.h>
|
||||
#include <oggfile.h>
|
||||
#include <oggflacfile.h>
|
||||
#include <oggpageheader.h>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
#include "utils.h"
|
||||
|
||||
@ -16,6 +17,7 @@ class TestOggFLAC : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST_SUITE(TestOggFLAC);
|
||||
CPPUNIT_TEST(testFramingBit);
|
||||
CPPUNIT_TEST(testFuzzedFile);
|
||||
CPPUNIT_TEST(testSplitPackets);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -45,6 +47,53 @@ public:
|
||||
CPPUNIT_ASSERT(!f.isValid());
|
||||
}
|
||||
|
||||
void testSplitPackets()
|
||||
{
|
||||
ScopedFileCopy copy("empty_flac", ".oga");
|
||||
string newname = copy.fileName();
|
||||
|
||||
String longText(std::string(128 * 1024, ' ').c_str());
|
||||
for(size_t i = 0; i < longText.length(); ++i)
|
||||
longText[i] = static_cast<wchar>(L'A' + (i % 26));
|
||||
|
||||
{
|
||||
Ogg::FLAC::File f(newname.c_str());
|
||||
f.tag()->setTitle(longText);
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::FLAC::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(141141L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(21, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131126U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(22U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(8196U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(longText, f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3705, f.audioProperties()->lengthInMilliseconds());
|
||||
|
||||
f.tag()->setTitle("ABCDE");
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::FLAC::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(9128L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(5, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(59U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(22U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(8196U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(String("ABCDE"), f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3705, f.audioProperties()->lengthInMilliseconds());
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestOggFLAC);
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <tag.h>
|
||||
#include <tbytevectorlist.h>
|
||||
#include <opusfile.h>
|
||||
#include <oggpageheader.h>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
#include "utils.h"
|
||||
|
||||
@ -15,6 +16,7 @@ class TestOpus : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testAudioProperties);
|
||||
CPPUNIT_TEST(testReadComments);
|
||||
CPPUNIT_TEST(testWriteComments);
|
||||
CPPUNIT_TEST(testSplitPackets);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -61,6 +63,53 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void testSplitPackets()
|
||||
{
|
||||
ScopedFileCopy copy("correctness_gain_silent_output", ".opus");
|
||||
string newname = copy.fileName();
|
||||
|
||||
String longText(std::string(128 * 1024, ' ').c_str());
|
||||
for(size_t i = 0; i < longText.length(); ++i)
|
||||
longText[i] = static_cast<wchar>(L'A' + (i % 26));
|
||||
|
||||
{
|
||||
Ogg::Opus::File f(newname.c_str());
|
||||
f.tag()->setTitle(longText);
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::Opus::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(167534L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(27, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131380U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(5U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(5U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(longText, f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(7737, f.audioProperties()->lengthInMilliseconds());
|
||||
|
||||
f.tag()->setTitle("ABCDE");
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::Opus::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(35521L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(11, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(313U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(5U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(5U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(String("ABCDE"), f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(7737, f.audioProperties()->lengthInMilliseconds());
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestOpus);
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include <speexfile.h>
|
||||
#include <oggpageheader.h>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
#include "utils.h"
|
||||
|
||||
@ -9,6 +10,7 @@ class TestSpeex : public CppUnit::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(TestSpeex);
|
||||
CPPUNIT_TEST(testAudioProperties);
|
||||
CPPUNIT_TEST(testSplitPackets);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -26,6 +28,53 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
|
||||
}
|
||||
|
||||
void testSplitPackets()
|
||||
{
|
||||
ScopedFileCopy copy("empty", ".spx");
|
||||
string newname = copy.fileName();
|
||||
|
||||
String longText(std::string(128 * 1024, ' ').c_str());
|
||||
for (size_t i = 0; i < longText.length(); ++i)
|
||||
longText[i] = static_cast<wchar>(L'A' + (i % 26));
|
||||
|
||||
{
|
||||
Ogg::Speex::File f(newname.c_str());
|
||||
f.tag()->setTitle(longText);
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::Speex::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(156330L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(23, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131116U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(93U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(93U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(longText, f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3685, f.audioProperties()->lengthInMilliseconds());
|
||||
|
||||
f.tag()->setTitle("ABCDE");
|
||||
f.save();
|
||||
}
|
||||
{
|
||||
Ogg::Speex::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(24317L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(7, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(49U, f.packet(1).size());
|
||||
CPPUNIT_ASSERT_EQUAL(93U, f.packet(2).size());
|
||||
CPPUNIT_ASSERT_EQUAL(93U, f.packet(3).size());
|
||||
CPPUNIT_ASSERT_EQUAL(String("ABCDE"), f.tag()->title());
|
||||
|
||||
CPPUNIT_ASSERT(f.audioProperties());
|
||||
CPPUNIT_ASSERT_EQUAL(3685, f.audioProperties()->lengthInMilliseconds());
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestSpeex);
|
||||
|
Loading…
Reference in New Issue
Block a user