diff --git a/tests/test_ogg.cpp b/tests/test_ogg.cpp index 0fc7cfef..6a671d48 100644 --- a/tests/test_ogg.cpp +++ b/tests/test_ogg.cpp @@ -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()); } } diff --git a/tests/test_oggflac.cpp b/tests/test_oggflac.cpp index e0f5bb16..737a7261 100644 --- a/tests/test_oggflac.cpp +++ b/tests/test_oggflac.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #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(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); diff --git a/tests/test_opus.cpp b/tests/test_opus.cpp index 398e7e91..3113e55f 100644 --- a/tests/test_opus.cpp +++ b/tests/test_opus.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #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(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); diff --git a/tests/test_speex.cpp b/tests/test_speex.cpp index 577adb3e..258795ab 100644 --- a/tests/test_speex.cpp +++ b/tests/test_speex.cpp @@ -1,4 +1,5 @@ #include +#include #include #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(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);