diff options
author | Mathias Panzenböck <grosser.meister.morti@gmx.net> | 2011-06-18 03:31:49 +0200 |
---|---|---|
committer | Mathias Panzenböck <grosser.meister.morti@gmx.net> | 2011-06-18 03:31:49 +0200 |
commit | 5ad69f6f2af252eb7b0841974dc83638fab3537d (patch) | |
tree | 69655739d2ee990718d2005096dd76acf922d4fe /tests | |
parent | fe356c31b4a71e99309696c0717b03fcc6f17f0f (diff) |
fixed mod property names and added unit test for xm
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/data/changed_title.xm | bin | 0 -> 5471 bytes | |||
-rw-r--r-- | tests/data/test.xm | bin | 0 -> 5471 bytes | |||
-rw-r--r-- | tests/test_mod.cpp | 187 | ||||
-rw-r--r-- | tests/test_xm.cpp | 110 | ||||
-rw-r--r-- | tests/utils.h | 31 |
6 files changed, 220 insertions, 109 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 295e6c7b..28f621fa 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -52,6 +52,7 @@ SET(test_runner_SRCS test_wav.cpp test_wavpack.cpp test_mod.cpp + test_xm.cpp ) IF(WITH_MP4) SET(test_runner_SRCS ${test_runner_SRCS} diff --git a/tests/data/changed_title.xm b/tests/data/changed_title.xm Binary files differnew file mode 100644 index 00000000..e4b5f6d8 --- /dev/null +++ b/tests/data/changed_title.xm diff --git a/tests/data/test.xm b/tests/data/test.xm Binary files differnew file mode 100644 index 00000000..b09d9132 --- /dev/null +++ b/tests/data/test.xm diff --git a/tests/test_mod.cpp b/tests/test_mod.cpp index f1de1bcd..e1b5ba01 100644 --- a/tests/test_mod.cpp +++ b/tests/test_mod.cpp @@ -1,9 +1,27 @@ +/*************************************************************************** + copyright : (C) 2011 by Mathias Panzenböck + email : grosser.meister.morti@gmx.net + ***************************************************************************/ + +/*************************************************************************** + * This library is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License version * + * 2.1 as published by the Free Software Foundation. * + * * + * This library is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301 USA * + ***************************************************************************/ + #include <cppunit/extensions/HelperMacros.h> #include <string> -#include <stdio.h> -#include <string.h> #include <modfile.h> -#include <stdlib.h> #include "utils.h" using namespace std; @@ -11,116 +29,67 @@ using namespace TagLib; class TestMod : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(TestMod); - CPPUNIT_TEST(testRead); - CPPUNIT_TEST(testChangeTitle); - CPPUNIT_TEST_SUITE_END(); + CPPUNIT_TEST_SUITE(TestMod); + CPPUNIT_TEST(testRead); + CPPUNIT_TEST(testChangeTitle); + CPPUNIT_TEST_SUITE_END(); public: - void testRead() - { - testRead(TEST_FILE_PATH_C("test.mod"), "title of song"); - } - - void testChangeTitle() - { - ScopedFileCopy copy("test", ".mod"); - { - Mod::File file(copy.fileName().c_str()); - CPPUNIT_ASSERT(file.tag() != 0); - file.tag()->setTitle("changed title"); - CPPUNIT_ASSERT(file.save()); - } - { - testRead(copy.fileName().c_str(), "changed title"); - } - { - assertFileEqual( - copy.fileName().c_str(), - TEST_FILE_PATH_C("changed_title.mod")); - } - } + void testRead() + { + testRead(TEST_FILE_PATH_C("test.mod"), "title of song"); + } + + void testChangeTitle() + { + ScopedFileCopy copy("test", ".mod"); + { + Mod::File file(copy.fileName().c_str()); + CPPUNIT_ASSERT(file.tag() != 0); + file.tag()->setTitle("changed title"); + CPPUNIT_ASSERT(file.save()); + } + testRead(copy.fileName().c_str(), "changed title"); + CPPUNIT_ASSERT(fileEqual( + copy.fileName(), + TEST_FILE_PATH_C("changed_title.mod"))); + } private: - class Closer - { - public: - Closer(FILE *stream) : m_stream(stream) - { - } - - ~Closer() - { - if (m_stream) - { - fclose(m_stream); - } - } - private: - FILE *m_stream; - }; - - void assertFileEqual(const char *file1, const char *file2) - { - char buf1[BUFSIZ]; - char buf2[BUFSIZ]; - - FILE *stream1 = fopen(file1, "rb"); - FILE *stream2 = fopen(file2, "rb"); - - Closer closer1(stream1); - Closer closer2(stream2); - - CPPUNIT_ASSERT(stream1 != 0); - CPPUNIT_ASSERT(stream2 != 0); - - for (;;) - { - size_t n1 = fread(buf1, 1, BUFSIZ, stream1); - size_t n2 = fread(buf2, 1, BUFSIZ, stream2); - - CPPUNIT_ASSERT_EQUAL(n1, n2); - - if (n1 == 0) break; - - CPPUNIT_ASSERT(memcmp(buf1, buf2, n1) == 0); - } - } - - void testRead(FileName fileName, const String &title) - { - Mod::File file(fileName); - - CPPUNIT_ASSERT(file.isValid()); - - Mod::Properties *p = file.audioProperties(); - Mod::Tag *t = file.tag(); - - CPPUNIT_ASSERT(0 != p); - CPPUNIT_ASSERT(0 != t); - - CPPUNIT_ASSERT_EQUAL(0, p->length()); - CPPUNIT_ASSERT_EQUAL(0, p->bitrate()); - CPPUNIT_ASSERT_EQUAL(0, p->sampleRate()); - CPPUNIT_ASSERT_EQUAL(8, p->channels()); - CPPUNIT_ASSERT_EQUAL(31U, p->instrumentCount()); - CPPUNIT_ASSERT_EQUAL(1U, p->patternCount()); - CPPUNIT_ASSERT_EQUAL(title, t->title()); - CPPUNIT_ASSERT_EQUAL(String::null, t->artist()); - CPPUNIT_ASSERT_EQUAL(String::null, t->album()); - CPPUNIT_ASSERT_EQUAL(String( - "Instrument names\n" - "are abused as\n" - "comments in\n" - "module file formats.\n" - "-+-+-+-+-+-+-+-+-+-+-+\n" - "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" - ), t->comment()); - CPPUNIT_ASSERT_EQUAL(String::null, t->genre()); - CPPUNIT_ASSERT_EQUAL(0U, t->year()); - CPPUNIT_ASSERT_EQUAL(0U, t->track()); - CPPUNIT_ASSERT_EQUAL(String("StarTrekker"), t->trackerName()); - } + void testRead(FileName fileName, const String &title) + { + Mod::File file(fileName); + + CPPUNIT_ASSERT(file.isValid()); + + Mod::Properties *p = file.audioProperties(); + Mod::Tag *t = file.tag(); + + CPPUNIT_ASSERT(0 != p); + CPPUNIT_ASSERT(0 != t); + + CPPUNIT_ASSERT_EQUAL(0, p->length()); + CPPUNIT_ASSERT_EQUAL(0, p->bitrate()); + CPPUNIT_ASSERT_EQUAL(0, p->sampleRate()); + CPPUNIT_ASSERT_EQUAL(8, p->channels()); + CPPUNIT_ASSERT_EQUAL(31U, p->instrumentCount()); + CPPUNIT_ASSERT_EQUAL(1U, p->tableLength()); + CPPUNIT_ASSERT_EQUAL(title, t->title()); + CPPUNIT_ASSERT_EQUAL(String::null, t->artist()); + CPPUNIT_ASSERT_EQUAL(String::null, t->album()); + CPPUNIT_ASSERT_EQUAL(String( + "Instrument names\n" + "are abused as\n" + "comments in\n" + "module file formats.\n" + "-+-+-+-+-+-+-+-+-+-+-+\n" + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + ), t->comment()); + CPPUNIT_ASSERT_EQUAL(String::null, t->genre()); + CPPUNIT_ASSERT_EQUAL(0U, t->year()); + CPPUNIT_ASSERT_EQUAL(0U, t->track()); + CPPUNIT_ASSERT_EQUAL(String("StarTrekker"), t->trackerName()); + } }; CPPUNIT_TEST_SUITE_REGISTRATION(TestMod); diff --git a/tests/test_xm.cpp b/tests/test_xm.cpp new file mode 100644 index 00000000..28d94b39 --- /dev/null +++ b/tests/test_xm.cpp @@ -0,0 +1,110 @@ +/*************************************************************************** + copyright : (C) 2011 by Mathias Panzenböck + email : grosser.meister.morti@gmx.net + ***************************************************************************/ + +/*************************************************************************** + * This library is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License version * + * 2.1 as published by the Free Software Foundation. * + * * + * This library is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * + * MA 02110-1301 USA * + ***************************************************************************/ + +#include <cppunit/extensions/HelperMacros.h> +#include <string> +#include <xmfile.h> +#include "utils.h" + +using namespace std; +using namespace TagLib; + +class TestXM : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE(TestXM); + CPPUNIT_TEST(testRead); + CPPUNIT_TEST(testChangeTitle); + CPPUNIT_TEST_SUITE_END(); + +public: + void testRead() + { + testRead(TEST_FILE_PATH_C("test.xm"), "title of song"); + } + + void testChangeTitle() + { + ScopedFileCopy copy("test", ".xm"); + { + XM::File file(copy.fileName().c_str()); + CPPUNIT_ASSERT(file.tag() != 0); + file.tag()->setTitle("changed title"); + CPPUNIT_ASSERT(file.save()); + } + testRead(copy.fileName().c_str(), "changed title"); + CPPUNIT_ASSERT(fileEqual( + copy.fileName(), + TEST_FILE_PATH_C("changed_title.xm"))); + } + +private: + void testRead(FileName fileName, const String &title) + { + XM::File file(fileName); + + CPPUNIT_ASSERT(file.isValid()); + + XM::Properties *p = file.audioProperties(); + Mod::Tag *t = file.tag(); + + CPPUNIT_ASSERT(0 != p); + CPPUNIT_ASSERT(0 != t); + + CPPUNIT_ASSERT_EQUAL(0, p->length()); + CPPUNIT_ASSERT_EQUAL(0, p->bitrate()); + CPPUNIT_ASSERT_EQUAL(0, p->sampleRate()); + CPPUNIT_ASSERT_EQUAL(8, p->channels()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort) 1, p->tableLength()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort)260, p->version()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort) 0, p->restartPosition()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort) 1, p->patternCount()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort)128, p->instrumentCount()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort) 1, p->flags()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort) 6, p->tempo()); + CPPUNIT_ASSERT_EQUAL((TagLib::ushort)125, p->bpmSpeed()); + CPPUNIT_ASSERT_EQUAL(title, t->title()); + CPPUNIT_ASSERT_EQUAL(String::null, t->artist()); + CPPUNIT_ASSERT_EQUAL(String::null, t->album()); + CPPUNIT_ASSERT_EQUAL(String( + "Instrument names\n" + "are abused as\n" + "comments in\n" + "module file formats.\n" + "-+-+-+-+-+-+-+-+-+-+-+\n" + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "\n\n\n" + "Sample\n" + "names\n" + "are sometimes\n" + "also abused as\n" + "comments." + ), t->comment()); + CPPUNIT_ASSERT_EQUAL(String::null, t->genre()); + CPPUNIT_ASSERT_EQUAL(0U, t->year()); + CPPUNIT_ASSERT_EQUAL(0U, t->track()); + CPPUNIT_ASSERT_EQUAL(String("MilkyTracker "), t->trackerName()); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(TestXM); diff --git a/tests/utils.h b/tests/utils.h index 57226efc..39e15ce9 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -9,7 +9,9 @@ #include <sys/fcntl.h> #endif #include <stdio.h> +#include <string.h> #include <string> +#include <fstream> using namespace std; @@ -45,6 +47,35 @@ inline void deleteFile(const string &filename) remove(filename.c_str()); } +inline bool fileEqual(const string &filename1, const string &filename2) +{ + char buf1[BUFSIZ]; + char buf2[BUFSIZ]; + + ifstream stream1(filename1.c_str(), ios_base::in | ios_base::binary); + ifstream stream2(filename2.c_str(), ios_base::in | ios_base::binary); + + if(!stream1 && !stream2) return true; + if(!stream1 || !stream2) return false; + + for(;;) + { + stream1.read(buf1, BUFSIZ); + stream2.read(buf2, BUFSIZ); + + streamsize n1 = stream1.gcount(); + streamsize n2 = stream2.gcount(); + + if(n1 != n2) return false; + + if(n1 == 0) break; + + if(memcmp(buf1, buf2, n1) != 0) return false; + } + + return stream1.good() == stream2.good(); +} + class ScopedFileCopy { public: |