From 8f31d882b010c3d6bc79b060b2bb5a26318e7f94 Mon Sep 17 00:00:00 2001 From: Sebastian Rachuj Date: Mon, 20 May 2013 20:44:12 +0200 Subject: [PATCH] Added a few testcases --- taglib/ebml/ebmlfile.cpp | 2 +- taglib/ebml/matroska/ebmlmatroskafile.cpp | 8 +- tests/CMakeLists.txt | 3 + tests/data/matroska.mka | Bin 0 -> 4707 bytes tests/test_matroska.cpp | 100 ++++++++++++++++++++++ 5 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 tests/data/matroska.mka create mode 100644 tests/test_matroska.cpp diff --git a/taglib/ebml/ebmlfile.cpp b/taglib/ebml/ebmlfile.cpp index 9dbb73e0..e9f4ce9f 100644 --- a/taglib/ebml/ebmlfile.cpp +++ b/taglib/ebml/ebmlfile.cpp @@ -40,7 +40,7 @@ public: { document->seek(0); ByteVector magical = document->readBlock(4); - if(static_cast(magical.toInt64BE(0)) != Header::EBML) + if(static_cast(magical.toUInt32BE(0)) != Header::EBML) return 0; FilePrivate *d = new FilePrivate(document); Element *head = d->root.getChild(Header::EBML); diff --git a/taglib/ebml/matroska/ebmlmatroskafile.cpp b/taglib/ebml/matroska/ebmlmatroskafile.cpp index ad093fdc..93ff80cc 100644 --- a/taglib/ebml/matroska/ebmlmatroskafile.cpp +++ b/taglib/ebml/matroska/ebmlmatroskafile.cpp @@ -126,9 +126,11 @@ public: EBML::Matroska::File::~File() { - delete d->tag; - delete d->audio; - delete d; + if (d) { + delete d->tag; + delete d->audio; + delete d; + } } EBML::Matroska::File::File(FileName file) : EBML::File(file), d(0) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a369b5a1..7a5bbbf9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,6 +24,8 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/s3m ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/it ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/xm + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ebml + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ebml/matroska ) SET(test_runner_SRCS @@ -64,6 +66,7 @@ SET(test_runner_SRCS test_xm.cpp test_mpc.cpp test_opus.cpp + test_matroska.cpp ) INCLUDE_DIRECTORIES(${CPPUNIT_INCLUDE_DIR}) diff --git a/tests/data/matroska.mka b/tests/data/matroska.mka new file mode 100644 index 0000000000000000000000000000000000000000..e85bd338b1a86f6912a1d5ab544468e788fd6840 GIT binary patch literal 4707 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 BFTDT& literal 0 HcmV?d00001 diff --git a/tests/test_matroska.cpp b/tests/test_matroska.cpp new file mode 100644 index 00000000..7e026334 --- /dev/null +++ b/tests/test_matroska.cpp @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include +#include "utils.h" + +#include + +using namespace std; +using namespace TagLib; + +class TestMatroska : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE(TestMatroska); + CPPUNIT_TEST(testPredefined); + CPPUNIT_TEST(testInsertAndExtract); + CPPUNIT_TEST_SUITE_END(); + +public: + void testPredefined() + { + ScopedFileCopy copy("matroska", ".mka"); + string filename = copy.fileName(); + + EBML::Matroska::File f(filename.c_str()); + CPPUNIT_ASSERT(f.isValid()); + + PropertyMap pm = f.properties(); + PropertyMap::Iterator i = pm.find("ENCODER"); + CPPUNIT_ASSERT(i != f.properties().end()); + + CPPUNIT_ASSERT_EQUAL(String("Lavf54.63.104"), i->second.front()); + } + + void testInsertAndExtract() + { + ScopedFileCopy copy("matroska", ".mka"); + string filename = copy.fileName(); + + EBML::Matroska::File f1(filename.c_str()); + CPPUNIT_ASSERT(f1.isValid()); + + Tag* t = f1.tag(); + + CPPUNIT_ASSERT(t != 0); + t->setTitle("Seconds of Silence"); + t->setArtist("Nobody"); + t->setAlbum("TagLib Test Suite"); + t->setComment("Well, there's nothing to say - a few special signs: ©’…ä–€ſ"); + t->setGenre("Air"); + t->setYear(2013); + t->setTrack(15); + + CPPUNIT_ASSERT(f1.save()); + + EBML::Matroska::File f2(filename.c_str()); + CPPUNIT_ASSERT(f2.isValid()); + + t = f2.tag(); + + CPPUNIT_ASSERT(t != 0); + CPPUNIT_ASSERT_EQUAL(String("Seconds of Silence"), t->title()); + CPPUNIT_ASSERT_EQUAL(String("Nobody"), t->artist()); + CPPUNIT_ASSERT_EQUAL(String("TagLib Test Suite"), t->album()); + CPPUNIT_ASSERT_EQUAL(String("Well, there's nothing to say - a few special signs: ©’…ä–€ſ"), t->comment()); + CPPUNIT_ASSERT_EQUAL(String("Air"), t->genre()); + CPPUNIT_ASSERT_EQUAL(2013u, t->year()); + CPPUNIT_ASSERT_EQUAL(15u, t->track()); + + PropertyMap pm = f2.properties(); + pm.erase("COMMENT"); + f2.setProperties(pm); + + CPPUNIT_ASSERT(f2.save()); + + EBML::Matroska::File f3(filename.c_str()); + CPPUNIT_ASSERT(f3.isValid()); + + pm = f3.properties(); + PropertyMap::Iterator i = pm.find("GENRE"); + + CPPUNIT_ASSERT(i != pm.end()); + CPPUNIT_ASSERT_EQUAL(String("Air"), i->second.front()); + } + + void testAudioProperties() + { + ScopedFileCopy copy("matroska", ".mka"); + string filename = copy.fileName(); + + EBML::Matroska::File f(filename.c_str()); + CPPUNIT_ASSERT(f.isValid()); + + AudioProperties* a = f.audioProperties(); + CPPUNIT_ASSERT(a != 0); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestMatroska);